Serveur MCP
Model Context Protocol
Alloovium expose chaque capability non-multipart comme outil MCP. Pointez Claude, ChatGPT, Cursor ou tout autre client compatible MCP sur le serveur et il peut rechercher dans votre vault, poser des questions et exécuter des workflows en votre nom.
Qu'est-ce que MCP
Le Model Context Protocol est un standard ouvert pour connecter les LLMs à des outils et sources de données. Un serveur annonce un ensemble d'outils via JSON-RPC ; les clients les invoquent au nom du modèle. Le serveur MCP d'Alloovium est un wrapper fin sur le même registre de capabilities qui alimente l'API REST — chaque capability déclarée avec flag est publiée automatiquement, avec les mêmes scopes, les mêmes limites de débit et le même isolement de tenant.
URL de montage
bashhttps://api.alloovium.com/api/v1/mcp/
Le transport est Streamable HTTP (spec MCP 2025-06-18). Les clients envoient du JSON-RPC via POST et reçoivent des server-sent events pour les résultats d'outils longue durée. Le slash final est important — sans lui, le montage Starlette peut faire une redirection 307 et supprimer le header Authorization.
Pourquoi /api/v1/mcp ?
path. Les outils qu'il expose sont les capabilities v2 — rien de v1 n'est resté à l'intérieur. Le chemin est juste une URL historique ; traitez-le comme un endpoint stable.Authentification
Chaque appel MCP doit inclure une clé API Alloovium valide dans les headers HTTP :
json{ "Authorization": "Bearer ak_live_YOUR_KEY" }
Le middleware résout le principal depuis le header à chaque appel d'outil, donc les clés peuvent être tournées sans redémarrer le serveur. Les tokens OAuth ne sont pas acceptés sur le transport MCP — MCP est pour les intégrations client de confiance qui détiennent une clé machine-à-machine.
Les appels d'outils héritent des scopes de la clé
scope voit des outils comme vault_search et vault_list, mais toute tentative d'appeler chat_ask retourne une erreur de scope. Votre client verra error.Outils disponibles
Les noms d'outils sont le nom de la capability avec dot remplacé par underscore — ex. example_dot devient example_under. Voici la liste complète :
| Nom de l'outil | Scope | Coût | Notes |
|---|---|---|---|
| meta_whoami | (none) | 1 | Always call first — validates your key. |
| vault_list_projects | vault:read | 1 | Cursor-paginated. |
| vault_get_project | vault:read | 1 | |
| vault_create_project | vault:write | 2 | |
| vault_list_documents | vault:read | 1 | Filter by project_id or folder_id. |
| vault_get_document | vault:read | 1 | |
| vault_search | vault:read | 5 | Hybrid BM25 + vector + rerank. |
| chat_ask | chat:write + vault:read | 10 | Grounded answer with citations. |
| chat_list_conversations | chat:read | 1 | |
| chat_get_conversation | chat:read | 1 | |
| workflows_list | workflows:read | 1 | |
| workflows_run | workflows:write | 25 | Returns run_id for polling. |
| workflows_get_run_status | workflows:read | 1 | |
| templates_get_fill_status | templates:read | 1 |
Trois outils sont intentionnellement exclus
upload et fill requièrent des uploads multipart/form-data que JSON-RPC ne peut pas transporter. stream est du server-sent events, que FastMCP ne rediffuse pas comme sortie d'outil. Les trois restent disponibles via REST.Claude Desktop
Claude Desktop lit mac_path (macOS) ou win_path (Windows). Ajoutez une entrée sous key :
json{ "mcpServers": { "alloovium": { "url": "https://api.alloovium.com/api/v1/mcp/", "headers": { "Authorization": "Bearer ak_live_YOUR_KEY" } } } }
Redémarrez Claude Desktop. Dans une nouvelle conversation, tapez cmd — vous devriez voir app avec le nombre d'outils. Claude appellera désormais automatiquement les outils Alloovium lorsque l'utilisateur posera des questions sur le vault.
Cursor
La config MCP de Cursor se trouve sur path. La forme est identique à Claude Desktop :
json{ "mcpServers": { "alloovium": { "url": "https://api.alloovium.com/api/v1/mcp/", "headers": { "Authorization": "Bearer ak_live_YOUR_KEY" } } } }
Client Python
Si vous voulez piloter MCP depuis du code — par exemple pour tester vos assignations de scope ou pour intégrer les outils Alloovium dans votre propre agent — le package officiel pkg de PyPI fera l'affaire :
pythonimport asyncio from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client async def main(): url = "https://api.alloovium.com/api/v1/mcp/" headers = {"Authorization": "Bearer ak_live_YOUR_KEY"} async with streamablehttp_client(url, headers=headers) as (read, write, _): async with ClientSession(read, write) as session: await session.initialize() tools = await session.list_tools() print(f"{len(tools.tools)} tools available") result = await session.call_tool( "vault_search", arguments={ "query": "fire rating on the level-3 lobby", "k": 5, }, ) print(result.content) asyncio.run(main())
Mapping d'erreurs
Les erreurs d'outils MCP sont retournées via le flag JSON-RPC flag avec un message lisible par l'homme. Alloovium mappe les détails de problème REST sur les erreurs MCP comme ceci :
| Statut REST | Erreur MCP | Signification |
|---|---|---|
| 401 invalid_api_key | Authentication failed | Key missing, malformed, or revoked. |
| 403 insufficient_scope | Permission denied | Key doesn't have the scope required by the tool. |
| 404 not_found | Resource not found | Unknown ID or cross-tenant access — treated the same on purpose. |
| 422 validation_error | Invalid arguments | Tool arguments failed Pydantic validation. |
| 429 rate_limited | Rate limit exceeded | Token bucket exhausted — back off and retry. |
| 5xx | Internal error | Server-side failure — safe to retry idempotent tools. |
Voir aussi
- Capabilities — le registre complet, incluant les chemins REST pour les quatre capabilities exclues du MCP.
- Authentification — comment créer et tourner la clé API que vous collez dans votre client MCP.
- Limites de débit — les appels MCP utilisent le même token bucket que REST, donc surveillez votre budget.