MCP-Server (Model Context Protocol)
Der offene Standard, um agentischer künstlicher Intelligenz Finanz-Tools bereitzustellen.
Was ist MCP?
Das Model Context Protocol (MCP) ist ein universeller Standard, mit dem sich KI-Assistenten mit sicheren Datenquellen verbinden können.
Wenn Sie den MCP-Server von Cord einrichten, können Agenten wie Claude oder in IDEs integrierte Assistenten (wie Cursor) ganz natürlich mit Ihrem Unternehmen interagieren.
Fragen, die Sie der KI nach der Verbindung stellen können:
- „Entnimm dem angehängten PDF die Anforderungen und erstelle in Cord ein Angebot für diesen Kunden.“
- „Prüfe die abgelaufenen Angebote der letzten 30 Tage und entwirf mir freundliche Zahlungserinnerungen per E-Mail.“
- „Suche den Kunden Distribuidora El Zarco und lege einen Entwurf mit diesen 3 Positionen an.“
So richten Sie die Verbindung ein
Ihr KI-Client authentifiziert sich mit Ihrem normalen API-Schlüssel von Cord (sk_live_… / sk_test_…) – demselben, den die REST-API verwendet.
- Öffnen Sie in Cord Einstellungen › MCP. Die Seite liegt im Bereich Entwickler des Einstellungsverzeichnisses, der erscheint, sobald Sie den Entwicklermodus unter Ihr Konto › Präferenzen aktivieren.
- Eine Statuskarte oben zeigt Ihnen, ob Sie bereits einen aktiven Schlüssel haben und, falls schon ein KI-Client verbunden ist, wann er zuletzt verwendet wurde. Haben Sie keinen, erstellt die Schaltfläche „Schlüssel für MCP erstellen“ einen Schlüssel mit Schreibberechtigung und den Gruppen Lesen und Entwürfe schreiben, ohne dass Sie die Seite verlassen – er wird automatisch in die Konfiguration darunter eingefügt. Kopieren Sie ihn sofort: Er wird nicht noch einmal angezeigt. Um Gruppen oder einzelne Tools zu wählen oder Aktionen mit externer Wirkung zu erlauben, erstellen oder bearbeiten Sie den Schlüssel im Tab Schlüssel der Cord Workbench (siehe Berechtigungen pro Tool).
- Kopieren Sie die JSON-Konfiguration für den MCP-Client, die auf dem Bildschirm angezeigt wird.
- Fügen Sie diese Konfiguration am entsprechenden lokalen Pfad Ihres Clients ein (zum Beispiel in die Datei
claude_desktop_config.json, wenn Sie die App Claude for Desktop verwenden).
Publishable-Schlüssel (pk_…, dafür gedacht, offen im Browser zu liegen) können nicht mit MCP
verwendet werden – sie decken nur das Erstellen von Angeboten und das Lesen des Katalogs über die REST-API ab.
Verwenden Sie stattdessen einen Secret-Schlüssel aus Ihrem Backend oder Desktop-Client.
Zwei Verbindungsarten
Streamable HTTP (empfohlen) – POST https://cordhq.app/api/mcp mit dem Header
Authorization: Bearer sk_live_…. Ohne Sitzung: Jede JSON-RPC-Nachricht ist eine eigenständige
HTTP-Anfrage. Das erwarten die meisten modernen MCP-Clients.
HTTP + SSE (Legacy, für ältere Clients beibehalten) – GET https://cordhq.app/api/mcp/sse öffnet
eine langlebige Verbindung und gibt zurück, wohin die Nachrichten zu senden sind (POST /api/mcp/message?sessionId=…). Jede POST-Nachricht muss denselben Authorization: Bearer
tragen, mit dem die Sitzung geöffnet wurde – die sessionId in der URL allein genügt nicht (sie
wird im Klartext übertragen und kann in Logs zwischengeschalteter Proxys offenliegen), und der
Schlüssel muss zu derselben Organisation gehören, die die Sitzung geöffnet hat.
Berechtigungen pro Tool
Jedes Tool gehört zu einer Gruppe und einer Ressource, nach demselben Modell wie die eingeschränkten Schlüssel:
| Gruppe | Tools | Schlüssel ohne Liste |
|---|---|---|
| Lesen | listar_cotizaciones, detalle_cotizacion, cartera_vencida, resumen_negocio, buscar_cliente, listar_productos, listar_facturas, detalle_factura, listar_workflows_manuales, listar_eventos, estado_configuracion, validar_datos_fiscales, validar_apariencia |
Erlaubt |
| Entwürfe schreiben | crear_cotizacion_borrador, crear_factura_borrador, crear_cliente, crear_tarea, registrar_promesa_pago, proponer_configuracion |
Erlaubt mit einem Schlüssel mit Schreibberechtigung |
| Aktionen mit externer Wirkung | enviar_cotizacion, aprobar_cotizacion, rechazar_cotizacion, registrar_pago_cotizacion, actualizar_cliente, correr_workflow, simular_evento |
Gesperrt: nur mit ausdrücklicher Berechtigung, und jeder Aufruf wartet auf Freigabe |
Wenn Sie im Tab Schlüssel der Workbench einen Schlüssel erstellen oder bearbeiten, wählen Sie ganze Gruppen oder innerhalb einer Gruppe einzelne Tools. Eine Gruppe umfasst auch Tools, die Cord ihr später hinzufügt; ein einzelnes Tool nur sich selbst. Ein Schlüssel ohne Liste, wie alle vor den Berechtigungen pro Tool erstellten, behält Lesen und Entwürfe gemäß seiner Stufe und kann keine Aktion mit externer Wirkung anfordern, bis jemand sie erlaubt.
- Die Stufe gilt weiter: Ein Schlüssel nur mit Leserecht nutzt keine Entwürfe, auch wenn sie auf
seiner Liste stehen, und ein eingeschränkter Schlüssel (
rk_) wendet die Stufe jeder Ressource auf jedes Tool an (listar_facturasbrauchtfacturas: read;crear_cotizacion_borrador,cotizaciones: write). tools/listliefert nur, was der Schlüssel aufrufen darf. Ruft ein Client ein anderes auf, kommt ein Tool-Fehler, der sagt, welches fehlt und wo man es erlaubt.contexto_cuentaundbuscar_documentacionsind immer verfügbar: Sie identifizieren das Konto und durchsuchen diese Dokumentation, ohne Kundendaten.
actualizar_cliente gehört zu den Aktionen mit externer Wirkung, obwohl es niemandem schreibt:
Cord nutzt E-Mail und Steuerdaten des Kunden, um Erinnerungen, wiederkehrende Rechnungen und
Forderungsmanagement ohne weitere Prüfung zu versenden; sie zu ändern wirkt also außerhalb von Cord.
Aktionen, die auf Freigabe warten
Eine Aktion mit externer Wirkung wird nicht ausgeführt, wenn der Agent sie aufruft, selbst wenn der Schlüssel sie erlaubt und der MCP-Client keine Bestätigung verlangt. Cord speichert eine Anfrage und antwortet:
{
"estado": "pendiente_de_aprobacion",
"aprobacion_id": "7c1e4b2a-5d3f-4a8e-9b6c-2f1d0e3a4b5c",
"aprobacion_url": "https://cordhq.app/app/ajustes/mcp/solicitudes?modo=vivo#sol-7c1e4b2a-5d3f-4a8e-9b6c-2f1d0e3a4b5c",
"vence": "2026-10-18T16:04:00.000Z",
"mensaje": "No se ejecutó todavía: una persona con acceso a Cord tiene que aprobarla. …"
}
- Der Agent teilt
aprobacion_urlmit dem Nutzer. - Unter Einstellungen › MCP › Anfragen sieht eine Person mit der Berechtigung Einstellungen und der Berechtigung für die Aktion in der App (Angebote zum Senden oder Erfassen einer Zahlung, Freigaben zum Bestätigen oder Ablehnen, Kunden zum Aktualisieren eines Kunden, Angebote oder Forderungsmanagement für einen Workflow je nach Objekt, Einstellungen zum Simulieren eines Webhooks) das Dokument, was sich ändern würde und die Daten des Agenten, und gibt frei oder lehnt ab.
- Bei Freigabe führt Cord die Aktion genau einmal aus, mit demselben Handler wie immer. Zwei Personen, die gleichzeitig freigeben, führen sie nicht zweimal aus. Ablehnen führt nichts aus.
- Für das Ergebnis wiederholt der Agent den Aufruf mit derselben
idempotency_key: Die Antwort enthältestadoejecutada(mit dem Rückgabewert der Aktion inresultado),fallida(mit dem Grund inerror),rechazadaodervencida.
Die Anfrage läuft nach 72 Stunden ohne Entscheidung ab. Derselbe Aufruf mit denselben Argumenten
liefert die offene Anfrage, statt eine neue anzulegen, und eine Organisation erhält höchstens 30
Anfragen pro Stunde. Wird der Schlüssel widerrufen, läuft er ab oder verliert er das Tool vor der
Entscheidung, kann die Anfrage nicht mehr freigegeben werden. Mit einem Testschlüssel liegt die
Anfrage in der Testumgebung, und der Link zeigt das mit ?modo=prueba.
Verfügbare Tools
| Tool | Was es tut | Berechtigung |
|---|---|---|
listar_cotizaciones |
Listet Angebote auf, optional nach Status gefiltert. | Lesen |
detalle_cotizacion |
Vollständige Details eines Angebots: Positionen, Gesamtbeträge, Zeitleiste. | Lesen |
cartera_vencida |
ÜBERFÄLLIGE offene Forderungen: Betrag, Altersstruktur, Detail pro Kunde. | Lesen |
resumen_negocio |
KPIs, Conversion-Funnel, Pipeline-Prognose, Tarifnutzung. | Lesen |
buscar_cliente |
Durchsucht das Verzeichnis nach Unternehmen/Kontakt/RFC/E-Mail. Jeder Kunde enthält language, seine Dokumentsprache (null = die der Organisation). Paginiert. |
Lesen |
listar_productos |
Produktkatalog (ID, SKU, Name, Einheit, Listenpreis). Paginiert. | Lesen |
crear_cotizacion_borrador |
Erstellt ein Angebot als ENTWURF (ohne es zu senden). Idempotent, wenn Sie idempotency_key übergeben. |
Entwürfe |
listar_facturas |
Listet die Rechnungen von Cord Invoicing mit offenem Betrag und Status auf (draft|open|paid|void|uncollectible|overdue). Filtert nach Status, Kunde oder Freitext. Paginiert. |
Lesen |
detalle_factura |
Vollständige Details EINER Rechnung: Positionen, Aussteller, Empfänger, Steuern, angegebener Wechselkurs, offener Betrag und erhaltene Zahlungen. | Lesen |
crear_factura_borrador |
Erstellt eine Rechnung als ENTWURF für einen Kunden, ohne dass ein vorheriges Angebot nötig ist. In allen Tarifen verfügbar, auch im kostenlosen. | Entwürfe |
enviar_cotizacion |
Fordert an, ein Angebot im Entwurf an den Kunden zu senden (E-Mail mit dem Link), in der Dokumentsprache des Kunden. Wartet auf Freigabe. Im kostenlosen Tarif verbraucht das einen der monatlichen Versände. | mit Freigabe |
aprobar_cotizacion |
Fordert an, ein gesendetes oder angesehenes Angebot als bestätigt zu markieren. Wartet auf Freigabe. | mit Freigabe |
rechazar_cotizacion |
Fordert an, ein gesendetes oder angesehenes Angebot als abgelehnt zu markieren. Wartet auf Freigabe. | mit Freigabe |
registrar_pago_cotizacion |
Fordert an, zu erfassen, dass ein bestätigtes Angebot außerhalb von Cord bezahlt wurde; bei Ausführung storniert es seine offenen Online-Zahlungen. Akzeptiert metodo_pago. Wartet auf Freigabe. |
mit Freigabe |
crear_cliente |
Legt einen Kunden an (Unternehmen, Kontakt, E-Mail, Telefon, Steuernummer, Bedingungen, Land und Dokumentsprache: es, en, pt, fr, de oder null). |
Entwürfe |
actualizar_cliente |
Fordert an, die Kontaktdaten eines Kunden zu ändern, auch language. Ändert nur, was Sie senden; Kredit, Stufe und Rabatt bleiben immer unberührt. Bereits Versendetes behält seine Sprache. Wartet auf Freigabe. |
mit Freigabe |
crear_tarea |
Erstellt eine Folgeaufgabe: titulo (Pflicht), optional fecha als Fälligkeitsdatum YYYY-MM-DD, cotizacion_id und factura_id. Sie entsteht ohne zuständige Person und mit normaler Priorität; beides ändern Sie in der App. |
Entwürfe |
registrar_promesa_pago |
Erfasst das Datum, an dem der Kunde zugesagt hat, ein Angebot zu bezahlen. Es wird nichts eingezogen. | Entwürfe |
listar_workflows_manuales |
Listet die aktiven Workflows „Sie starten ihn“ nach Objekt (quote oder invoice). |
Lesen |
correr_workflow |
Fordert an, einen Workflow „Sie starten ihn“ für bis zu 50 Angebote oder Rechnungen auszuführen, mit der veröffentlichten Version und ihren Regeln. Wartet auf Freigabe; bei Ausführung meldet es, wie viele Ausführungen gestartet wurden. | mit Freigabe |
listar_eventos |
Verlauf des Unternehmens (Angebote, Rechnungen, Kunden, Aufgaben, Zahlungszusagen), filterbar nach Typ oder Objekt. Paginiert. | Lesen |
contexto_cuenta |
Unternehmen, Land, Währung, Sprache, Zeitzone, Tarif und ob der Schlüssel ein Test- oder Live-Schlüssel ist. Rufen Sie es zuerst auf. | Lesen |
proponer_configuracion |
Schlägt Profil, Marke, Steuern, Katalog und Vorlagen auf Basis der Website, einer Beschreibung oder der Preisliste vor (Base64, bis zu 3 MB). Übernimmt nichts: gibt review_url zurück, damit eine Person den Vorschlag freigibt. |
Entwürfe |
estado_configuracion |
Status eines Vorschlags (propuesto, aplicado, descartado, fallido) und das Ergebnis pro Abschnitt. |
Lesen |
validar_datos_fiscales |
Validiert RFC, Steuerregime, CFDI-Verwendung und Postleitzahl (Mexiko), NIF/NIE/CIF (Spanien) oder EIN (USA) mit denselben Regeln wie bei der Ausstellung. | Lesen |
validar_apariencia |
Validiert ein appearance-Objekt von Elements und meldet, welche Schlüssel Cord verwerfen würde. |
Lesen |
simular_evento |
Fordert an, einen Test-Webhook über die echte Zustelllogik auszulösen. Nur mit Testschlüssel. Wartet auf Freigabe. | mit Freigabe |
buscar_documentacion |
Durchsucht diese Dokumentation und gibt die relevantesten Seiten mit Auszug und URL zurück. | Lesen |
Jedes Tool deklariert die Standard-Annotationen von MCP (readOnlyHint, idempotentHint,
destructiveHint) in tools/list. Lesende Tools sind readOnlyHint: true, und solche, die den
Status eines Angebots ändern, sind destructiveHint: true. Die Bestätigung hängt nicht mehr davon
ab, dass der MCP-Client diese Annotationen beachtet: Cord führt keine Aktion mit externer Wirkung
aus, bevor eine Person sie freigibt (siehe Aktionen, die auf Freigabe warten).
Kein Tool stellt Rechnungen aus oder versieht sie mit einem Stempel: Das bleibt eine Aktion, die
eine Person in der App oder über die API auslöst.
Kein Tool ändert die Kontoeinstellungen direkt: proponer_configuracion hinterlässt einen Vorschlag, den
eine Person mit der Berechtigung „Einstellungen“ in Cord prüft und freigibt, genau wie den Vorschlag aus dem
Onboarding oder aus cord setup.
Jedes Tool deklariert ein outputSchema und antwortet zusätzlich zum Text mit structuredContent (dem
validierbaren JSON). Beträge werden mit ihrer Währung in moneda übertragen: Gehen Sie nie von Pesos aus.
Paginierung
listar_cotizaciones, buscar_cliente, listar_productos, listar_facturas und listar_eventos geben Seiten zurück, nicht die ganze Tabelle. Es gibt zwei Antwortformen.
buscar_cliente und listar_productos geben die Liste in items zurück, mit total, has_more, next_cursor und der Währung in moneda; listar_cotizaciones gibt total, has_more und next_cursor mit der Liste in cotizaciones zurück, und die Währung steht bei jedem Angebot:
{
"items": [ { "id": "9a1c3e5f-7b2d-4f6a-8c0e-1d3b5f7a9c2e", "empresa": "Distribuidora El Zarco" } ],
"total": 47,
"moneda": "MXN",
"has_more": true,
"next_cursor": "20"
}
listar_facturas und listar_eventos geben nur die Liste (in facturas oder eventos) und next_cursor zurück, ohne total und has_more:
{
"eventos": [ { "id": "6b0e2f4a-8c1d-4e3b-9a5f-7d2c0e8b1a46", "type": "quote.approved" } ],
"next_cursor": "MjAyNi0wOS0xNFQxODozMjowNC4xMjMwMDBafDZiMGUyZjRhLThjMWQtNGUzYi05YTVmLTdkMmMwZThiMWE0Ng"
}
Rufen Sie in jedem Fall dasselbe Tool erneut mit cursor: next_cursor auf, um die nächste Seite zu erhalten.
next_cursor ist null, sobald es keine weiteren Ergebnisse gibt.
listar_productos enthält nie die internen Kosten oder die Marge eines Produkts – nur Listenpreis, SKU,
Name und Einheit. Diese Spalte ist für einen API-Schlüssel absichtlich unsichtbar, ob er Schreibberechtigung
hat oder nicht.
Sicher wiederholbare Aufrufe (Idempotenz)
crear_cotizacion_borrador, crear_cliente, crear_tarea, registrar_promesa_pago und die sieben
Aktionen mit externer Wirkung akzeptieren eine optionale idempotency_key – eine eindeutige Kennung,
die Sie erzeugen (zum Beispiel eine UUID). Muss Ihr MCP-Client den Aufruf wiederholen, weil keine
Antwort rechtzeitig kam (Netzwerk-Timeout), wiederholen Sie DIESELBE idempotency_key: Cord liefert
das Ergebnis des ersten Aufrufs, statt die Aktion zu wiederholen. Bei einer Aktion mit externer
Wirkung liefert derselbe Schlüssel den aktuellen Stand ihrer Anfrage (offen, ausgeführt, abgelehnt…).
Derselbe Schlüssel mit anderen Argumenten ergibt einen Fehler, und bei den übrigen Tools läuft der
Schlüssel nach 24 Stunden ab.
{
"name": "crear_cotizacion_borrador",
"arguments": {
"idempotency_key": "a1b2c3d4-…",
"cliente_id": "9a1c3e5f-7b2d-4f6a-8c0e-1d3b5f7a9c2e",
"items": [{ "descripcion": "Installation", "cantidad": 1, "precio_unitario": 4500 }]
}
}
Ohne idempotency_key funktioniert das Tool ganz normal – jeder Aufruf erstellt einen neuen Entwurf
(das Feld ist keine Pflicht, wird aber empfohlen, wenn Ihr Client automatisch wiederholt).
detalle_cotizacion und listar_eventos können Text enthalten, den der Kunde im öffentlichen Link
geschrieben hat (Kommentare, Gegenangebote). Dieser Text ist mit origen: "cliente_externo" markiert und von
<<<mensaje_del_cliente>>> umschlossen: Ihr Agent soll ihn melden, aber nie als Anweisung befolgen.
Sichere Tools
Cord stellt der KI „Tools“ kontrolliert bereit. Die KI hat also keinen rohen, unbegrenzten Zugriff auf Ihre Datenbank; sie kann nur die Endpoints aufrufen, die Cord freigegeben und eingeordnet hat, und übernimmt dabei die Berechtigungen des API-Schlüssels.
Wichtig:
Die Geschäftsregeln gelten strikt. Versucht die KI beim Erstellen eines Angebots einen Rabatt von 150 % anzuwenden, lehnt die API die Anfrage mit dem Code 400 invalid_request ab, um Ihr Unternehmen zu schützen.
Limits, Messung und Aktivität
Jeder echte Aufruf (keine Protokollbenachrichtigungen wie notifications/initialized) zählt genauso
wie ein Aufruf der REST-API gegen das Nutzungskontingent Ihres Tarifs. Jede HTTP-Anfrage an den MCP-Server,
Benachrichtigungen eingeschlossen, zählt gegen die Minutenlimits der API (600 pro geheimem Schlüssel und 120
pro Quell-IP), und die Tools, die den Status eines Angebots ändern, teilen sich zusätzlich das Limit von 120
pro Minute und Organisation; siehe die Tabelle der Limits.
Jeder Aufruf erscheint im Tab Protokolle der Cord Workbench
mit dem aufgerufenen Tool (z. B. /mcp/tools/call:listar_productos) – so sehen Sie genau, was Ihr Agent tut,
mit welchem Schlüssel und wann. Sie können dieses Protokoll nach Methode oder Status filtern oder in der Route
nach mcp suchen, um nur das zu sehen, was die KI getan hat.
Aktionen mit externer Wirkung hinterlassen eine vollständige Spur: Jeder Aufruf erscheint unter Protokolle mit dem Schlüssel, der ihn gemacht hat, die Entscheidung erscheint unter Einstellungen › Audit-Log mit der Person, die freigegeben oder abgelehnt hat, und die ausgeführte Aktion wird als von diesem Schlüssel ausgeführt protokolliert.