ObsiRAG expose un serveur MCP (Model Context Protocol) natif via HTTP SSE sur la route /mcp, intégré directement dans FastAPI. Remplace le transport stdio legacy pour une meilleure stabilité et performance.
Avantages par rapport au stdio:
- ✅ Aucun timeout initialize — réponse < 500ms, pas de subprocess
- ✅ Process persistant — lancé une seule fois avec le backend FastAPI
- ✅ Logs propres — pas de pollution stdout
- ✅ Auth Bearer token — sécurisé, documenté
- ✅ Scalable — support multi-client concurrent
Ajouter dans .env:
MCP_AUTH_TOKEN=sk-obsirag-xxxxxxxxxxxxxSi non défini → MCP accessible sans authentification.
Aucune action supplémentaire : MCP est lancé automatiquement avec ./start.sh.
./start.sh # Démarrage FastAPI + Expo + MCP sur http://localhost:8081http://localhost:8081/mcp
Transport HTTP actif:
GET /mcp/ssepour ouvrir le flux SSEPOST /mcp/messages/?session_id=...pour envoyer les requêtes JSON-RPC
Authorization: Bearer sk-obsirag-xxxxxxxxxxxxx
Content-Type: application/jsonpython scripts/mcp_smoke_test.py --base-url http://localhost:8081
# Avec auth:
python scripts/mcp_smoke_test.py \
--base-url http://localhost:8081 \
--auth-token "sk-obsirag-xxxxxxxxxxxxx"- Ouvrir
GET /mcp/sse - Lire
event: endpointetdata: /mcp/messages/?session_id=... - Poster initialize/tools/list/tools/call sur l'URL
messages
curl -N http://localhost:8081/mcp/sse
# event: endpoint
# data: /mcp/messages/?session_id=abc123...
curl -X POST "http://localhost:8081/mcp/messages/?session_id=abc123..." \
-H "Authorization: Bearer sk-obsirag-xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "claude",
"version": "1.0"
}
}
}'La requête retourne 202 Accepted. La réponse JSON-RPC est envoyée sur le flux SSE ouvert.
Réponse JSON-RPC attendue (sur SSE):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {}
},
"serverInfo": {
"name": "ObsiRAG",
"version": "0.1.0"
}
}
}curl -X POST "http://localhost:8081/mcp/messages/?session_id=abc123..." \
-H "Authorization: Bearer sk-obsirag-xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'curl -X POST "http://localhost:8081/mcp/messages/?session_id=abc123..." \
-H "Authorization: Bearer sk-obsirag-xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "obsirag_get_system_status"
}
}'ObsiRAG MCP expose les outils read-only suivants:
| Outil | Description |
|---|---|
obsirag_get_system_status |
État du runtime (indexation, composants) |
obsirag_search_notes |
Recherche par titre/chemin |
obsirag_search_notes_semantic |
Recherche vectorielle |
obsirag_get_note |
Détail complet d'une note |
obsirag_ask_rag |
Pipeline RAG local |
obsirag_conversation_start |
Démarrer investigation multi-tours |
obsirag_conversation_continue |
Continuer investigation |
obsirag_conversation_finalize |
Clôturer investigation |
obsirag_get_graph_filters |
Options filtres graphe |
obsirag_get_graph_subgraph |
Subgraphes thématiques |
obsirag_get_entity_stats |
Statistiques entités NER |
obsirag_list_folder |
Énumération dossiers |
obsirag_browse_notes_by_date |
Notes par date |
{
"mcpServers": {
"obsirag": {
"url": "http://localhost:8081/mcp",
"auth": {
"type": "bearer",
"token": "sk-obsirag-xxxxxxxxxxxxx"
}
}
}
}Chemin sur macOS:
~/Library/Application\ Support/Claude/claude_desktop_config.json# Voir les logs Claude Desktop
log stream --predicate 'eventMessage contains[cd] "obsirag"' --level debugFastAPI (port 8081)
├─ /api/v1/* (API REST classique)
├─ /mcp/* (MCP Server SSE) ← NOUVEAU
└─ / (Expo web static)
Le serveur MCP est une ASGI app autonome montée sur FastAPI, utilisant le transport FastMCP sse.
- Initialize: < 100ms (mesure réelle, vs 5-30s en stdio subprocess)
- Tool calls: ~200-500ms (réseau + backend)
- Concurrence: Supporte clients multiples simultanés
- Persistance: Pas de reload entre requêtes
Missing Authorization header
Fix: Ajouter -H "Authorization: Bearer sk-obsirag-xxxxxxxxxxxxx"
Invalid token
Fix: Vérifier que MCP_AUTH_TOKEN en .env correspond au token client.
curl: (7) Failed to connect to localhost port 8081: Connection refused
Fix: Vérifier que FastAPI est lancé.
./status.shLes logs MCP sont capturés par la loguru d'ObsiRAG, fichier:
tail -f logs/obsirag.log | grep MCPPour debug détaillé:
LOG_LEVEL=DEBUG ./start.shLe transport stdio historique est conservé pour usages legacy:
# Lancer MCP en stdio (mode classique, déprécié)
python -m src.mcp.serverMais la production utilise HTTP (./start.sh).