Hop til hovedindhold

MCP-server

Frihets MCP-server implementerer Model Context Protocol, så AI-assistenter kan interagere direkte med dit ERP. Opret fakturaer, registrer udgifter, forespørg kunder eller administrer tilbud — alt sammen fra dit IDE eller terminal, på naturligt sprog.

Nuværende version: 1.5.1 | 52 værktøjer | 11 ressourcer | 10 prompts | Struktureret output | Kompatibel med 30+ AI-agenter.

Du:      "Opret en faktura til TechStart SL, 40 timers konsulentarbejde til 75 EUR/time, forfaldsdato 1. marts"
Claude: Udført. Faktura INV-2026-089 oprettet. Total: 3.000,00 EUR + 21% moms = 3.630,00 EUR.

Hvad du kan forvente (og hvad ikke)

MCP-serveren er en stateless bro mellem din AI-assistent og Frihets REST API. Hvert værktøjskald oversættes til en HTTP-anmodning til API'en.

Hvad den GØR:

  • Komplet CRUD på fakturaer, udgifter, kunder, produkter, tilbud og webhooks
  • Søgning af fakturaer efter kundenavn
  • Adgang til referencedata (skattesatser, skattekalender, kategorier)
  • Guidede arbejdsgange (månedlig afslutning, skatteforberedelse, opfølgning på skyldnere)

Hvad den IKKE GØR:

  • OCR af dokumenter (det gør AI-assistenten inde i appen)
  • Generering af PDF'er (brug REST API'en direkte: GET /v1/invoices/:id/pdf)
  • Betalingsbehandling (betalinger håndteres via Stripe Connect i appen)

Krav

  • Frihet-konto med API-adgang (betalingsplaner)
  • API-nøgle genereret fra panelet

Sådan får du API-nøglen

  1. Log ind på app.frihet.io
  2. Gå til Indstillinger > Udviklere > API Keys
  3. Klik på Opret API-nøgle
  4. Kopier nøglen (starter med fri_) — den vises kun én gang

Installation

Universal (30+ agenter)

Den hurtigste måde at installere MCP-serveren og forretningskompetencen på:

npx skills add Frihet-io/frihet-mcp

Fungerer med Claude Code, Cursor, Copilot, Codex, Windsurf, Gemini CLI, Goose, Roo Code og 30+ andre agenter.

MCP Registry

Serveren er registreret som io.frihet/erp i det officielle MCP Registry. MCP-klienter der understøtter registret kan automatisk opdage og installere det via dets kanoniske navn.

Direkte npx

npx -y @frihet/mcp-server@latest

Du behøver ikke at installere noget globalt. npx downloader og kører automatisk den seneste version.

Manuel konfiguration

Der er to forbindelsestilstande: lokal (serveren kører på din maskine via npx) og fjern (direkte forbindelse til mcp.frihet.io, uden installation).

Lokal (stdio)

{
"mcpServers": {
"frihet": {
"command": "npx",
"args": ["-y", "@frihet/mcp-server@latest"],
"env": {
"FRIHET_API_KEY": "fri_din_noegle_her"
}
}
}
}

Fjern (streamable-http)

{
"mcpServers": {
"frihet": {
"type": "streamable-http",
"url": "https://mcp.frihet.io/mcp",
"headers": {
"Authorization": "Bearer fri_din_noegle_her"
}
}
}
}

Klientkonfiguration

JSON-strukturen er identisk på tværs af alle klienter. Kun placeringen af konfigurationsfilen ændrer sig.

KlientKonfigurationsfil
Claude Code~/.claude/mcp.json
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
Cursor.cursor/mcp.json eller ~/.cursor/mcp.json
Windsurf~/.windsurf/mcp.json
ClineKonfiguration af VS Code eller .cline/mcp.json
Codex CLI~/.codex/config.toml (MCP-sektion)
tip

Hvis du bruger Claude Code, kan du tilføje serveren med en enkelt kommando:

claude mcp add frihet -- npx -y @frihet/mcp-server@latest

Konfigurer derefter variablen FRIHET_API_KEY i den resulterende fil ~/.claude/mcp.json.

Miljøvariabler

VariabelPåkrævetStandardværdi
FRIHET_API_KEYJa--
FRIHET_API_URLNejhttps://api.frihet.io/v1
FRIHET_MCP_DEBUGNej0
  • FRIHET_API_URL er nyttig, hvis du peger på et staging-miljø eller en tilpasset instans. Det skal være https:// med et hostname under frihet.io.
  • FRIHET_MCP_DEBUG=1 aktiverer debug-niveau logs (nyttigt til diagnosticering af problemer).

OAuth-flow

MCP-serveren understøtter OAuth-autentificering ud over manuel API-nøgle. Når en MCP-klient starter OAuth-flow'et:

  1. Brugeren autentificerer via Firebase Auth (e-mail, Google, GitHub eller Microsoft)
  2. Klienten sender sessionstokenet til POST /api/oauth/api-key
  3. Serveren provisionerer en ny nøgle fri_xxx... mærket "MCP OAuth" med en udløbsdato på 365 dage
  4. Nøglen bruges automatisk til efterfølgende kald

Dette gør det muligt for brugere at forbinde MCP-serveren uden at kopiere nøgler manuelt.


Tilgængelige værktøjer (52)

Serveren eksponerer 52 værktøjer organiseret i 7 kategorier. Hvert værktøj inkluderer struktureret output (outputSchema + structuredContent), så assistenter kan parse svar pålideligt, samt sikkerheds- og indholdsannotationer. Tosproget (EN/ES).

Fakturaer (6 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_invoicesListe fakturaer med pagineringlimit, offset
get_invoiceHenter en faktura efter IDid
create_invoiceOpretter en faktura med detaljerede linjerclientName, items[] (description, quantity, unitPrice), status, dueDate, notes, taxRate
update_invoiceOpdaterer felter i en faktura (delvis)id, og ethvert felt der skal ændres
delete_invoiceSletter en faktura permanentid
search_invoicesSøger fakturaer efter kundenavnclientName, limit, offset

Mulige fakturastatusser: kladde, sendt, betalt, forfalden, annulleret

Udgifter (5 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_expensesListe udgifter med pagineringlimit, offset
get_expenseHenter en udgift efter IDid
create_expenseRegistrerer en ny udgiftdescription, amount, category, date, vendor, taxDeductible
update_expenseÆndrer en eksisterende udgift (delvis)id, og ethvert felt der skal ændres
delete_expenseSletter en udgift permanentid

Kunder (5 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_clientsListe alle kunderlimit, offset
get_clientHenter en kunde efter IDid
create_clientRegistrerer en ny kundename, email, phone, taxId, address (street, city, state, postalCode, country)
update_clientOpdaterer data for en kunde (delvis)id, og ethvert felt der skal ændres
delete_clientSletter en kunde permanentid

Produkter (5 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_productsListe produkter og serviceslimit, offset
get_productHenter et produkt efter IDid
create_productOpretter et produkt eller en servicename, unitPrice, description, taxRate
update_productÆndrer et eksisterende produkt (delvis)id, og ethvert felt der skal ændres
delete_productSletter et produkt permanentid

Tilbud (5 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_quotesListe tilbudlimit, offset
get_quoteHenter et tilbud efter IDid
create_quoteOpretter et tilbud til en kundeclientName, items[] (description, quantity, unitPrice), validUntil, notes, status
update_quoteÆndrer et tilbud (delvis)id, og ethvert felt der skal ændres
delete_quoteSletter et tilbud permanentid

Mulige tilbudsstatusser: kladde, sendt, accepteret, afvist, udløbet

Webhooks (5 værktøjer)

VærktøjBeskrivelseNøgleparametre
list_webhooksListe konfigurerede webhookslimit, offset
get_webhookHenter konfiguration af en webhookid
create_webhookRegistrerer et webhook-endpointurl, events[], active, secret
update_webhookÆndrer en eksisterende webhookid, og ethvert felt der skal ændres
delete_webhookSletter en webhook permanentid

Tilgængelige webhook-begivenheder: invoice.created, invoice.updated, invoice.deleted, invoice.paid, expense.created, expense.updated, expense.deleted, client.created, client.updated, client.deleted, product.created, product.updated, product.deleted, quote.accepted. Se Webhooks for payload-format og HMAC-verifikation.


Tilgængelige ressourcer (8)

MCP-ressourcer er referencedata, som assistenten kan forespørge uden at foretage API-kald. De er statiske og altid tilgængelige.

RessourceURIBeskrivelse
API-skemafrihet://api/schemaOversigt over endpoints, autentificering, rate limits og fejlkoder
Skattesatserfrihet://tax/ratesmoms (21/10/4%), IGIC (7/3/0%), IPSI, intra-EU, IRPF (15%/7%)
Skattekalenderfrihet://tax/calendarFristdatoer for kvartalsvis indberetning (Model 303, 130, 420, 390)
Udgiftskategorierfrihet://config/expense-categories8 kategorier med regler for fradrag og skattemæssig behandling
Fakturastatusserfrihet://config/invoice-statusesStatusflow (kladde, sendt, betalt, forfalden, annulleret) med triggere
Leverandørerfrihet://config/vendorsListe over registrerede leverandører med skatte- og kontaktoplysninger
Aktive integrationerfrihet://config/integrationsStatus for tilsluttede integrationer (Stripe, Shopify osv.)
Virksomhedskonfigurationfrihet://config/businessVirksomhedens skatteoplysninger, skattezone, valuta og præferencer

Tilgængelige prompts (7)

Prompts er guidede arbejdsgange, som assistenten udfører trin for trin. De påkaldes efter navn.

PromptBeskrivelseParametre
monthly-closeMånedlig afslutning: gennemgår ubetalte fakturaer, kategoriserer udgifter, verificerer skattemæssige forpligtelser, genererer resumemonth (valgfrit)
onboard-clientKlient onboarding: bestemmer skattesats baseret på placering, opretter registrering, genererer velkomsttilbudclientName, country, region
quarterly-tax-prepKvartalsvis skatteforberedelse: indsamler fakturaer, beregner moms/IGIC, genererer preview af Model 303/130quarter, fiscalZone
overdue-followupOpfølgning på skyldnere: identificerer forfaldne fakturaer, grupperer efter kunde, udarbejder rykkermeddelelser
expense-batchBatchbehandling af udgifter: kategoriserer, anvender skatter, verificerer fradragsberettigelse, opretter med bekræftelsefiscalZone
vendor-analysisLeverandøranalyse: grupperer udgifter efter leverandør, beregner totaler, identificerer tendenser og besparelsesmulighederperiod (valgfrit)
business-healthVirksomhedens sundhedsdiagnose: Nøgle-KPI'er, sammenligning med forrige måned, alarmer og handlingsorienterede anbefalingermonth (valgfrit)
tip

Du kan påkalde en prompt direkte: "Udfør den månedlige afslutning for februar" eller "Forbered skatterne for Q1".


Eksempler på brug

Disse er virkelige anmodninger på naturligt sprog, som assistenten oversætter til MCP-værktøjskald.

Opret en faktura

"Opret en faktura til Acme SL med 10 timers konsulentarbejde til 95 EUR/time, forfaldsdato 15. marts"

Assistenten kalder create_invoice med clientName: "Acme SL", en detaljelinje (10 x 95) og dueDate: "2026-03-15". Den beregner totalen automatisk.

Registrer en udgift

"Registrer en udgift på 59.99 EUR i Adobe Creative Cloud, kategori software, fradragsberettiget"

Kalder create_expense med description, amount: 59.99, category: "software" og taxDeductible: true.

Søg fakturaer fra en kunde

"Søg alle fakturaer fra TechStart SL"

Kalder search_invoices med clientName: "TechStart SL" og returnerer match med deres totaler og statusser.

Forespørg skyldnere

"Vis mig alle ubetalte fakturaer"

Kalder list_invoices og filtrerer efter status: "sent" eller "overdue", viser de forfaldne sorteret efter beløb.

Opret en kunde

"Ny kunde: Design Studio SL, NIF B87654321, email hola@designstudio.es, Madrid 28001"

Kalder create_client med navn, NIF, email og adresse.

Konfigurer automatisering

"Opret en webhook til at give besked til https://mi-app.com/hook, når en faktura betales"

Kalder create_webhook med url og events: ["invoice.paid"].

Opdater et produkt

"Øg prisen på konsulenttimen til 85 EUR"

Kalder update_product med produktets id og unitPrice: 85. Kun det angivne felt ændres.


Observabilitet

MCP-server v1.5.1 inkluderer struktureret logging og værktøjsmetrics.

Struktureret logging

Alle logs udstedes som JSON til stderr (MCP bruger stdout til protokollens meddelelser). Hver post inkluderer:

  • level: debug, info, warn, error
  • service: altid frihet-mcp
  • timestamp: ISO 8601
  • tool: værktøjets navn (når relevant)
  • operation: operationstype (tool_call, api_call, api_retry, startup, shutdown_metrics)
  • durationMs: udførelsestid i millisekunder
  • error: fejldetaljer (message, code, statusCode)

Aktiver debug-logs med FRIHET_MCP_DEBUG=1.

Værktøjsmetrics

Serveren registrerer kald til hvert værktøj i hukommelsen: antal påkaldelser, fejl og gennemsnitlig varighed. Ved servernedlukning (SIGINT/SIGTERM) udsendes en oversigt:

{
"level": "info",
"message": "Shutdown after 3600s — 42 calls, 1 errors",
"operation": "shutdown_metrics",
"metadata": {
"tools": {
"list_invoices": { "calls": 15, "errors": 0, "avgMs": 230 },
"create_invoice": { "calls": 8, "errors": 1, "avgMs": 450 }
},
"uptime": 3600
}
}

Automatisk rate-limit retry

Når API'en svarer med 429, genforsøger serveren automatisk med eksponentiel backoff (op til 3 genforsøg). Genforsøgene logges:

{
"level": "warn",
"message": "Rate limited, retrying GET /invoices (attempt 2, delay 2000ms)",
"operation": "api_retry"
}

Du behøver ikke at håndtere rate limiting manuelt — serveren gør det for dig.


Transport

Frihets MCP-server understøtter to transporttilstande. Begge eksponerer de samme 52 værktøjer, 11 ressourcer og 10 prompts.

Lokal (stdio)

Serveren kører som en lokal proces på din maskine. Kommunikation mellem MCP-klienten og serveren bruger standard input/output (stdin/stdout).

  • Kræver: Node.js installeret (downloades automatisk via npx)
  • Fordel: Lavere latenstid, fungerer uden internetforbindelse (undtagen for API-kald)
  • Anvendelsesscenarie: Daglig udvikling, intensiv brug, virksomhedsmiljøer med netværksbegrænsninger

Fjern (streamable-http)

Serveren kører på Cloudflare Workers. Din MCP-klient forbinder direkte til https://mcp.frihet.io/mcp via HTTP.

  • Kræver: Kun internetforbindelse
  • Fordel: Ingen lokal installation, ingen afhængigheder, fungerer på enhver enhed
  • Anvendelsesscenarie: Hurtig opsætning, teams der foretrækker ikke at installere pakker, klienter der kun understøtter HTTP-transport
info

Hvis din MCP-klient ikke understøtter streamable-http (nogle ældre klienter understøtter kun stdio), brug den lokale tilstand.


Fejlhåndtering

Rate limiting

API'en tillader 100 anmodninger pr. minut pr. nøgle. Hvis grænsen overskrides, returnerer serveren en 429-fejl med ventetiden i retryAfter.

MCP-serveren håndterer automatisk rate limiting med eksponentiel backoff: genforsøger anmodningen efter at have ventet den angivne tid, uden brugerindgriben. Maksimalt 3 genforsøg.

Autentificeringsfejl

KodeÅrsagLøsning
401API-nøgle ugyldig, udløbet eller ikke angivetVerificer at nøglen i din konfiguration starter med fri_ og ikke er udløbet
403Nøglen har ikke tilladelse til denne ressourceGenerer en ny nøgle med de nødvendige tilladelser

Andre fejl

KodeBeskrivelse
400Forkerte parametre eller manglende påkrævede felter
404Den anmodede ressource findes ikke
408Timeout for anmodning (30 sekunder)
413Anmodningskroppen overskrider 1 MB
422Gyldige, men ubehandlingsdygtige data (f.eks. skatteprofil ikke konfigureret)
429Grænse for anmodninger overskredet (forsøges automatisk igen)
500Intern serverfejl

Alle fejl returnerer en beskrivende tosproget (EN/ES) meddelelse, så assistenten kan kommunikere problemet klart til brugeren.


Grænser

KonceptVærdi
Anmodninger pr. minut100 pr. API-nøgle
Resultater pr. side100 maks. (50 som standard)
Anmodningskrop1 MB maks.
Webhook-payload100 KB maks.
Webhooks pr. konto20 maks.
Anmodningstimeout30 sekunder
Genforsøg pr. rate limit3 maks.

Forskel fra REST API'en

MCP-serverREST API
Rettet modAI-assistenter (Claude, Cursor, Windsurf)Applikationer, scripts, integrationer
KommunikationNaturligt sprog via MCP-klientenDirekte HTTP/JSON
AutentificeringMiljøvariabel i klientkonfigurationen (eller OAuth)Header X-API-Key eller Authorization: Bearer
FormatFormateret tekst + struktureret output til assistentenRå JSON
Rate limitingHåndteres automatisk (eksponentiel backoff, 3 genforsøg)Manuel (forbrugeren skal implementere genforsøg)
ObservabilitetStruktureret logging + metrics pr. værktøjAnmodningslogs via X-Request-Id
AnvendelsesscenarieTal med dit ERP fra IDE'enByg programmatiske integrationer

Internt oversætter MCP-serveren hvert værktøjskald til en anmodning til REST API'en. Den duplikerer ikke logik — det er en stateless bro.


Udvikling

For at bidrage eller køre serveren i udviklingstilstand:

git clone https://github.com/Frihet-io/frihet-mcp.git
cd frihet-mcp
npm install
npm run build

Kør lokalt:

FRIHET_API_KEY=fri_din_noegle node dist/index.js

Kør med debug-logs:

FRIHET_MCP_DEBUG=1 FRIHET_API_KEY=fri_din_noegle node dist/index.js

Test med MCP Inspector:

npx @modelcontextprotocol/inspector node dist/index.js

Relaterede ressourcer


Forrige: Webhooks | Næste: Skill til Claude Code