accounted
← Blogg

ChatGPT, Claude och din ledger: konkreta workflows

Hur du kopplar Claude eller ChatGPT till din bokföring via MCP. Konkret: 'Stäng månaden' som agentisk workflow, säkerhet via godkännandepunkter, och varför MCP är skillnaden mot ett vanligt API. Med riktiga konton (1930, 1510, 6212) och kommandon.

För grundare12 maj 2026Senast uppdaterad: 27 september 20266 min läsning

TL;DRHur du kopplar Claude eller ChatGPT till din bokföring via MCP. Konkret: 'Stäng månaden' som agentisk workflow, säkerhet via godkännandepunkter, och varför MCP är skillnaden mot ett vanligt API. Med riktiga konton (1930, 1510, 6212) och kommandon.

Den här artikeln visar exakt hur du kopplar Claude (eller ChatGPT) till din bokföring och hur det ser ut i praktiken. Tre konkreta workflows, riktiga kontonummer, riktiga kommandon. Ingen AI-magi-handviftning.

Skillnaden: API vs MCP

Det första att förstå är att ett vanligt REST-API och en MCP-server är två olika saker, även när de pekar mot samma underliggande data.

Ett REST-API är något du integrerar mot från kod. Du skriver Python, skickar en POST, parsar JSON.

En MCP-server är något en LLM-agent integrerar mot från en konversation. Du skriver "Stäng månaden" och LLM:en bestämmer själv vilka verktyg den ska kalla, i vilken ordning, med vilka argument. Den ser verktygen som strukturerade funktioner: exakt vad de gör, vilka argument de tar, vad de returnerar.

Accounted exponerar båda. REST-API:et används av egen kod och av externa system som n8n och Make. MCP-servern används av Claude, ChatGPT, Grok, Cursor och andra MCP-kompatibla LLM-klienter.

För dig som användare betyder det här att du kan välja: skriva integrationen själv (REST), bygga en automation i ett verktyg (REST via webhook), eller bara prata med Claude och låta den göra jobbet (MCP).

Konkret exempel 1: "Stäng månaden"

Du öppnar Claude Desktop och skriver:

Stäng april 2026 i accounted. Visa mig en sammanfattning av vad som behöver göras innan vi låser perioden.

Claude laddar arbetsflödet month-end-close med gnubok_load_skill, kör gnubok_vat_close_check och får tillbaka (förkortat):

{
  "period_label": "april 2026",
  "ready_to_close": false,
  "blockers": [
    {"type": "uncategorized_transactions", "count": 3},
    {"type": "unmatched_documents", "count": 7}
  ],
  "payment": {"net_due": 18432, "direction": "pay"}
}

Claude rapporterar tillbaka till dig på svenska och föreslår att börja med de okategoriserade transaktionerna. Du säger ja. Claude kallar gnubok_list_uncategorized_transactions, sen gnubok_suggest_categories, och köar tre gnubok_categorize_transaction-anrop. Du ser dem i accounted-webben: tre rader, alla med rimliga konton (1930 → 6212 telefoni, 1930 → 4010 inköp, 1930 → 6071 representation). Du godkänner i batch.

Sen kör Claude gnubok_vat_review_widget för moms-genomgången. Du tittar på siffrorna, godkänner. Claude stagar gnubok_lock_period och du bekräftar låsningen. Klart.

Total tid: 6 minuter. Det här tog tidigare en eftermiddag.

Konkret exempel 2: Avstämning mot fakturor

Du har 12 inkommande betalningar och vill matcha dem mot utestående fakturor. Du skriver i Claude:

Stäm av de senaste 12 inbetalningarna mot kundreskontran.

Claude kallar gnubok_auto_match_period, som går igenom omatchade inbetalningar och föreslår fakturamatchningar med konfidens, och läser utestående fakturor med gnubok_get_ar_ledger. Tio matchar exakt. Claude köar gnubok_match_transaction_to_invoice för var och en. Två matchar inte exakt: en betalning är 50 kr för låg, en är 200 kr för hög.

Claude frågar dig:

Faktura 2026-018 (8 750 kr) har en inbetalning på 8 700 kr från en utländsk bank, som verkar ha dragit 50 kr i avgift på vägen. Boka mellanskillnaden som bankkostnad?

Du säger ja. Claude köar matchningen som delbetalning plus en verifikation för avgiften. Effekten i huvudboken:

1930 Bank                   +8 700
6570 Bankkostnader             +50
1510 Kundfordringar         −8 750

Hela operationen tog 90 sekunder att initiera och du godkände i accounted-webben i en kontrollpunkt. Audit-loggen visar exakt vilken Claude-session som föreslog vad, vid vilken tidpunkt, och vem (du) som godkände.

Konkret exempel 3: Runway-rapport varje måndag

Det här är där det blir intressant. Du skriver i Claude:

Visa runway baserat på de senaste 90 dagarnas burn. Jämför mot förra månadens rapport.

Claude kallar gnubok_get_kpi_report med rätt parametrar, läser ut kassa och månadstrend, räknar fram burn-rate, jämför mot förra körningen (som ligger som notering i en delad Notion-sida), och svarar:

Burn: 487 000 kr/månad (förra månaden 521 000). Kassa: 4.2 MSEK. Runway: 8.6 månader. Förbättring: +0.7 månader. Vill du att jag schemalägger den här rapporten att köras varje måndag morgon och skickas till #finance i Slack?

Du säger ja. Claude skapar ett schemalagt jobb (via ditt MCP-uppsatta scheduler-verktyg eller via en n8n-workflow som du redan har). Klart.

Det här är skillnaden mellan AI-bokföring nivå 2 och nivå 3. Se definitionen i AI-bokföring 2026. Du har gått från att producera bokföring till att läsa den som live-data.

Säkerhet och godkännandeflöden

Skrivverktygen i accounteds MCP-server returnerar en pending_operation med ett risk_level (low / medium / high). Ingenting skrivs till huvudboken förrän en människa godkänt, i chatten eller i accounted-webben, oavsett risknivå.

Exempel på risknivåer:

OperationRisknivå
Dra rapport / läsa datan/a (read-only)
Skapa kundlow
Kategorisera transaktionmedium
Skapa faktura (utkast)medium
Godkänna leverantörsfakturahigh
Bokföra lönekörninghigh
Stänga periodhigh
Köra year-endhigh

Det finns ingen inställning för automatiskt godkännande, inte ens för låg risk. Högrisk-operationer går dessutom inte att godkänna i klump, och godkännandet kräver en inskriven bekräftelse. Bokföringslagen kräver spårbarhet, och med godkännandesteget står det alltid en namngiven människa i spåret.

Hela flödet är spårat i en append-only audit-logg. Din revisor kan se exakt vilken agent som föreslog vad, vilken prompt som ledde dit (om du loggar det), och vem som godkände.

Steg för steg: koppla din ledger till Claude

Enklast är utan nyckel: under Inställningar → API och MCP i appen finns en knapp som öppnar Claudes dialog för custom connector med adressen ifylld. Du loggar in, godkänner och är ansluten (den vägen heter verktygen accounted_* i stället för gnubok_*, samma verktyg). Vill du hellre köra med API-nyckel och en lokal brygga:

  1. Skapa ett accounted-konto på app.accounted.se/register, med BankID eller e-post.
  2. Generera en API-nyckel under Inställningar → API och MCP. En gnubok_sk_test_*-nyckel läser ditt riktiga bolag men gör varje skrivning till en torrkörning, så den är säker medan du provar.
  3. Installera Claude Desktops MCP-konfig. Lägg till accounteds MCP-server i ~/Library/Application Support/Claude/claude_desktop_config.json:
{
  "mcpServers": {
    "gnubok": {
      "command": "npx",
      "args": ["gnubok-mcp"],
      "env": {
        "GNUBOK_API_KEY": "gnubok_sk_test_...",
        "GNUBOK_CLIENT": "claude-desktop"
      }
    }
  }
}
  1. Starta om Claude Desktop. Accounted-verktygen dyker upp i verktygsmenyn i chattfältet.
  2. Prata med din bokföring. Börja med "Visa kontoplanen" eller "Lista okategoriserade transaktioner". Bygg upp förtroendet i läs-läge innan du börjar låta agenten skriva.

I ChatGPT lägger du till samma server som connector i developer mode, i Grok som custom connector. Appen visar rätt adress för båda under Inställningar → API och MCP. Bygger du en egen klient mot huvudboken, se API-dokumentationen för REST- och MCP-ytan.

När det inte är en bra idé

För att vara tydlig: det är inte en bra idé att ge en LLM agentisk tillgång till din bokföring om:

  • Du inte regelbundet granskar audit-loggen.
  • Du ger en och samma nyckel rätt att både föreslå och godkänna för att "spara tid". Accounted varnar och kräver en uttrycklig bekräftelse, men det är fortfarande du som bockar i.
  • Du kör mot ett system som inte har deterministiska regler under (då litar du på LLM:en att inte fela, vilket är en sämre strategi än att låta huvudboken validera).

Det är därför arkitekturen i Bokföring i AI-eran är poängen. Agentisk bokföring funkar bara om grunden är byggd för det.

Klar att testa? Accounted är gratis att börja, AGPL på GitHub, och MCP-servern fungerar direkt mot din huvudbok.

Vanliga frågor

Behöver jag programmera för att koppla Claude till min ledger?
Nej. Du lägger till accounted som connector i Claude, ChatGPT eller Grok: en adress och en inloggning, ingen kod. Sen kan du skriva i naturligt språk: 'Stäng april' eller 'Visa runway baserat på de senaste 90 dagarna' och AI:n kallar rätt verktyg.
Kan AI:n bokföra utan att jag godkänner?
Nej. Varje skrivning från en agent stagas som pending_operation och bokförs först när en människa godkänt, i chatten eller i accounted-webben under /pending. Det gäller oavsett risknivå: automatiskt godkännande togs bort i maj 2026. Läsningar, som att dra rapporter, svarar direkt utan godkännande.
Vad är skillnaden mellan ChatGPT och Claude för det här?
Båda ansluter till samma MCP-server: Claude som connector i claude.ai och Claude Desktop (eller i Claude Code), ChatGPT i developer mode. Grok går också, som custom connector. Claude är klienten vi testar mest mot. Den underliggande ledgern bryr sig inte om vilken LLM du kör, och samma godkännanderegler gäller för alla.
Vad händer om Claude gör fel?
Den deterministiska huvudboken validerar varje åtgärd innan något skrivs. Felar valideringen (t.ex. debet ≠ kredit, period stängd, konto finns inte) avvisas anropet med ett strukturerat fel. Inget felaktigt landar i bokföringen.
Kan jag köra med min egen LLM-nyckel?
Ja. Accounted är öppen källkod under AGPL-3.0 och kan självhostas med Docker och ett Supabase-projekt. AI-funktionerna kör då mot din egen nyckel hos Anthropic, Amazon Bedrock eller ett OpenAI-kompatibelt API, så du betalar bara för det du faktiskt använder.
Nästa steg

Klar att testa själv?

Open är gratis. Open source, ingen bindningstid. Importera SIE4 i tio minuter.