🌐
Agents IA (MCP)·Intermédiaire·8 min

Connecter un MCP server hébergé à votre workspace

Découvrez comment utiliser l'endpoint de contrôle du MCP server hébergé Coffrify pour vérifier la disponibilité, récupérer les URL de transport et initialiser une session JSON-RPC depuis votre application.

Télécharger en PDF

Coffrify héberge un MCP server public accessible à l'adresse mcp.coffrify.com. L'endpoint de contrôle /api/v1/mcp/hosted/{workspaceId} est la surface authentifiée qui permet à votre application, à votre agent IA ou au routeur hébergé de vérifier la disponibilité du server, d'obtenir les URL de transport (streamable-http et sse), de récupérer le catalogue des outils disponibles et d'initialiser une session JSON-RPC conforme à la spécification MCP 2024-11-05. Toutes les réponses incluent l'en-tête X-Coffrify-MCP-Hosted: control-v1 pour distinguer ce plan de contrôle du trafic MCP proprement dit.

GET/v1/mcp/hosted/{workspaceId}Retourne l'état de disponibilité du MCP server hébergé, les URL de transport (streamable-http et SSE), le catalogue (nombre d'outils et de familles) et les scopes du token authentifié.POST/v1/mcp/hosted/{workspaceId}Accepte des messages JSON-RPC 2.0. Méthodes supportées : initialize (handshake MCP), tools/list (catalogue complet) et ping. Tout autre body retourne le payload de contrôle standard.

Authentification

L'endpoint exige un Bearer token dans l'en-tête Authorization. Trois familles de clés sont acceptées : les clés API complètes (cof_live_… / cof_test_… / cof_sandbox_…), les clés restreintes (cof_rk_live_…) et les MCP tokens (cof_mcp_live_… / cof_mcp_test_… / cof_mcp_sandbox_…). Pour un usage en production depuis un agent ou un client MCP, nous recommandons de provisionner un MCP token dédié via POST /v1/mcp/tokens : le token est lié à un client_hint (claude-desktop, claude, cursor, cline, continue ou custom), limitable en IP et en nombre d'utilisations. Le handler vérifie ensuite que le workspace_id encodé dans l'URL correspond au workspace du token : un token appartenant au workspace ws_A ne peut pas interroger l'endpoint du workspace ws_B (erreur 403 forbidden). Aucun scope spécifique n'est requis par cet endpoint de contrôle : le scope * accordé par une session dashboard ou un token large-scope est suffisant.

Paramètre de chemin

ParamètreTypeRequisDescription
workspaceIdstring (UUID)OuiIdentifiant UUID du workspace Coffrify. Doit correspondre au workspace du token Bearer présenté.

Corps de la requête (POST)

En POST, le corps est un objet JSON-RPC 2.0. Le champ method détermine le comportement du server. Si le corps est absent ou si method ne correspond à aucune méthode reconnue, le payload de contrôle standard est renvoyé.

ChampTypeRequisDescription
jsonrpcstringNonVersion JSON-RPC. Valeur attendue : "2.0".
idstring | number | nullNonIdentifiant de la requête JSON-RPC. Renvoyé tel quel dans la réponse.
methodstringNonMéthode à invoquer : initialize, tools/list ou ping. Toute autre valeur déclenche la réponse de contrôle par défaut.
paramsobjectNonParamètres optionnels spécifiques à la méthode. Non utilisés par cet endpoint pour l'instant.
# GET - vérifier l'état du MCP server hébergé
curl -s https://api.coffrify.com/v1/mcp/hosted/YOUR_WORKSPACE_ID \
-H "Authorization: Bearer cof_mcp_live_..."
 
# POST - handshake initialize JSON-RPC
curl -s -X POST https://api.coffrify.com/v1/mcp/hosted/YOUR_WORKSPACE_ID \
-H "Authorization: Bearer cof_mcp_live_..." \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'

Réponse (GET)

Le GET retourne un objet mcp_hosted_endpoint décrivant l'état du server hébergé pour votre workspace, les URL de transport et le catalogue d'outils.

{
"object": "mcp_hosted_endpoint",
"status": "available",
"workspace_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport": "streamable-http",
"spec_version": "2024-11-05",
"endpoints": {
"streamable_http": "https://mcp.coffrify.com/u/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sse": "https://mcp.coffrify.com/sse",
"local_fallback": "npx @coffrify/mcp"
},
"catalog": {
"tools": 207,
"families": 38,
"disabled_by_default": 0
},
"authenticated_as": "cof_mcp_live_a1b2c3d4...",
"scopes": ["transfers:read", "transfers:write", "webhooks:read"]
}

Réponse (POST initialize)

Le POST avec method: "initialize" retourne une réponse JSON-RPC 2.0 conforme à la spec MCP 2024-11-05, incluant les capacités du server et le payload de contrôle Coffrify dans le champ coffrify.

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"serverInfo": {
"name": "coffrify-hosted",
"version": "1.0.0"
},
"capabilities": {
"tools": {},
"resources": {},
"prompts": {}
},
"coffrify": {
"object": "mcp_hosted_endpoint",
"status": "available",
"workspace_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport": "streamable-http",
"spec_version": "2024-11-05",
"endpoints": {
"streamable_http": "https://mcp.coffrify.com/u/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sse": "https://mcp.coffrify.com/sse",
"local_fallback": "npx @coffrify/mcp"
},
"catalog": {
"tools": 207,
"families": 38,
"disabled_by_default": 0
},
"authenticated_as": "cof_mcp_live_a1b2c3d4...",
"scopes": ["transfers:read", "transfers:write"]
}
}
}

Réponse (POST tools/list)

Le POST avec method: "tools/list" retourne le catalogue complet des 207 outils MCP Coffrify. Chaque outil inclut son name, sa description et un inputSchema JSON Schema. Cette réponse est destinée aux clients MCP qui souhaitent découvrir les outils avant d'ouvrir la connexion Streamable HTTP.

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "coffrify_list_transfers",
"description": "Lister tous les transferts du workspace, avec pagination cursor.",
"inputSchema": { "type": "object", "properties": {} }
},
{
"name": "coffrify_create_transfer",
"description": "Créer un nouveau transfert (presigned upload URLs).",
"inputSchema": { "type": "object", "properties": {} }
}
]
}
}

Erreurs

Code HTTPErreurQuandRésolution
401missing_api_keyAucun header Authorization fourni et pas de session cookie valide.Ajoutez Authorization: Bearer cof_mcp_live_… à votre requête.
401invalid_api_keyLe token ne correspond à aucune clé active (préfixe invalide ou hash inconnu).Vérifiez que la valeur du token est correcte et correspond bien à cof_live_, cof_test_, cof_sandbox_, cof_rk_* ou cof_mcp_*.
401revoked_api_keyLe token a été révoqué ou est inactif.Créez un nouveau MCP token via POST /v1/mcp/tokens dans le dashboard.
401expired_api_keyLe token a dépassé sa date d'expiration (expires_at).Provisionnez un nouveau token. Un webhook api_key.expired est émis une seule fois à la première détection.
403forbiddenLe workspaceId dans l'URL ne correspond pas au workspace du token.Assurez-vous que le workspaceId passé dans le chemin est bien celui du workspace auquel appartient votre token.
403ip_not_allowedL'IP de l'appelant n'est pas dans la liste blanche allowed_ips du token.Ajoutez votre IP dans la configuration du token ou supprimez la restriction IP.
429rate_limitedLe nombre maximum d'utilisations (max_uses) du token est atteint.Créez un nouveau token ou supprimez la limite max_uses.
500internal_errorErreur interne Supabase ou service indisponible.Consultez le status page via coffrify_get_status_services ou réessayez après quelques secondes.

Voir aussi

Continuer

Autres tutoriels à suivre