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. accounteds MCP-server exponerar 130+ verktyg från categorize_transaction till close_period, med riskklassade pending_operations som kräver mänskligt godkännande. Read-only först, agentiskt sedan.
TL;DRMCP är protokollet som låter en LLM-agent kalla bokföringen som strukturerade verktyg, inte gissa via UI-skrapning. accounteds MCP-server exponerar 130+ verktyg från categorize_transaction till close_period, med riskklassade pending_operations som kräver mänskligt godkännande. Read-only först, agentiskt sedan.
Om du bara läser en sak om accounteds 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 och sedan december 2025 förvaltat av Agentic AI Foundation under Linux Foundation. Det låter en LLM-klient (Claude, ChatGPT, 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 accounteds REST-API från en LLM med någon form av omslag. Det funkar. Men det är fel verktyg för jobbet.
| Aspekt | REST | MCP |
|---|---|---|
| Avsedd för | Kod du skriver | LLM-agenter |
| Verktygsupptäckt | Du läser dokumentation | Agenten läser schema i runtime |
| Felmeddelanden | HTTP-status + JSON-error | Strukturerade error-types LLM:en förstår |
| Verktygsval | Du bestämmer i koden | Agenten väljer själv vilka verktyg som passar |
| Långkörningar | Du implementerar polling | Inbyggt stöd för progress + streaming |
Det viktiga är raden om "verktygsupptäckt". En LLM-agent som har MCP-kopplingen till accounted 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 accounted exponerar via MCP
accounteds MCP-server listar drygt 130 verktyg i standardkatalogen, och fler specialverktyg ligger ett sökanrop bort. De är grupperade efter domän:
Transaktioner & kategorisering
gnubok_list_uncategorized_transactionsgnubok_suggest_categoriesgnubok_categorize_transactiongnubok_match_transaction_to_invoice
Fakturering & kundreskontra
gnubok_create_invoicegnubok_send_invoicegnubok_mark_invoice_as_paidgnubok_credit_invoicegnubok_get_ar_ledger
Leverantörsfakturor
gnubok_create_supplier_invoice_from_inboxgnubok_approve_supplier_invoicegnubok_credit_supplier_invoice
Moms & rapportering
gnubok_get_vat_reportgnubok_vat_review_widgetgnubok_get_trial_balancegnubok_get_income_statementgnubok_get_balance_sheetgnubok_get_kpi_report
Period & year-end
gnubok_close_periodgnubok_lock_periodgnubok_run_year_endgnubok_set_opening_balancesgnubok_year_end_readiness
Lön
gnubok_create_salary_rungnubok_calculate_salary_rungnubok_generate_agi
Audit & utility
gnubok_audit_packagegnubok_export_siegnubok_import_siegnubok_explain_voucher_gap
Standardkatalogen kommer med tools/list när klienten ansluter. Specialverktygen hittar agenten med gnubok_search_tools, som rankar alla verktyg på ett nyckelord. Skills är något annat: fördefinierade workflows (månadsstängning, momsgenomgång, årsbokslut) som listas med gnubok_list_skills. 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 mot bokföringen returnerar inte ett "OK, jag bokade det". Den returnerar en pending_operation:
{
"staged": true,
"operation_id": "3b1f0c7e-…",
"risk_level": "medium",
"actor": { "type": "api_key", "label": "Claude (Anthropic)" },
"message": "Staged as pending_operation 3b1f0c7e-… (risk: medium). …",
"approve": {
"tool": "gnubok_approve_pending_operation",
"args": { "operation_id": "3b1f0c7e-…" }
},
"preview": {
"debit_account": "6212",
"credit_account": "1930",
"amount": 499,
"date": "2026-04-14"
}
}
Inget skrivs till huvudboken förrän en människa godkänner, antingen i chatten eller på /pending i webben. Det här är inte kosmetisk säkerhet. Bokföringslagen kräver att det går att följa hur varje verifikation kommit till, och med godkännandesteget står det alltid en namngiven människa i det spåret. Audit-loggen lagrar exakt vilken agent-session som föreslog operationen och vem som godkände den.
Risknivåerna (low, medium, high) speglar vad som står på spel: att kategorisera en transaktion är inte samma sak som att låsa en period eller boka en lönekörning. Högrisk-operationer går inte att godkänna i klump och kräver en inskriven bekräftelse.
Och för att vara tydlig, eftersom frågan kommer varje gång: det finns ingen inställning som låter agenten bokföra själv. Auto-commit togs bort i maj 2026 och kolumnerna finns inte kvar i databasen. Det spelar ingen roll hur låg risknivån är eller hur mycket du litar på modellen: någon måste godkänna.
Samma tanke finns i behörighetslagret: en API-nyckel som både kan stage:a en skrivning och godkänna den avvisas när nyckeln skapas, om du inte uttryckligen bekräftar att du förstår risken med att släppa ansvarsfördelningen.
dry_run: true i argumenten förhandsvisar utan att köa något, på de skrivverktyg som har parametern. 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.
Skapa en API-nyckel med bara läs-scopes (transactions:read, reports:read, invoices:read, suppliers:read). Utan skriv-scopes kan agenten inte ens stage:a en bokning: skrivverktygen syns inte ens i verktygslistan. 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": ["gnubok-mcp"],
"env": {
"GNUBOK_API_KEY": "gnubok_sk_test_...",
"GNUBOK_CLIENT": "claude-desktop"
}
}
}
}
Cursor: lägg till samma config i .cursor/mcp.json i projektet.
Starta om klienten. Skriv "Vad kan du göra?" så listar agenten verktygen.
API-nyckeln skapas under /settings/api (Inställningar → API och MCP) i appen. En gnubok_sk_test_*-nyckel läser ditt riktiga bolag men gör varje skrivning till en torrkörning, det finns ingen separat sandbox. Byt till gnubok_sk_live_* när du kör skarpt. För self-hostad accounted pekar du GNUBOK_URL mot din egen instans. Nya installationer kan använda bryggan accounted-mcp (med ACCOUNTED_API_KEY) i stället; då heter verktygen accounted_*.
Kör du claude.ai eller Claude Desktop finns en enklare väg: lägg till en custom connector mot https://app.accounted.se/api/extensions/ext/mcp-server/mcp?auth=required och godkänn över OAuth 2.1 (utan auth=required föreslår Claudes dialog ingen inloggning alls). Då slipper du hantera nycklar. På samtyckesskärmen är alla behörigheter förvalda; vill du börja read-only fäller du ut listan och väljer Endast läs. ChatGPT (developer mode) och Grok (custom connector) ansluter till samma server.
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:
- "Stäng månaden" som ett enda kommando: agenten gör alla 8–12 stegen.
- 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.
- Avstämning på undantag. Agenten föreslår matchningarna som går igenom av sig själva, du tittar bara på de 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 accounted ä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. De två områden som stod här i maj har redan landat:
- Långkörningar. Servern stödjer MCP:s tasks-tillägg, så långa anrop får ett varaktigt handtag som agenten kan följa i stället för att vänta på ett enda svar.
- Resources. Ett tiotal
Accounted://-resurser (bland annat aktuellt bolag, aktiv period, kontoplan, huvudbokskontext och avstämningsläge) som agenten kan läsa utan att veta vilket verktyg som returnerar vad.
Nästa steg följer specen, i takt med att klienterna stödjer den.
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, skapat av Anthropic och sedan december 2025 förvaltat av Agentic AI Foundation under Linux Foundation, som låter LLM-klienter (Claude, ChatGPT, Cursor med flera) 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å accounteds sida. Varje skrivning via MCP 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. Via REST är det i stället två uttryckliga steg: ett anrop skapar ett utkast och ett separat commit-anrop bokför det, med en nyckel du gett skrivbehörighet.
- Kan jag bygga en egen MCP-server mot accounted?
- Ja. accounted är AGPL. Du kan självhosta och exponera dina egna MCP-verktyg. För de flesta är det enklare att använda den officiella MCP-servern, som redan täcker 130+ verktyg, direkt eller via stdio-bryggan gnubok-mcp.
- Vilka LLM-klienter stödjer MCP?
- Claude (claude.ai, Claude Desktop och Claude Code), ChatGPT i developer mode, Grok via custom connectors, Cursor, Continue, Codex och andra MCP-kompatibla klienter. Klienter som bara klarar stdio ansluter via bryggan gnubok-mcp. För kod som inte pratar MCP finns REST-API:et.
Senast uppdaterad: 27 september 2026