Fortnox MCP: koppla Claude och ChatGPT till bokföringen via Fortnox API
fortnox-mcp är en öppen MCP-server för Fortnox, byggd av Walma. Den läser fakturor, leverantörsfakturor, verifikat och konton via Fortnox API, tar fram resultaträkning, balansräkning och reskontra ur SIE, och skapar bara utkast. Så skapar ni en Fortnox-integration och kopplar den till Claude, ChatGPT eller Cursor.
Fortnox är där de flesta svenska småföretag har sin bokföring, och det är också där de flesta frågor till ekonomiteamet slutar: vilka fakturor är förfallna, hur ser kvartalet ut, vad ska betalas nästa vecka. fortnox-mcp låter Claude, ChatGPT, Cursor eller vilken MCP-klient som helst läsa Fortnox och svara på de frågorna direkt ur bokföringen.
Vi byggde den för att Fortnox inte har någon egen MCP-server, och för att vi redan hade löst de svåra delarna i vår egen Fortnox-integration. Koden är öppen på github.com/Walma-Labs/fortnox-mcp under MIT-licens. Den är inte knuten till Fortnox AB.
Är MCP nytt för er, börja med Vad är MCP?.
Vad den kan läsa
| Område | Verktyg |
|---|---|
| Bolaget | get_company_info (bolagsuppgifter, räkenskapsår, låst period), list_financial_years |
| Kundfakturor | list_invoices, get_invoice, list_invoice_payments |
| Leverantörsfakturor | list_supplier_invoices (även de som väntar på attest), get_supplier_invoice |
| Register | kunder, leverantörer, artiklar, order, offerter, projekt, kostnadsställen |
| Bokföring | list_accounts (med in- och utgående saldo), list_vouchers, get_voucher |
| Rapporter | income_statement, balance_sheet, account_totals_by_month, receivables_aging, payables_aging |
| Allt annat | list_endpoints och fortnox_get: alla övriga läsande endpoints i Fortnox API |
Listorna returnerar korta rader i stället för Fortnox fullständiga objekt med 80 fält, så att modellen kan läsa hundratals fakturor utan att fylla kontextfönstret. Detaljvyn (get_invoice och liknande) ger hela objektet, med rader, nettobelopp och moms.
Rapporterna som Fortnox API saknar
Fortnox API har inga endpoints för resultaträkning eller balansräkning. Att bygga dem ur verifikaten kräver ett anrop per verifikat, och med Fortnox gräns på 25 anrop per 5 sekunder blir ett år med tusen verifikat flera minuters väntan.
SIE 4-exporten innehåller samma data i ett enda anrop. fortnox-mcp hämtar den en gång per räkenskapsår och räknar fram:
- Resultaträkning för valfri period, grupperad efter BAS-kontoplanen: rörelsens intäkter, varor, övriga externa kostnader, personal, avskrivningar, finansiella poster och skatt, med varje konto för sig.
- Balansräkning på ett datum, inklusive årets resultat som ännu inte förts till eget kapital, så att den går jämnt ut.
- Summor per månad för valfria konton, till exempel 3000–3999 för intäkter per månad eller 1930 för företagskontot.
- Kund- och leverantörsreskontra efter förfallodag: ej förfallet, 1–30, 31–60, 61–90 och över 90 dagar, per motpart, med de mest försenade fakturorna först.
Eftersom underlaget är själva bokföringen stämmer siffrorna med Fortnox egna rapporter, även när någon har bokfört manuellt.
Resten av API:t
Fortnox API har drygt 140 läsande endpoints utöver de vanligaste: anläggningsregister, avtal, anställda, lön, tid, prislistor, valutor, lager. I stället för ett verktyg per endpoint finns fortnox_get, som når dem alla men bara via en lista över tillåtna sökvägar. Listan är genererad ur Fortnox publicerade OpenAPI-dokument. Endpoints som skickar något (e-post, e-faktura, utskrift) eller lämnar ut filer finns inte med, så de går inte att anropa ens om modellen försöker.
Vad den inte gör
Servern är läsande som standard. Skrivverktygen registreras inte ens förrän ni sätter FORTNOX_ENABLE_WRITES=true, och då kan de bara skapa utkast:
create_customercreate_offerochcreate_ordercreate_invoice_draft: en faktura som varken är bokförd eller skickad
Varje skrivning returnerar först exakt det som skulle skickas till Fortnox. Modellen är instruerad att visa det och vänta på ett ja innan den anropar igen med confirm: true. Att bokföra, betala, skicka eller radera finns inte i servern alls. Det görs i Fortnox, av en människa.
Det är samma regel som vi förespråkar i AI för bokföring och redovisning: läsande som standard, godkännande per skrivning.
Kom igång
1. Skapa en app i Fortnox Developer Portal
- Registrera er som integrationsutvecklare på apps.fortnox.se/integration-developer. Ni får ett testbolag att prova mot.
- Skapa en app och sätt redirect URI till
http://localhost:8765/callback. Den måste stå exakt likadant i portalen och i servern. - Välj behörigheter. Standarduppsättningen är
companyinformation bookkeeping invoice customer supplierinvoice supplier article payment settings. Varje behörighet kräver att den som godkänner har licensen för den, och saknas en enda faller hela inloggningen. Be bara om det ni använder. - Spara client ID och client secret.
2. Koppla bolaget
git clone https://github.com/Walma-Labs/fortnox-mcp.git
cd fortnox-mcp && npm install
FORTNOX_CLIENT_ID=… FORTNOX_CLIENT_SECRET=… node dist/cli.js login
Öppna adressen som skrivs ut, logga in i Fortnox och godkänn. Inloggningen sparas i ~/.config/fortnox-mcp/tokens.json, som bara ägaren kan läsa. node dist/cli.js status visar vilket bolag som är kopplat.
Vill ni att kopplingen ska leva oberoende av en enskild person, sätt FORTNOX_ACCOUNT_TYPE=service och slå på servicekonto för appen i portalen. Då måste den som godkänner vara systemadministratör hos bolaget.
3. Lägg till servern i er AI-klient
Claude Code:
claude mcp add fortnox \
-e FORTNOX_CLIENT_ID=… -e FORTNOX_CLIENT_SECRET=… \
-- node /sökväg/till/fortnox-mcp/dist/cli.js
Claude Desktop och Cursor (claude_desktop_config.json respektive .cursor/mcp.json):
{
"mcpServers": {
"fortnox": {
"command": "node",
"args": ["/sökväg/till/fortnox-mcp/dist/cli.js"],
"env": {
"FORTNOX_CLIENT_ID": "…",
"FORTNOX_CLIENT_SECRET": "…"
}
}
}
}
Fler klienter beskrivs i lägg till en MCP-server i Claude Code och i Claude Desktop.
4. Fråga
- Vilka kundfakturor är förfallna, och hos vilka kunder ligger mest?
- Visa resultaträkningen för tredje kvartalet jämfört med andra.
- Vad har vi lagt på övriga externa kostnader per månad i år, och vilka konton har ökat mest?
- Hur mycket finns på företagskontot, och vad ska betalas till leverantörer de närmaste två veckorna?
- Vilka leverantörsfakturor väntar på attest?
Fortnox API: det som är bra att veta
De här detaljerna har kostat oss tid i vår egen integration, och servern hanterar dem redan:
- Refresh token byts ut vid varje förnyelse. Den gamla slutar fungera direkt. En förnyelse som lyckas men inte hinner sparas lämnar kopplingen bruten tills någon loggar in igen. fortnox-mcp sparar den nya innan den används, och samtidiga anrop delar på en och samma förnyelse.
- Kedjan dör efter 45 dagar utan användning. Används servern minst en gång i månaden behöver ni aldrig logga in igen.
- 25 anrop per 5 sekunder per access token. Servern lägger anropen med jämna mellanrum under gränsen i stället för att studsa mot 429-svar.
- Fakturalistan visar belopp inklusive moms. Nettot finns bara på detaljvyn. Rapportverktygen använder bokföringen och har därför inte det problemet.
- SIE-filen är kodad i CP437, inte UTF-8. Läses den fel blir "Löner" till "L÷ner" utan att något felmeddelande syns.
- Varje behörighet är en licens. En inloggning som ber om mer än användaren har licens för misslyckas helt, inte bara för den behörigheten.
Andra sätt att koppla AI till Fortnox
fortnox-mcp körs lokalt eller i er egen miljö och kräver att ni skapar en app i Developer Portal. Det passar när ni har någon som kan sätta upp den, eller när bokföringsdata inte ska passera ännu en tredje part.
Vill ni hellre ha en färdig tjänst finns MCP-appar i Fortnox integrationsbutik som ni köper per månad och kopplar med några klick. Det finns också andra öppna community-servrar på GitHub. Jämför vilka behörigheter de ber om och om de kan skriva i bokföringen utan ett godkännandesteg.
Bokföringsdata och var den hamnar
En MCP-server skickar det den läser till den AI-klient ni använder, och därifrån till klientens modellleverantör. För bokföring, där kundnamn, löner och marginaler finns i varje svar, är det en fråga för både dataskyddet och revisorn. Vi går igenom hotbilden i MCP-säkerhet.
Walma AI Hub kör Claude, GPT och andra modeller i er egen EU-region och har servrar som fortnox-mcp bakom en gateway med behörighet per användare och en fullständig logg. Ekonomiteamet får Fortnox i Claude utan att någon behöver installera något. Se hur AI för ekonomi fungerar.
Vanliga frågor
Finns det en officiell Fortnox MCP-server?+
Nej. Fortnox publicerar ingen egen MCP-server. Det som finns är kommersiella MCP-appar i Fortnox integrationsbutik, öppna community-servrar och fortnox-mcp, som Walma har byggt och släppt som öppen källkod under MIT-licens på github.com/Walma-Labs/fortnox-mcp. Den är inte godkänd av eller knuten till Fortnox AB.
Vad behöver jag för att använda Fortnox API?+
Ett utvecklarkonto i Fortnox Developer Portal, där ni skapar en app och får ett client ID och en client secret. Fortnox använder OAuth 2.0: en användare hos bolaget godkänner appen och de behörigheter (scopes) den ber om, och varje scope kräver att användaren har motsvarande licens. Kundbolaget behöver normalt licensen Fortnox Integration för att koppla in integrationer via API:et.
Kan AI:n bokföra eller skicka fakturor i Fortnox?+
Inte med fortnox-mcp. Servern är läsande som standard, och skrivverktygen finns bara om ni slår på dem med FORTNOX_ENABLE_WRITES=true. Även då skapar de bara utkast: kunder, offerter, order och fakturor som varken är bokförda eller skickade. Varje skrivning visar först exakt vad som skulle skickas och kräver ett uttryckligt godkännande. Bokföring, betalningar, utskick och radering görs i Fortnox, av en människa.
Kan jag få resultaträkning och balansräkning via Fortnox API?+
Inte direkt: Fortnox API har ingen endpoint för resultat- eller balansräkning. fortnox-mcp räknar fram dem ur SIE 4-exporten, som innehåller hela räkenskapsårets verifikat i ett enda anrop. Därför stämmer siffrorna med bokföringen, inklusive manuella verifikat, för vilken period som helst.
Vad är rate limit för Fortnox API?+
25 anrop per 5 sekunder per access token, alltså 300 i minuten. fortnox-mcp lägger anropen med jämna mellanrum under den gränsen och försöker igen vid 429, men aldrig på en POST som fått ett serverfel, eftersom dokumentet då redan kan ha skapats.
Hur länge gäller en Fortnox-inloggning?+
Access token gäller en timme. Refresh token byts ut vid varje förnyelse, och den gamla slutar fungera direkt; en kedja som inte används på 45 dagar dör. fortnox-mcp sparar den nya refresh token innan den används, så en server som används minst en gång i månaden behöver aldrig loggas in igen.
Samma verktyg, i er EU-region, under er kontroll
En genomgång på 20 minuter med en ingenjör. Vi mappar det mot era verktyg, MCP:er och er budgetmodell.