gnubok
← Blogg

MCP-server för bokföring: vad det är och varför det är skillnaden

MCP är protokollet som låter en LLM-agent kalla bokföringen som strukturerade verktyg, inte gissa via UI-skrapning. gnoboks MCP-server exponerar ~70 verktyg från categorize_transaction till close_period, med riskklassade pending_operations som kräver mänsklig godkännande. Read-only först, agentiskt sedan.

För utvecklare12 maj 20265 min läsning

TL;DRMCP är protokollet som låter en LLM-agent kalla bokföringen som strukturerade verktyg, inte gissa via UI-skrapning. gnoboks MCP-server exponerar ~70 verktyg från categorize_transaction till close_period, med riskklassade pending_operations som kräver mänsklig godkännande. Read-only först, agentiskt sedan.

Om du bara läser en sak om gnoboks tekniska arkitektur, läs detta. MCP är inte ett buzzword. Det är skillnaden mellan att "en LLM vet om din bokföring" och att "en LLM faktiskt kan köra den".

Vad MCP är

Model Context Protocol är ett öppet protokoll från Anthropic, släppt 2024. Det låter en LLM-klient (Claude Desktop, Cursor, valfri MCP-kompatibel agent) kalla externa verktyg och läsa externa resurser på ett strukturerat sätt.

Tre delar:

  • Tools: funktioner agenten kan kalla. Har namn, beskrivning, argument-schema, return-schema.
  • Resources: data agenten kan läsa. URI:er som returnerar strukturerad data.
  • Prompts: fördefinierade prompt-mallar som klienter kan visa upp som "actions".

För bokföring är tools det mest intressanta. Det är där agenten faktiskt utför arbete.

Varför MCP är skillnaden, inte REST

Du kan kalla gnoboks REST-API från en LLM med någon form av omslag. Det funkar. Men det är fel verktyg för jobbet.

AspektRESTMCP
Avsedd förKod du skriverLLM-agenter
VerktygsupptäcktDu läser dokumentationAgenten läser schema i runtime
FelmeddelandenHTTP-status + JSON-errorStrukturerade error-types LLM:en förstår
VerktygsvalDu bestämmer i kodenAgenten väljer själv vilka verktyg som passar
LångkörningarDu implementerar pollingInbyggt stöd för progress + streaming

Det viktiga är raden om "verktygsidentifiering". En LLM-agent som har MCP-kopplingen till gnubok kan se exakt vilka verktyg som finns, vad de gör, och vilka argument de tar, på samma sätt som du läser API-dokumentation, fast i realtid. Du behöver inte berätta för agenten vilka verktyg som finns; den ser dem.

Det betyder att en agent kan svara på "Hitta varför min moms-deklaration ser konstig ut" utan att du behöver bygga en anpassad workflow. Den letar fram rätt verktyg själv.

Vad gnubok exponerar via MCP

gnoboks MCP-server exponerar ungefär 70 verktyg. De är grupperade efter domän:

Transaktioner & kategorisering

  • gnubok_list_uncategorized_transactions
  • gnubok_suggest_categories
  • gnubok_categorize_transaction
  • gnubok_match_transaction_to_invoice

Fakturering & kundreskontra

  • gnubok_create_invoice
  • gnubok_send_invoice
  • gnubok_mark_invoice_as_paid
  • gnubok_credit_invoice
  • gnubok_get_ar_ledger

Leverantörsfakturor

  • gnubok_create_supplier_invoice_from_inbox
  • gnubok_approve_supplier_invoice
  • gnubok_credit_supplier_invoice

Moms & rapportering

  • gnubok_get_vat_report
  • gnubok_vat_review_widget
  • gnubok_get_trial_balance
  • gnubok_get_income_statement
  • gnubok_get_balance_sheet
  • gnubok_get_kpi_report

Period & year-end

  • gnubok_close_period
  • gnubok_lock_period
  • gnubok_run_year_end
  • gnubok_set_opening_balances
  • gnubok_year_end_readiness

Lön

  • gnubok_create_salary_run
  • gnubok_calculate_salary_run
  • gnubok_generate_agi

Audit & utility

  • gnubok_audit_package
  • gnubok_export_sie
  • gnubok_import_sie
  • gnubok_explain_voucher_gap

Hela listan är upptäckbar via gnubok_list_skills när du är ansluten. Skills är fördefinierade workflows (månadsstängning, VAT-review, årsbokslut) som är dokumenterade som laddbara resurser. Agenten kan kalla gnubok_load_skill för att hämta steg-för-steg-instruktioner för en specifik uppgift.

Säkerhetsmodellen: pending_operations

Här är det viktiga. Varje skrivoperation returnerar inte ett "OK, jag bokade det". Den returnerar en pending_operation:

{
  "operation_id": "po_2026_04829",
  "type": "categorize_transaction",
  "risk_level": "low",
  "preview": {
    "transaction_id": "t_2026_19182",
    "proposed_account": "6212",
    "proposed_vat": "25%"
  },
  "requires_approval": true,
  "approval_url": "https://app.gnubok.se/approvals/po_2026_04829"
}

Inget skrivs till huvudboken förrän en människa godkänner i gnubok-webben. Det här är inte kosmetisk säkerhet. Det är hur Bokföringslagen kräver att en bokförd verifikation har en spårbar mänsklig godkännare. Audit-loggen lagrar exakt vilken agent-session som föreslog operationen och vem (med BankID) som godkände den.

Risknivåer:

  • low: kategorisering, rapporter, läsoperationer. Kan auto-godkännas om du tillåter det i inställningar.
  • medium: fakturering, leverantörsfakturor under 5 kkr. Manuellt godkännande default.
  • high: lönekörning, periodstängning, årsbokslut. Manuellt godkännande alltid, oavsett inställningar.

dry_run: true i argumenten förhandsvisar utan att köa något. idempotency_key gör operationen säkert återupprepningsbar: samma key returnerar samma operation utan att skapa en ny.

Read-only läge är där du börjar

Innan du släpper en agent på dina pending operations: börja read-only. Det är det enskilt viktigaste rådet vi har om MCP-adoption.

Konfigurera en API-token med read_only: true. Anslut Claude eller Cursor. Ställ frågor:

  • "Visa kontoplanen."
  • "Vilka leverantörer är aktiva?"
  • "Hur ser min trial balance ut för april?"
  • "Visa de senaste 20 transaktionerna utan dokument."

Bygg upp förtroendet för en månad. Lär dig hur agenten resonerar, var den missar, och vilka verktyg den föredrar. Då har du en mental modell innan du tillåter skrivoperationer.

Konfiguration

Claude Desktop: lägg till i ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "gnubok": {
      "command": "npx",
      "args": ["-y", "@gnubok/mcp-server"],
      "env": {
        "GNUBOK_API_TOKEN": "din-token-här"
      }
    }
  }
}

Cursor: lägg till samma config i .cursor/mcp.json i projektet.

Starta om klienten. Verktygsikonen visar "gnubok · connected". Skriv "Vad kan du göra?" så listar agenten verktygen.

API-token genereras under Inställningar → API-nycklar i app.gnubok.se. För self-hostad gnubok pekar du miljövariabeln mot din egen instans.

Vad detta möjliggör

Tre konkreta arbetsflöden som blev möjliga med MCP. Se ChatGPT, Claude och din ledger för fördjupning:

  1. "Stäng månaden" som ett enda kommando: agenten gör alla 8–12 stegen.
  2. Diagnos av månader som ser konstiga ut. "Varför är moms-summan högre än förra månaden?" Agenten kör fem rapporter och svarar med kausal analys.
  3. Avstämning på undantag. Agenten matchar 95 % automatiskt, du tittar bara på de 5 % som inte stämmer.

Inget av det är möjligt om bokföringen är ett UI med ett API på sidan av. Det är möjligt eftersom gnubok är ett API från första raden kod, med MCP som strukturerat agent-gränssnitt ovanpå.

Det är vad Bokföring i AI-eran menar med "deterministisk huvudbok som infrastruktur".

Vad som kommer

MCP är ett ungt protokoll, specen ändras snabbt. Två områden där gnoboks MCP-stöd kommer utvecklas under 2026:

  • Långkörningar med streaming. För operationer som årsbokslut där agenten kan visa progress över minuter, inte sekunder.
  • Resources för historisk data. Exponera hela huvudboken som strukturerade resurser så agenten kan läsa selektivt utan att du behöver veta vilket verktyg som returnerar vad.

Open source-natur betyder att du kan bygga ovanpå utan att vänta på oss. Repot ligger på GitHub. PR välkomna.

Vanliga frågor

Vad är MCP i en mening?
Model Context Protocol är ett öppet standardprotokoll från Anthropic som låter LLM-klienter (Claude Desktop, Cursor, OpenAI:s tool-protokoll) kalla externa verktyg och läsa resurser på ett strukturerat sätt. Det är ungefär som ett REST-API designat för agenter.
Varför inte bara använda REST?
REST funkar utmärkt för kod du skriver själv. För en LLM-agent är MCP bättre eftersom verktygen är självdokumenterande. Agenten ser vilka argument som finns, vilka som är obligatoriska, och vad som returneras utan att du behöver skriva en wrapper. Det är skillnaden mellan att 'gissa via dokumentation' och att 'läsa schema direkt'.
Är MCP säkrare än REST?
Inte i sig. Säkerheten ligger på gnoboks sida. Varje skrivoperation returneras som en pending_operation med risk_level (low/medium/high) och köas för mänskligt godkännande innan något skrivs till huvudboken. Det gäller oavsett om anropet kommer via MCP eller REST.
Kan jag bygga en egen MCP-server mot gnubok?
Ja. gnubok är AGPL. Du kan självhosta och exponera dina egna MCP-verktyg. För de flesta är det enklare att använda den officiella @gnubok/mcp-server som täcker ~70 verktyg redan.
Vilka LLM-klienter stödjer MCP?
Claude Desktop (officiellt stöd från Anthropic), Cursor, Continue, och alla MCP-kompatibla klienter. OpenAI har sitt eget tool-protokoll med liknande funktion. gnubok stödjer alla via MCP och har egen REST för icke-MCP-klienter.
Nästa steg

Klar att testa själv?

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