MCP
Model Context Protocol pour un assistant qui peut lire les dossiers d’un seul compte Ervazo, créer une tâche et écrire une note interne. C’est du JSON-RPC 2.0 sur HTTPS. Cette version n’a pas de flux SSE ni d’en-tête de session distinct.
Adresse
POST https://ervazo.com/api/mcp avec la même clé bearer que l’API REST. L’indicateur API publique doit être activé. Voir la page REST pour la création, la révocation et la limite de huit clés.
GET /api/mcp n’a pas besoin de clé et indique seulement où envoyer le POST.
{
"name": "ervazo",
"mcp": "POST /api/mcp",
"protocol": "2025-03-26"
}Protocole
Chaque message POST est un seul objet JSON-RPC. jsonrpc vaut 2.0. id est renvoyé tel quel, même s’il s’agit d’une chaîne. Une notification sans id, dont method commence par notifications/, reçoit 202 et un body vide.
Le body peut faire 40 000 octets. Au-delà, c’est 413, en dehors de JSON-RPC. Un JSON invalide a le code d’erreur -32700, HTTP 400.
Méthodes que ce serveur connaît : initialize, ping, tools/list, tools/call. Toute autre valeur est -32601, Method not found. Une méthode HTTP autre que GET ou POST donne 405.
Client
Un client qui prend en charge un serveur HTTP externe pointe vers l’adresse POST et transmet la clé. Remplacez la clé. Ne la mettez pas dans un dépôt partagé.
{
"mcpServers": {
"ervazo": {
"url": "https://ervazo.com/api/mcp",
"headers": {
"Authorization": "Bearer nal_jouw_sleutel"
}
}
}
}Le client doit d’abord envoyer initialize, puis tools/list, et tools/call pour chaque action. Ervazo ne pousse aucun changement de liste : capabilities.tools.listChanged vaut false.
initialize
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": { "name": "voorbeeld", "version": "1.0.0" }
}
}params ne sont pas contrôlés. La réponse indique le protocole et le serveur.
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-03-26",
"capabilities": { "tools": { "listChanged": false } },
"serverInfo": { "name": "ervazo", "version": "1.0.0" }
}
}ping
Résultat vide. Utile pour tester la clé et l’indicateur sans toucher à un dossier.
{ "jsonrpc": "2.0", "id": 2, "method": "ping" }{ "jsonrpc": "2.0", "id": 2, "result": {} }tools/list
Les six outils, avec JSON-Schema. additionalProperties vaut false. Un champ supplémentaire dans arguments est ignoré lors de l’appel, car seuls les champs connus sont lus, mais un client strict ne doit pas les envoyer.
{ "jsonrpc": "2.0", "id": 3, "method": "tools/list" }tools/call
name est le nom de l’outil. arguments est un objet. Le résultat n’est pas une donnée JSON-RPC séparée, mais du texte dans content. Ce texte est lui-même du JSON. isError vaut true si le dossier manque ou si la saisie est refusée.
{
"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
}
}Analysez donc text une seconde fois. Un nom inconnu donne dans ce texte {"error":"Onbekend hulpmiddel."} et isError true.
Outils
list_dossiers
Aucun argument. Même liste que GET /api/v1/dossiers : id, reference, line, phase, status, name, death. Pas de documents et pas de BSN.
get_dossier
Obligatoire : dossierId. Réponse sous dossier : id, reference, line, phase, status, firstName, lastName, birth, death, residence. Pas de notes privées.
{ "name": "get_dossier", "arguments": { "dossierId": "…" } }list_parties
Obligatoire : dossierId. Chaque personne concernée a id, type, name, email, relation et portal. La note privée de la personne n’est pas incluse.
list_tasks
Obligatoire : dossierId. Chaque tâche a id, title, due et status.
add_task
Obligatoire : dossierId et title. due est facultatif, format YYYY-MM-DD. Sans date valide, c’est aujourd’hui. title est tronqué à 200 caractères. Un titre vide est une erreur. Sur un dossier clos aussi. La tâche a le statut open et figure dans le journal d’audit comme api.task.
{
"name": "add_task",
"arguments": {
"dossierId": "…",
"title": "Polis opvragen",
"due": "2026-11-12"
}
}add_note
Obligatoire : dossierId et body. 4 000 caractères au plus après trim. La note est internal, l’auteur est API, et elle n’apparaît pas dans le portail des héritiers. Le journal d’audit reçoit api.note.
{
"name": "add_note",
"arguments": {
"dossierId": "…",
"body": "Verzekeraar gevraagd om de polis."
}
}Erreurs
- 401 — La même erreur de clé que l’API REST, avant JSON-RPC.
- 403 — API désactivée, ou compte en pause.
- 429 — Plus de 120 requêtes par minute pour cette clé. REST et MCP sont comptés ensemble.
- 413 — Body supérieur à 40 000 octets.
- 400 en -32700 — Le body n’est pas du JSON.
- -32601 — Method inconnue.
- Dossier niet gevonden — HTTP 200, isError true, text est la phrase Dossier niet gevonden.
- Titre vide, note vide ou dossier clos — HTTP 200, isError true, text est du JSON avec error.
Un dossier manquant ne renvoie donc pas HTTP 404 avec MCP. Seuls le texte et isError l’indiquent.
Mêmes limites que l’API
Une seule clé, un seul compte. Pas de fichiers, pas de BSN, pas de suppression, pas d’invitation et pas de partage. L’écriture sur un dossier clos s’arrête. La page REST décrit les champs renvoyés dans le JSON du texte.