MCP
Model Context Protocol für einen Assistenten, der die Dossiers eines Ervazo-Kontos lesen, eine Aufgabe anlegen und eine interne Notiz schreiben darf. Es ist JSON-RPC 2.0 über HTTPS. Diese Version hat keinen SSE-Stream und keinen separaten Session-Header.
Adresse
POST https://ervazo.com/api/mcp mit demselben Bearer-Schlüssel wie die REST-API. Das Flag Öffentliche API muss eingeschaltet sein. Siehe die REST-Seite für das Erstellen, das Widerrufen und das Limit von acht Schlüsseln.
GET /api/mcp braucht keinen Schlüssel und sagt nur, wohin Sie posten.
{
"name": "ervazo",
"mcp": "POST /api/mcp",
"protocol": "2025-03-26"
}Protokoll
Jede POST-Nachricht ist ein JSON-RPC-Objekt. jsonrpc ist 2.0. id kommt unverändert zurück, auch wenn es ein String ist. Eine Benachrichtigung ohne id, deren method mit notifications/ beginnt, erhält 202 und einen leeren body.
Der body darf 40.000 Bytes haben. Größer ist 413, außerhalb von JSON-RPC. Ungültiges JSON ist Fehlercode -32700, HTTP 400.
Methoden, die dieser Server kennt: initialize, ping, tools/list, tools/call. Alles andere ist -32601, Method not found. Eine andere HTTP-Methode als GET oder POST ist 405.
Client
Ein Client, der einen externen HTTP-Server unterstützt, zeigt auf die POST-Adresse und sendet den Schlüssel mit. Ersetzen Sie den Schlüssel. Legen Sie ihn nicht in ein geteiltes Repo.
{
"mcpServers": {
"ervazo": {
"url": "https://ervazo.com/api/mcp",
"headers": {
"Authorization": "Bearer nal_jouw_sleutel"
}
}
}
}Der Client soll zuerst initialize senden, danach tools/list und für jede Aktion tools/call. Ervazo pusht keine Listenänderung: capabilities.tools.listChanged ist false.
initialize
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": { "name": "voorbeeld", "version": "1.0.0" }
}
}params werden nicht geprüft. Die Antwort nennt das Protokoll und den Server.
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-03-26",
"capabilities": { "tools": { "listChanged": false } },
"serverInfo": { "name": "ervazo", "version": "1.0.0" }
}
}ping
Leeres Ergebnis. Nützlich, um den Schlüssel und das Flag zu testen, ohne ein Dossier zu berühren.
{ "jsonrpc": "2.0", "id": 2, "method": "ping" }{ "jsonrpc": "2.0", "id": 2, "result": {} }tools/list
Die sechs Werkzeuge, mit JSON-Schema. additionalProperties ist false. Ein zusätzliches Feld in arguments wird beim Aufruf ignoriert, weil nur die bekannten Felder gelesen werden, aber ein strenger Client soll sie nicht senden.
{ "jsonrpc": "2.0", "id": 3, "method": "tools/list" }tools/call
name ist der Werkzeugname. arguments ist ein Objekt. Das Ergebnis steht nicht als eigenständige JSON-RPC-Daten, sondern als Text in content. Dieser Text ist selbst JSON. isError ist true, wenn das Dossier fehlt oder die Eingabe abgelehnt wird.
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "list_dossiers",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [
{ "type": "text", "text": "{\"dossiers\":[]}" }
],
"isError": false
}
}Parsen Sie text daher noch einmal. Ein unbekannter Name setzt {"error":"Onbekend hulpmiddel."} in diesen Text, und isError true.
Werkzeuge
list_dossiers
Keine Argumente. Dieselbe Liste wie GET /api/v1/dossiers: id, reference, line, phase, status, name, death. Keine Dokumente und keine BSN.
get_dossier
Erforderlich: dossierId. Antwort unter dossier: id, reference, line, phase, status, firstName, lastName, birth, death, residence. Keine privaten Notizen.
{ "name": "get_dossier", "arguments": { "dossierId": "…" } }list_parties
Erforderlich: dossierId. Jede beteiligte Person hat id, type, name, email, relation und portal. Die private Notiz der Person ist nicht enthalten.
list_tasks
Erforderlich: dossierId. Jede Aufgabe hat id, title, due und status.
add_task
Erforderlich: dossierId und title. due ist optional, Format YYYY-MM-DD. Ohne gültiges Datum wird es heute. title wird auf 200 Zeichen gekürzt. Ein leerer Titel ist ein Fehler. Bei einem geschlossenen Dossier ebenfalls. Die Aufgabe ist offen und kommt ins Auditprotokoll als api.task.
{
"name": "add_task",
"arguments": {
"dossierId": "…",
"title": "Polis opvragen",
"due": "2026-11-12"
}
}add_note
Erforderlich: dossierId und body. Höchstens 4000 Zeichen nach dem Kürzen. Die Notiz ist internal, Autor API, und erscheint nicht im Erbenportal. Das Auditprotokoll erhält api.note.
{
"name": "add_note",
"arguments": {
"dossierId": "…",
"body": "Verzekeraar gevraagd om de polis."
}
}Fehler
- 401 — Derselbe Schlüsselfehler wie bei der REST-API, vor JSON-RPC.
- 403 — API aus, oder Konto pausiert.
- 429 — Mehr als 120 Anfragen pro Minute für diesen Schlüssel. REST und MCP zählen zusammen.
- 413 — Body größer als 40.000 Bytes.
- 400 en -32700 — Der body ist kein JSON.
- -32601 — Unbekannte method.
- Dossier niet gevonden — HTTP 200, isError true, text ist der Satz Dossier niet gevonden.
- Leerer Titel, leere Notiz oder geschlossenes Dossier — HTTP 200, isError true, text ist JSON mit error.
Ein fehlendes Dossier ist bei MCP also kein HTTP 404. Nur der Text und isError sagen es.
Dieselben Grenzen wie die API
Ein Schlüssel, ein Konto. Keine Dateien, keine BSN, kein Löschen, keine Einladung und keine Teilung. Schreiben in ein geschlossenes Dossier stoppt. Die REST-Seite beschreibt die Felder, die im Text-JSON zurückkommen.