Anbindung
REST- und MCP-API
Diese Anleitung zeigt, wie Sie knowmind aus eigenen Anwendungen ansprechen. Zwei Schnittstellen stehen zur Verfügung: REST für klassische Backend-Integrationen und MCP (JSON-RPC 2.0 über HTTP) für KI-Werkzeuge.
Voraussetzungen
- knowmind-Konto — der API-/CLI-Zugang ist in jedem Tarif enthalten, auch im kostenlosen Privat-Tarif
- API-Token im Format kmt_… (Anleitung: API-Token erstellen)
- TLS-fähiger HTTP-Client in Ihrer Wahl-Sprache
Zwei Schnittstellen, ein Token
Schritte
- 1
Endpunkt und Authentifizierung
Alle Anfragen gehen gegen
https://knowmind.de. Die Authentifizierung erfolgt über denAuthorization: Bearer kmt_…Header.textREST: https://knowmind.de/api/v1/... MCP: https://knowmind.de/api/mcp/v1 Auth: Authorization: Bearer kmt_…Ergebnis:
curl -H "Authorization: Bearer kmt_…" https://knowmind.de/api/healthliefert eine Erfolgsmeldung. - 2
Beispiel: Suche und Speichern über MCP
Für Suche und Anlage mit einem API-Token ist der MCP-Endpunkt
/api/mcp/v1der verlässliche Weg (Tool-Aufrufe per JSON-RPC 2.0).curl:
bash# Suchen (MCP tools/call → knowmind_recall) curl -X POST https://knowmind.de/api/mcp/v1 \ -H "Authorization: Bearer kmt_…" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "knowmind_recall", "arguments": { "query": "Wer ist Ansprechpartnerin für die Einarbeitung?", "k": 5, "hops": 2 } } }' # Erinnerung anlegen (MCP tools/call → knowmind_store_memory) curl -X POST https://knowmind.de/api/mcp/v1 \ -H "Authorization: Bearer kmt_…" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "knowmind_store_memory", "arguments": { "title": "QM-Schulung Pflicht", "content": "Alle Service-Mitarbeitenden absolvieren die QM-Schulung jährlich.", "memory_type": "semantic", "tags": ["qm", "schulung"], "source": "internal-handbook" } } }'TypeScript (Node 20+):
tsconst TOKEN = process.env.KNOWMIND_TOKEN!; const MCP = "https://knowmind.de/api/mcp/v1"; async function recall(query: string, k = 5) { const r = await fetch(MCP, { method: "POST", headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "knowmind_recall", arguments: { query, k, hops: 2 } }, }), }); if (!r.ok) throw new Error(`recall failed: ${r.status}`); return r.json(); } const hits = await recall("Wer hat den Müller-Vertrag verfasst?"); console.log(hits);Python:
pythonimport os, requests TOKEN = os.environ["KNOWMIND_TOKEN"] MCP = "https://knowmind.de/api/mcp/v1" HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"} def recall(query: str, k: int = 5) -> dict: r = requests.post( MCP, headers=HEADERS, json={ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "knowmind_recall", "arguments": {"query": query, "k": k, "hops": 2}}, }, timeout=10, ) r.raise_for_status() return r.json() print(recall("DSGVO-Schulung Pflicht?")) - 3
MCP-Beispiel: JSON-RPC 2.0
MCP-Aufrufe sind JSON-RPC-2.0-Anfragen an
/api/mcp/v1. Standardmäßig wird eine einmalige JSON-Antwort geliefert. Wer Streamable-HTTP braucht (für native Custom Connectoren), setztAccept: text/event-stream.bash# Tools auflisten curl -X POST https://knowmind.de/api/mcp/v1 \ -H "Authorization: Bearer kmt_…" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' # Recall aufrufen curl -X POST https://knowmind.de/api/mcp/v1 \ -H "Authorization: Bearer kmt_…" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "knowmind_recall", "arguments": { "query": "Wann ist der nächste Quartalsbericht fällig?", "k": 5 } } }'Ergebnis: Antwort ist ein JSON-RPC-Response-Objekt mit
result(bei Erfolg) odererror(bei Fehler). - 4
Rate-Limits beachten
Anfragen pro Minute je Tarif: Privat 30, Pro 60, Team 120, Business 120, Enterprise 600. Überschreitungen liefern HTTP 429 mit
Retry-After-Header in Sekunden.Setzen Sie in eigenen Clients einen Backoff-Mechanismus ein, der bei 429 wartet und erneut versucht. Im Pseudo-Code: lesen Sie
Retry-After, warten Sie die angegebene Anzahl Sekunden (mit Jitter), wiederholen Sie die Anfrage maximal dreimal.
Prüfung des Ergebnisses
Die Anbindung läuft, wenn alle drei Bedingungen erfüllt sind:
GET /api/healthmit gültigem Bearer-Token liefert HTTP 200 mit Service-Status.- Ein
POST /api/mcp/v1mittools/call → knowmind_recallund einer bekannten Frage liefert mindestens einen Treffer. - Im knowmind-Dashboard unter API-Tokens sehen Sie den Zeitpunkt der letzten Nutzung Ihres Tokens.
Fehlerbehebung
| Fehlermeldung | Ursache | Auflösung |
|---|---|---|
| 401 Unauthorized | Token fehlt, ist widerrufen oder Tippfehler im Header. | Token im Dashboard prüfen. Header-Format: Authorization: Bearer kmt_… mit Leerzeichen zwischen Bearer und Token. |
| 403 Forbidden | Token hat nicht den nötigen Scope (write erforderlich für Anlage). | Im Dashboard den Token-Scope bearbeiten oder einen neuen Token mit read und write erstellen. |
| 429 Too Many Requests | Rate-Limit überschritten (je nach Tarif zwischen 30 und 600 Anfragen pro Minute). | Retry-After auswerten, Backoff implementieren, gegebenenfalls Enterprise-Tarif für 600 req/min. |
| 422 Unprocessable Entity bei /memory/entries | Pflichtfeld fehlt oder memory_type außerhalb der Enum-Liste. | Pflichtfelder: memory_type, title, content. Zulässige Typen: semantic, episodic, procedural, reference, working, entity. |
| 504 Gateway Timeout bei langen Dokumenten | Upload-Dokument > 10.000 Zeichen wird asynchron indexiert. | Die Antwort von POST /api/documents kommt sofort mit documentId und status: queued. Die Indexierung läuft im Hintergrund; der Status wird über die Dokumenten-Liste sichtbar — einen separaten Polling-Endpunkt gibt es nicht. |