# Générer un token Bearer aléatoire
openssl rand -hex 32 | sed 's/^/sk-obsirag-/'
# Exemple: sk-obsirag-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6# Optionnel — si vous voulez authentifier MCP
MCP_AUTH_TOKEN=sk-obsirag-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6Si non défini, MCP est public (accessible sans token).
./start.sh
# Logs:
# API backend: UP sur 8080 (local) ou 8081 (Docker)
# Expo web: UP sur 8081
# MCP HTTP: http://localhost:8081/mcppython 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-..."Le transport actif est SSE avec un endpoint de session dynamique:
- Ouvrir le flux:
GET /mcp/sse - Lire l'événement
endpointqui contient/mcp/messages/?session_id=... - Envoyer les requêtes JSON-RPC en
POSTsur cet endpointmessages
curl -N http://localhost:8081/mcp/sseRéponse initiale attendue (exemple):
event: endpoint
data: /mcp/messages/?session_id=abc123...
curl -X POST "http://localhost:8081/mcp/messages/?session_id=abc123..." \
-H "Authorization: Bearer sk-obsirag-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "test-client", "version": "1.0"}
}
}'Le serveur répond 202 Accepted; la réponse JSON-RPC arrive ensuite sur le flux SSE.
Réponse JSON-RPC attendue sur le flux 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-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-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-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "obsirag_get_system_status"
}
}'Fichier: ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"obsirag": {
"url": "http://localhost:8081/mcp",
"auth": {
"type": "bearer",
"token": "sk-obsirag-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"
}
}
}
}killall "Claude"
open -a ClaudePuis dans le chat Claude, vous pouvez utiliser les outils ObsiRAG comme n'importe quel MCP.
| Problème | Cause | Solution |
|---|---|---|
401 Unauthorized |
Token manquant | Ajouter -H "Authorization: Bearer ..." |
403 Forbidden |
Token invalide | Vérifier que MCP_AUTH_TOKEN en .env correspond |
Connection refused |
Service pas lancé | Exécuter ./start.sh |
initialize timeout (Claude) |
Mauvais format requête | Vérifier protocolVersion: "2024-11-05" |
| Logs MCP non visibles | Logs en arrière-plan | tail -f logs/obsirag.log | grep MCP |
- Initialize: ~50-100ms (vs 5-30s en stdio subprocess)
- Tools: ~200-500ms (backend + réseau)
- Concurrence: Illimitée (FastAPI)