Mes 3 MCP VFG : carte, bus et wizz — ce que l'agent voit vraiment — 2026-06-16
J'ai branché Cursor sur mon fleet perso via trois serveurs MCP hébergés en prod (mcp-docs.vfg.lol, gandalf.vfg.lol). Ce n'est pas un gadget : c'est la façon dont l'agent arrête de deviner le contexte et commence à lire la même carte, le même bus et les mêmes SSOT que moi. Voici ce qui change concrètement, ce qui ne marche pas encore, et comment je compte continuer à l'intégrer.
Pour situer le protocole MCP en général, j'ai trouvé utile How to Use MCP in Cursor: The Missing Manual (2026) — surtout les passages sur la gouvernance (rules Cursor), le « token bloat » (trop d'outils = modèle moins fiable) et le passage chatbot → agent actif. Ma règle workspace vfg-mcp-docs.mdc joue ce rôle de gouvernance pour VFG.
Le problème qu'on résolvait
Avant les MCP, chaque session Cursor repartait de zéro. L'agent grepait STATUS.md dans un repo au hasard, confondait « idée #43 » avec une issue GitHub (alors que c'est IdeaPit), ou inventait des ports. J'avais une dizaine de sources de vérité concurrentes — exactement ce que le modèle « 3 niveaux » du workspace était censé éviter.
Les MCP ne remplacent pas le code local. Ils cadrent où l'agent cherche la vérité avant de coder.
Les trois couches
| Couche | Serveur MCP | Analogie VFG | Effet de bord |
|---|---|---|---|
| Carte + doc | vfg-docs | STATUS, SSOT, handoffs, boot | Aucun |
| État vivant | vfg-feed | Bus EVT, idées, snapshot fleet | Aucun |
| Action | vfg-gate | Wizz OSC, hotfix prod (R3) | Oui — show + deploy |
Ordre obligatoire pour l'agent : docs → feed → local. La phrase que je retiens : « Lis vfg-docs avant grep local ; vfg-feed pour le bus ; vfg-gate seulement pour agir. »
Config Cursor : D:\VFG_PT__\.cursor\mcp.json (3 URLs avec token path secret — ne pas committer ailleurs).
Scénario 1 — Reprendre un chantier (VFG_Hero)
Ce que je dis à Cursor : « Boot VFG_Hero, où en est le quatuor ? »
Ce que l'agent doit faire :
vfg_boot_contextavecproject: "VFG_Hero"— markdown boot (STATUS extrait, session resume, watchlist)- Si besoin de creuser :
vfg_search_docssur un mot-clé (« pre-post-alphatango », « C4b ») - SSOT ports :
vfg_ssot_get{ domain: "services", key: "ports" }
Limite : vfg_search_docs indexe une slice packée des docs git (allowlist), pas le code src/. Max 16 hits, extraits courts. Si hits vides → slice prod périmée → npm run mcp:docs:pack + push VPS.
Scénario 2 — Hotfix depuis une idée IdeaPit (#N)
Ce que je dis : « hotfix idée #43 » ou « idea #43 ».
Ce que l'agent doit faire :
vfg_ideasavec{ id: 43 }sur vfg-feed — en premier, jamaisgh issue- Lire
text,project,tags→ router le bon repo (souventVFJah_Messenger) - Skill
dev-idea-hotfixpour le reste du flux
Piège classique : #43 = numéro IdeaPit SQLite (ou relay_id hub inbox), pas GitHub. Les repos VFG n'ont pas d'issues #43.
Pour le sprint VFJah / #bettermsn : vfg_ideas_queue avec nextOnly: true donne la prochaine tâche INBOX recommandée.
Scénario 3 — Wizz depuis Cursor (AlphaTango)
Ce que je dis : « wizz moi » ou « vérifie VFGate puis wizz ».
Ce que l'agent doit faire :
vfg_gate_health— santé bridge + routevfjah.wizz+ adapters OSCvfg_wizz_notify— publie/matrice/wizz+/matrice/levelupvia VFGate → UDP Chataigne
Limites : cooldown 5 secondes entre wizz ; VFGate et le PC fixe OSC doivent être up. Même chaîne que MSN Didou — Cursor rejoint la boucle show.
Inventaire complet — 21 outils
vfg-docs (5, lecture seule) : vfg_boot_context · vfg_search_docs · vfg_ssot_get · vfg_timeline · vfg_graph_neighbors
vfg-feed (9, lecture seule) : vfg_snapshot · vfg_ideas · vfg_ideas_queue · vfg_acts · vfg_health · vfg_events_recent · vfg_hotfix_catalog · vfg_hotfix_runbook
vfg-gate (7, écriture) : vfg_wizz_notify · vfg_osc_publish · vfg_gate_health · vfg_hotfix_deploy · vfg_hotfix_verify · vfg_hotfix_worktree · vfg_hotfix_worktrees
Doc technique condensée : D:\VFG_PT__\.cursor\MCP-README.md · procédures : VFVFGPT/docs/agentique/PROTOCOLES-VALIDES.md §8–§9.
Limites honnêtes
- Slice doc pas temps réel — le git dirty local n'est pas visible tant qu'on n'a pas repacké et redéployé la slice prod.
- Token bloat — 21 outils, c'est raisonnable ; éviter d'ajouter des MCP génériques en plus sans gouvernance.
- Drift Cursor — le cache descripteurs MCP dans Cursor peut être en retard sur le code (ex. outils hotfix absents jusqu'au Reload MCP après redeploy image).
- Hotfix deploy R3 —
vfg_hotfix_deploysansMCP_HOTFIX_EXEC=1retourne le runbook, n'exécute pas docker sur le VPS.confirmR3: trueobligatoire. - Worktrees hotfix — état en mémoire serveur, perdu au restart conteneur.
- EVT devlog — les MCP ne remplacent pas
swarm-notify.ps1POST-only pour journaliser.
Ce que les MCP ne font pas
- Grep/read sur le code applicatif (
src/, tests, composants) — outils locaux normaux - Publier des EVT sur le bus — reste
swarm-notify.ps1 - Lire Lucien (exclu allowlist, no-touch)
- Traiter le wiki narratif comme SSOT —
STATUS.md>index.live.json> DERNIERE-INFO
Rituals pour continuer
| Moment | Action |
|---|---|
| Début session dev | vfg_boot_context(project) |
| Question doc / STATUS | vfg_search_docs avant grep local |
| Idée #N | vfg_ideas { id: N } |
| Fin chantier | vfg_timeline + vfg_events_recent |
| Après gros merge doc | npm run mcp:docs:pack + deploy slice |
| Vérif MCP | npm run mcp:docs:probe + Reload Cursor |
| Show test | vfg_gate_health → vfg_wizz_notify |
Dépannage rapide
| Symptôme | Action |
|---|---|
| Hits recherche vides | Repack slice + vps-deploy-mcp-docs-push.ps1 |
| Serveur gris | Réseau + GET :4340/stats (indexedFiles ≥ 100) |
| Outils hotfix invisibles | Redeploy fleet MCP + Reload Cursor |
| Wizz silencieux | vfg_gate_health d'abord |
Suite
- Reload MCP Cursor pour exposer les outils hotfix/queue si absents du cache descripteurs
- Refresh slice doc hebdo après gros merges :
npm run mcp:docs:pack+ deploy VPS