MCP
Depuis un script
Appelle le serveur MCP sans agent, avec curl et une clé d'API. Sans état, en POST, en SSE ou en JSON simple.
Pour un script, l’API REST est plus simple. Mais tu peux aussi parler au serveur MCP directement, par exemple pour tester ta clé ou reproduire ce que voit ton agent.
La poignée de main
Le serveur est sans état : pas d’initialize, pas d’en-tête de session. Chaque requête est un POST sur https://mcp.rustine.io avec :
Authorization: Bearer rst_...;Content-Type: application/json;Accept: application/json, text/event-stream(sinon406).
Sans en-tête MCP-Protocol-Version, la réponse arrive en SSE : une ligne event: message, puis data: {…} avec la réponse JSON-RPC.
En JSON simple
Avec la révision 2026-07-28 du protocole, la réponse est du JSON simple. Ajoute les en-têtes MCP-Protocol-Version, Mcp-Method et Mcp-Name, et les clés _meta dans params :
curl -s https://mcp.rustine.io \
-H "Authorization: Bearer $RUSTINE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/call" \
-H "Mcp-Name: list_projects" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_projects","arguments":{},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"mon-script","version":"1.0.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
Les réponses à connaître
- 401
invalid_tokenavec un en-têteWWW-Authenticate: clé absente, révoquée ou mal écrite. - 406 : il manque
text/event-streamouapplication/jsondansAccept. - Quota épuisé ou offre sans MCP : jamais un
403. La réponse est un résultat d’outil avecisError: trueet un texte lisible, avec le lien pour changer d’offre. - Débit : 120 requêtes par minute et par clé, comme l’API.
Les paramètres de chaque outil : Les outils.