Zum Inhalt springen

Verbinde einen KI-Assistenten (MCP)

MoneyLights hat einen integrierten MCP Server, sodass ein KI-Assistent — Claude Desktop, Claude Code, ein IDE-Agent, alles, was das Protokoll spricht — auf Anfrage mit den Daten deiner Organisation arbeiten kann.

Es ist der gleiche Zugang wie die REST API: Eine MCP-Verbindung ist ein API-Schlüssel, mit den gleichen Berechtigungen, den gleichen Limits und dem gleichen Widerruf-Button. Es gibt nichts Separates zu verwalten.

Der Endpunkt ist https://api.moneylights.app/mcp (Streamable HTTP). Eine typische Client-Konfiguration:

{
"mcpServers": {
"moneylights": {
"url": "https://api.moneylights.app/mcp",
"headers": { "X-API-Key": "ml_sk_..." }
}
}
}

Mit Claude Code ist es ein Befehl:

Terminal-Fenster
claude mcp add --transport http moneylights https://api.moneylights.app/mcp \
--header "X-API-Key: ml_sk_..."

Erstelle den Schlüssel in Einstellungen → API-Schlüssel und gewähre ihm nur die Berechtigungen, die der Assistent benötigt. Alles erfordert den Schlüssel, einschließlich der Auflistung der Werkzeuge.

Die Werkzeugliste wird aus den Berechtigungen deines Schlüssels bei jeder Anfrage berechnet. Ein Schlüssel ohne Berechtigung erfährt nicht einmal, dass das entsprechende Werkzeug existiert.

WerkzeugBerechtigungWas es tut
get_cashflow_overviewcashflow:readMonatliches Einkommen/Ausgaben/Netto, Eröffnungsbilanz, Top-Kategorien
get_analytics_overviewanalytics:readAggregationen nach Kategorie, Kunde, Projekt und Person
list_transactionstransactions:readTransaktionen, gefiltert und paginiert, jede mit den verknüpften Dokumenten
list_documentsdocuments:readDokumente und deren extrahierte Felder, jedes mit den verknüpften Bewegungen
get_document_filedocuments:readDie Originaldatei eines Dokuments — das PDF oder Bild, das die App anzeigt
get_pending_distributionprofitpulse:readAusstehende Sicher ausgebbare Verteilungen
list_vendorsvendors:readLieferanten, mit Gesamtausgaben
list_clientsclients:readKunden, mit Gesamteinnahmen
list_projectsprojects:readProjekte, mit Gesamtsummen und Zielen
upload_documentdocuments:writeLegt eine Rechnung oder Quittung in deinen Dokumenten ab

Beide Übersichten berechnen auf der gleichen Basis und geben dies an: jede Antwort trägt eine basis — Zeitraum, Währungen, die abgedeckten Konten (jedes sichtbare, es sei denn, es wird nach ID gefragt) und wie Überweisungen zwischen den eigenen Konten der Organisation behandelt wurden. Standardmäßig sind sie ausgeschlossen von Einnahmen und Ausgaben, Bewegung für Bewegung, genau wie die Cashflow-Ansicht der App sie zeigt; übergib includeInternalTransfers: true an eines der Werkzeuge für die rohen Bankbewegungen, die dann von der basis als solche gekennzeichnet werden und nicht mit dem Standard vergleichbar sind. Vergleiche Zahlen über die beiden Werkzeuge nur, wenn ihre basis übereinstimmt. netCashResult ist Einkommen minus Ausgaben von Bankbewegungen — ein Cash-Ergebnis, kein buchhalterischer Gewinn.

Beide Listen sagen es, von beiden Seiten, so wie die App es zeigt. Jede Transaktion trägt linkedDocuments und jedes Dokument trägt linkedTransactions; jeder Eintrag nennt die andere Seite und einen link:

  • confirmed — das Dokument ist mit der Bewegung verknüpft, was als dokumentiert zählt.
  • suggested — der Matcher schlägt die Zuordnung vor; niemand hat sie bestätigt, und der Bewegung fehlt noch ihr Dokument. Der Eintrag trägt die score des Matchers.

Ein Assistent kann daher zwischen keine Rechnung, eine Rechnung, die auf Bestätigung wartet, und bereits abgelegt unterscheiden — kann aber nichts davon ändern, da diese Verbindung kein Werkzeug dafür hat.

Eine Bewegung kann mehrere bestätigte Dokumente tragen. Ein Dokument verknüpft sich mit maximal einer Bewegung, sodass eine in mehreren Teilen bezahlte Rechnung nur die Bewegung zeigt, mit der sie verknüpft wurde. Ein Dokument, das noch Processing ist, hat noch keine Links; None bedeutet keine.

Die Berechtigungen gelten weiterhin: Die gegenüberliegende Seite eines Links wird (Lieferant und Nummer oder Beschreibung und Betrag) nur einem Schlüssel beschrieben, der auch auf diese Ressource zugreifen kann. Mit einer Berechtigung erhältst du die ID der anderen Seite, die Art des Links und die Punktzahl — genug, um zu wissen, dass eine Bewegung dokumentiert ist, nicht was die Rechnung sagt.

get_document_file nimmt eine documentId von list_documents und gibt die gespeicherte Datei selbst zurück — das gleiche PDF oder Bild, das die App öffnet — als eingebettete Ressource mit ihrem MIME-Typ (application/pdf, image/jpeg, …), neben der ID des Dokuments, dem Dateinamen und der Größe — Dateien bis zu 10 MB, die gleiche Obergrenze wie beim Hochladen. So überprüft ein Assistent, ob ein Unterschied von der Rechnung, von dem, was extrahiert wurde, oder von der Bewegung, mit der es verknüpft wurde, kommt, ohne etwas zu exportieren. Es ist ein Lesen: Nichts am Dokument, seinen extrahierten Feldern oder seinen Links ändert sich. Ein Dokument, das nicht dir gehört, wird einfach nicht gefunden.

upload_document ist das einzige Werkzeug, das schreibt, und es wurde absichtlich für diese Rolle gewählt: Es fügt nur hinzu. Der Assistent sendet die Datei (PDF oder Bild, bis zu 10 MB) auf genau eine von zwei Arten — ihre Bytes (contentBase64, mit einem fileName), oder eine url, von der MoneyLights sie herunterlädt, wie einen vorab signierten Link, den ein anderer Dienst ausgegeben hat (fileName ist dann optional: ohne ihn wird die Datei nach dem Download selbst benannt, niemals nach dem Link, der möglicherweise sein Geheimnis trägt) — und MoneyLights verarbeitet sie durch dieselbe Pipeline wie ein Upload in der App — gespeichert, ihre Felder extrahiert (Lieferant, Datum, Nummer, Beträge) und automatisch mit deinen Banktransaktionen abgeglichen.

Das zweimalige Senden derselben Datei dupliziert deine Daten niemals: Das erneute Hochladen wird als gekennzeichnetes Duplikat aufgezeichnet, das auf das Original verweist — egal, ob es als Bytes oder per URL kam. Alles, was der Assistent ablegt, ist in der App sichtbar — und löschbar.

Eine url muss https sein, keine Anmeldeinformationen tragen und auf einen öffentlich erreichbaren Host zeigen; Weiterleitungen werden nur ein paar Mal verfolgt und bei jedem Hop erneut überprüft, und der Download muss ein PDF, PNG oder JPEG von maximal 10 MB sein, der innerhalb von 30 Sekunden ankommt. Ablehnungen sagen, was zu beheben ist, ohne den Link zu wiederholen, und der geheime Teil eines signierten Links wird niemals protokolliert.

Jede andere Schreiboperation (Erstellen von Kunden, Umklassifizieren von Transaktionen, Konfigurieren von Umschlägen…) bleibt absichtlich in der App: Diese Aktionen setzen einen Menschen voraus, der sie bestätigt.

Der Server bietet auch fertige Ausgangspunkte — eine monatliche Cashflow-Überprüfung, eine Analyse der Ausgaben bei Lieferanten, eine Bereinigung fehlender Dokumente — die nur aufgelistet werden, wenn dein Schlüssel jedes Werkzeug ausführen kann, das sie benötigen. Nutze sie so, wie sie sind, oder bearbeite sie nach Belieben.

  • Der Assistent ist durch den Schlüssel begrenzt, der bei jeder Anfrage erneut überprüft wird. Degradierst oder entfernst du den Ersteller des Schlüssels, wird der Assistent beim nächsten Aufruf eingeschränkt oder gestoppt.
  • Finanzdaten enthalten Texte, die von Fremden geschrieben wurden — Zahlungsreferenzen, per E-Mail gesendete Dokumente. Die Ergebnisse der Werkzeuge werden innerhalb einer gekennzeichneten Grenze geliefert, die dem Modell sagt, sie als Daten zu behandeln, niemals als Anweisungen. Betrachte das als eine Minderung, nicht als eine Garantie, und schränke Schlüssel eng ein.
  • Um einen Assistenten zu trennen, widerrufe seinen Schlüssel in Einstellungen → API-Schlüssel. Sofort, immer verfügbar.

Gib jedem Assistenten seinen eigenen Schlüssel — einer pro Kunde bedeutet, dass du einen trennen kannst, ohne die anderen zu stören.