Forbind en AI-assistent (MCP)
MoneyLights har en indbygget MCP server, så en AI-assistent — Claude Desktop, Claude Code, en IDE-agent, hvad som helst der taler protokollen — kan arbejde med din organisations data på anmodning.
Det er den samme legitimationsoplysning som REST API’en: en MCP-forbindelse er en API-nøgle, med de samme scopes, de samme grænser og den samme tilbagekaldelsesknap. Der er ikke noget separat at administrere.
Forbindelse
Sektion kaldt “Forbindelse”Endpointet er https://api.moneylights.app/mcp (Streamable HTTP). En typisk
klientkonfiguration:
{ "mcpServers": { "moneylights": { "url": "https://api.moneylights.app/mcp", "headers": { "X-API-Key": "ml_sk_..." } } }}Med Claude Code er det én kommando:
claude mcp add --transport http moneylights https://api.moneylights.app/mcp \ --header "X-API-Key: ml_sk_..."Opret nøglen i Indstillinger → API-nøgler og giv den kun de scopes, som assistenten har brug for. Alt kræver nøglen, inklusive oplistning af værktøjerne.
Hvad assistenten kan gøre
Sektion kaldt “Hvad assistenten kan gøre”Værktøjslisten beregnes ud fra dine nøgles scopes, ved hver anmodning. En nøgle uden en scope får aldrig at vide, at det tilsvarende værktøj eksisterer.
| Værktøj | Scope | Hvad det gør |
|---|---|---|
get_cashflow_overview | cashflow:read | Månedlig indkomst/udgift/netto, åbningsbalance, topkategorier |
get_analytics_overview | analytics:read | Aggregater efter kategori, klient, projekt og person |
list_transactions | transactions:read | Transaktioner, filtreret og pagineret, hver med de dokumenter, der er knyttet til den |
list_documents | documents:read | Dokumenter og deres udtrukne felter, hver med de bevægelser, der er knyttet til den |
get_document_file | documents:read | Den originale fil af ét dokument — den PDF eller billede, appen viser |
get_pending_distribution | profitpulse:read | Ventende Safe-to-Spend distributioner |
list_vendors | vendors:read | Leverandører, med samlet forbrug |
list_clients | clients:read | Klienter, med samlet indtægt |
list_projects | projects:read | Projekter, med totaler og mål |
upload_document | documents:write | Filer en faktura eller kvittering ind i dine dokumenter |
Begge oversigter beregnes på samme grundlag og siger det: hver respons bærer en basis — periode,
valutaer, de dækede konti (hver synlig, medmindre der spørges om id), og hvordan overførsler mellem
organisationens egne konti blev behandlet. Som standard er de ekskluderet fra indkomst og udgifter,
ben for ben, præcis som appens Cashflow-visning viser dem; send includeInternalTransfers: true til
et af værktøjerne for den rå bankbevægelse, som basis så mærker som sådan og som ikke er
sammenlignelig med standarden. Sammenlign tal på tværs af de to værktøjer kun når deres basis matcher.
netCashResult er indkomst minus udgifter af bankbevægelser — et kontant resultat, ikke regnskabsoverskud.
Hvilket dokument hører til hvilken bevægelse
Sektion kaldt “Hvilket dokument hører til hvilken bevægelse”Begge lister siger det, fra begge sider, på den måde appen viser det. Hver transaktion bærer
linkedDocuments og hvert dokument bærer linkedTransactions; hver post navngiver den anden
side og et link:
confirmed— dokumentet er matchet til bevægelsen, hvilket tæller som dokumenteret.suggested— matcherens foreslår parringen; ingen har bekræftet det, og bevægelsen mangler stadig sit dokument. Posten bærer matcherensscore.
En assistent kan derfor ikke skelne ingen faktura fra en faktura, der venter på at blive bekræftet fra allerede arkiveret — og kan ikke ændre noget af det, fordi denne forbindelse ikke har noget værktøj til det.
En bevægelse kan bære flere bekræftede dokumenter. Et dokument linker til højst én bevægelse, så
en faktura betalt i flere dele viser kun den bevægelse, den blev matchet til. Et dokument der stadig
Processing har ingen links endnu; None betyder ingen.
Scopes gælder stadig: den fjerne side af et link beskrives (leverandør og nummer, eller beskrivelse og beløb) kun til en nøgle, der også kan læse den ressource. Med én scope får du den anden sides id, typen af linket og scoren — nok til at vide, at en bevægelse er dokumenteret, ikke hvad fakturaen siger.
Læse en original
Sektion kaldt “Læse en original”get_document_file tager et documentId fra list_documents og returnerer den gemte fil
selv — den samme PDF eller billede, appen åbner — som en indlejret ressource med sin MIME-type
(application/pdf, image/jpeg, …), ved siden af dokumentets id, filnavn og størrelse — filer op
til 10MB, den samme grænse som en upload. Det er
hvordan en assistent tjekker, om en forskel kommer fra fakturaen, fra hvad der blev udtrukket eller
fra bevægelsen, den blev matchet til, uden at eksportere noget. Det er en læsning: intet på
dokumentet, dets udtrukne felter eller dets links ændres. Et dokument, der ikke er dit, findes simpelthen
ikke.
Arkivere dokumenter
Sektion kaldt “Arkivere dokumenter”upload_document er det ene værktøj, der skriver, og det blev valgt til den
rolle med vilje: det tilføjer kun til. Assistenten sender filen
(PDF eller billede, op til 10MB) og MoneyLights kører det gennem den samme pipeline
som en upload i appen — gemt, dens felter udtrukket (leverandør, dato,
nummer, beløb) og automatisk matchet mod dine banktransaktioner.
At sende den samme fil to gange duplikerer aldrig dine data: gen-uploaden registreres som en markeret duplikat, der peger på den originale. Alt, hvad assistenten arkiverer, er synligt — og kan slettes — i appen.
Hver anden skrivning (oprette klienter, omklassificere transaktioner, konfigurere kuverter…) forbliver i appen med vilje: disse handlinger forudsætter en menneskelig bekræftelse.
Kuraterede prompts
Sektion kaldt “Kuraterede prompts”Serveren tilbyder også færdiglavede startpunkter — en månedlig cashflow gennemgang, en leverandørforbrugsanalyse, en oprydning af manglende dokumenter — opført kun når din nøgle kan køre hvert værktøj, de har brug for. Brug dem som de er eller rediger frit.
Sikkerhed
Sektion kaldt “Sikkerhed”- Assistenten er begrænset af nøglen, der tjekkes på ny ved hver anmodning. Nedgrader eller fjern nøglens skaber, og assistenten indsnævres eller stopper ved næste opkald.
- Finansielle data indeholder tekst skrevet af fremmede — betalingsreferencer, e-mailede dokumenter. Værktøjsresultater leveres inden for en markeret grænse, der fortæller modellen at behandle dem som data, aldrig som instruktioner. Behandl det som en afbødning, ikke en garanti, og scope nøgler stramt.
- For at afbryde en assistent, tilbagekald dens nøgle i Indstillinger → API-nøgler. Øjeblikkelig, altid tilgængelig.
Giv hver assistent sin egen nøgle — én pr. klient betyder, at du kan skære én uden at forstyrre resten.