docs-mcp V1 : serveur MCP distant pour La Suite Docs #1

Merged
cedric merged 8 commits from feat/v1 into main 2026-10-11 11:01:12 +00:00
Owner

Implémentation de la V1 décrite dans docs/DESIGN.md (plan : docs/plans/2026-10-11-docs-mcp-v1.md).

Contenu

  • 5 outils : search_documents, list_documents, get_document_tree, read_document (lecture seule), create_document (création seulement, jamais de modification ni suppression).
  • Authentification OAuth 2.1 via FastMCP OIDCProxy devant le fournisseur OIDC (Dex) ; chaque appel à Docs utilise le jeton de l'utilisateur connecté.
  • Recherche plein texte limitée aux documents que l'utilisateur voit au moment de la recherche ; contenu gardé en mémoire uniquement (clé id + updated_at).
  • Configuration par variables d'environnement ; README : installation, nginx, connexion des clients.

Vérifications

  • uv run pytest : 56 tests OK (client Docs simulé avec respx, outils via fastmcp.Client en mémoire, routes OAuth via TestClient).
  • Lancé localement contre le vrai Dex (auth.nimesys.fr) : métadonnées OAuth correctes, POST / → 401.
  • Pas encore testé : parcours complet de connexion avec ce code (validé par le spike 002 avec la même configuration) ; à faire lors de l'intégration au paquet YunoHost.

Revue

Relecture par un sous-agent : 3 corrections retenues (identifiants UUID validés, erreurs internes masquées, titre ignoré dans les blocs de code). Les remarques sur la mémoire partagée de la recherche ne tiennent pas : seuls les documents listés pour l'utilisateur sont fouillés (test test_only_documents_listed_for_the_user_are_searched).

Limite connue

Un document créé porte un titre terminé par .md (Docs reprend le nom du fichier importé, comme l'import depuis l'interface).

Implémentation de la V1 décrite dans `docs/DESIGN.md` (plan : `docs/plans/2026-10-11-docs-mcp-v1.md`). ## Contenu - 5 outils : `search_documents`, `list_documents`, `get_document_tree`, `read_document` (lecture seule), `create_document` (création seulement, jamais de modification ni suppression). - Authentification OAuth 2.1 via FastMCP `OIDCProxy` devant le fournisseur OIDC (Dex) ; chaque appel à Docs utilise le jeton de l'utilisateur connecté. - Recherche plein texte limitée aux documents que l'utilisateur voit au moment de la recherche ; contenu gardé en mémoire uniquement (clé `id` + `updated_at`). - Configuration par variables d'environnement ; README : installation, nginx, connexion des clients. ## Vérifications - `uv run pytest` : 56 tests OK (client Docs simulé avec respx, outils via `fastmcp.Client` en mémoire, routes OAuth via TestClient). - Lancé localement contre le vrai Dex (auth.nimesys.fr) : métadonnées OAuth correctes, `POST /` → 401. - Pas encore testé : parcours complet de connexion avec ce code (validé par le spike 002 avec la même configuration) ; à faire lors de l'intégration au paquet YunoHost. ## Revue Relecture par un sous-agent : 3 corrections retenues (identifiants UUID validés, erreurs internes masquées, titre ignoré dans les blocs de code). Les remarques sur la mémoire partagée de la recherche ne tiennent pas : seuls les documents listés pour l'utilisateur sont fouillés (test `test_only_documents_listed_for_the_user_are_searched`). ## Limite connue Un document créé porte un titre terminé par `.md` (Docs reprend le nom du fichier importé, comme l'import depuis l'interface).
cedric merged commit 4629813e52 into main 2026-10-11 11:01:12 +00:00
cedric deleted branch feat/v1 2026-10-11 11:01:12 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
cedric/docs-mcp!1
No description provided.