feat(ai): serveur MCP Streamable HTTP + confirmations two-step (#79 phase E)
CI / lint (push) Successful in 1m3s
CI / security (push) Successful in 41s
CI / test (push) Successful in 1m20s
CI / build (push) Successful in 1m19s
CI / e2e (push) Successful in 10m56s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
CI / lint (push) Successful in 1m3s
CI / security (push) Successful in 41s
CI / test (push) Successful in 1m20s
CI / build (push) Successful in 1m19s
CI / e2e (push) Successful in 10m56s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
This commit is contained in:
@@ -159,14 +159,23 @@ boucle (max N itérations):
|
||||
(les appels d'outils exigent la réponse complète avant exécution). Confirmations UI en deux temps
|
||||
(`confirmation` → `confirm`/`confirm_messages`).
|
||||
|
||||
### 3.4 Couche 4 — Serveur MCP
|
||||
### 3.4 Couche 4 — Serveur MCP (livré, phase E)
|
||||
|
||||
Nouveau `backend/mcp/server.py` basé sur le SDK MCP Python :
|
||||
`backend/mcp/server.py` s'appuie sur le SDK MCP Python (`mcp==1.9.4`) :
|
||||
|
||||
- **Tools** : enregistrés depuis le registry (mutations + recherche).
|
||||
- **Resources** : vaults/fichiers en lecture (`vault://name/path.md`).
|
||||
- **Prompts** : templates (résumer un dossier, générer une note…).
|
||||
- Transports : **stdio** (local) et **HTTP/SSE** (distant, auth JWT).
|
||||
- **Tools** : enregistrés depuis le registry (scope `mcp`). Les outils `read` sont exposés
|
||||
directement ; les outils `write`/`dangerous` le sont via la paire `propose_<tool>` /
|
||||
`apply_<tool>` (jeton signé, usage unique, TTL).
|
||||
- **Resources** : `vault://<name>` (vaults accessibles) et `vault://<name>/<path>` (fichiers,
|
||||
lecture seule, secrets redactés).
|
||||
- **Prompts** : `summarize-directory`, `generate-note`, `find-related`.
|
||||
- Transport : **Streamable HTTP** (`/mcp`, SDK `StreamableHTTPSessionManager` en
|
||||
`json_response=True`), auth `Authorization: Bearer <JWT>` → `get_current_user`. `stdio`
|
||||
optionnel plus tard.
|
||||
- Confirmations (E4) : `backend/mcp/confirmations.py` — jeton JWT (`type=mcp_confirmation`)
|
||||
contenant outil + arguments + utilisateur ; blacklist de JTI persistée pour l'anti-rejeu.
|
||||
- Le manager de session est démarré **paresseusement** à la première requête, pour fonctionner
|
||||
aussi bien sous uvicorn que sous le client de test (sans lifespan ASGI).
|
||||
|
||||
---
|
||||
|
||||
@@ -319,6 +328,8 @@ Voir `docs/ROADMAP.md` (item dédié) pour le détail des activités.
|
||||
- `backend/services/` — logique métier partagée (vaults, files, search, backups, graph, recent) consommée par les routes et les outils
|
||||
- `backend/ai_chat.py` — chat completion provider-agnostique avec tool calling et streaming (OpenAI-compat + Gemini)
|
||||
- `backend/agent/loop.py` — agent loop in-app (multi-étapes, LLM injectable)
|
||||
- `backend/mcp/server.py` — serveur MCP (Streamable HTTP `/mcp`, tools/resources/prompts)
|
||||
- `backend/mcp/confirmations.py` — jetons de confirmation signés (two-step, anti-rejeu)
|
||||
- `backend/bookslm.py`, `backend/bookslm_routes.py` — assistant contextuel (+ endpoint `/agent`)
|
||||
- `frontend/js/ai.js`, `frontend/js/bookslm.js` — UI IA
|
||||
- `backend/auth/middleware.py` — permissions
|
||||
|
||||
Reference in New Issue
Block a user