03-comment-je-travaille/guides/mcp-gouvernance-instances.md

Guide — Gouvernance MCP multi-instances

Ce guide s'adresse à l'administrateur de l'écosystème Telaria (Mathieu) qui émet et révoque les tokens MCP pour chaque instance Claude.


Principe : 1 token par rĂ´le d'instance

Chaque instance Claude de l'écosystème est un client MCP distinct avec un token opaque différent. On ne partage pas de token entre instances : en cas de compromission ou de fin de session d'un rôle, la révocation est ciblée et n'impacte pas les autres.

Les scopes sont différenciés selon l'accès légitime de chaque rôle :

Instance Rôle Scopes recommandés Project
Atlas (tlr-doc) Doc Lead — lecture documentation complète tool:list_docs tool:read_doc tool:search_docs project:telaria-doc telaria-doc
Lead Tech Telaria (telaria-app) Dev — lecture doc + code tool:list_docs tool:read_doc tool:search_docs project:telaria-doc telaria-doc
Lead Tech Adoption (adoption-app) Dev — lecture doc adoption tool:list_docs tool:read_doc tool:search_docs project:adoption adoption
Chef (tlr-blueprint) Pilotage — lecture documentation tool:list_docs tool:read_doc tool:search_docs project:telaria-doc telaria-doc
Démo vitrine (Claude Desktop) Démo publique — lecture seule restreinte tool:search_docs project:telaria-doc telaria-doc

Scope 2D : un client doit avoir à la fois le scope tool:<name> ET le scope project:<slug> pour exécuter un outil. L'absence de l'un ou l'autre bloque avec FORBIDDEN_TOOL ou FORBIDDEN_PROJECT.


Émettre un token pour une nouvelle instance

Le seed crée le tenant, le projet (s'il n'existe pas) et l'ApiClient en BDD, puis affiche le token brut une seule fois.

# Dans telaria-app (qui héberge le bundle MCP)
php bin/console app:mcp:seed \
  --tenant="telaria" \
  --project="telaria-doc" \
  --root="/var/www/telaria/docs" \
  --scopes="tool:list_docs tool:read_doc tool:search_docs project:telaria-doc" \
  --label="atlas-tlr-doc"

Le token affiché est la valeur opaque à reporter dans .mcp.json de l'instance. En BDD, seul son hash SHA-256 est stocké — il est impossible de le retrouver après coup. Le noter immédiatement.

Paramètres :

Paramètre Valeur
--tenant Identifiant du tenant (ex. telaria)
--project Slug du projet MCP (ex. telaria-doc, adoption)
--root Chemin absolu de la racine des documents Markdown sur la machine
--scopes Liste des scopes séparés par des espaces
--label Libellé humain pour l'audit (ex. atlas-tlr-doc, leadtech-telaria)

Reporter le token dans l'instance

Une fois le token émis, le reporter dans le .mcp.json du repo de travail de l'instance (cf. tuto brancher-mcp-claude-code.md) :

{
  "mcpServers": {
    "tlr-mcp": {
      "command": "php",
      "args": ["C:/src/telaria-app/bin/console", "mcp:serve"],
      "env": {
        "MCP_TOKEN": "le-token-opaque-recopié-ici"
      }
    }
  }
}

Le .mcp.json est versionné — mais sans la valeur du token si le repo est public. Dans ce cas, laisser la valeur vide ou en placeholder et documenter la procédure de renseignement manuel dans le README ou CLAUDE.md du repo.


Révoquer un token

Si une instance est compromise, si un rôle change, ou en fin de session longue durée :

# Révoquer par label (ApiClient en BDD)
php bin/console app:mcp:revoke --label="atlas-tlr-doc"

# Ou directement en BDD
UPDATE mcp_api_clients SET revoked = 1 WHERE label = 'atlas-tlr-doc';

Après révocation, le token renvoie TOKEN_REVOKED (-32000) à la prochaine tentative d'appel. Re-seed pour émettre un nouveau token si le rôle continue.


Audit des usages

La table mcp_tool_audit_log trace chaque appel outil :

SELECT label, tool_name, status, error_code, timestamp
FROM mcp_tool_audit_log
JOIN mcp_api_clients ON api_client_id = mcp_api_clients.id
WHERE tenant_id = (SELECT id FROM mcp_tenants WHERE name = 'telaria')
ORDER BY timestamp DESC
LIMIT 50;

Colonnes utiles :

Colonne Description
label Libellé de l'instance qui a appelé
tool_name list_docs, read_doc ou search_docs
status success, refused (scope/rate limit) ou error
error_code AUTH_REQUIRED, FORBIDDEN_TOOL, RATE_LIMIT… (vide si success)
timestamp UTC

Rotation périodique des tokens

Il n'y a pas de rotation automatique en V1. La politique recommandée :

  • Tokens de dev (instances atlas, leadtech, chef) : durĂ©e de vie indĂ©finie, rĂ©vocation manuelle si incident.
  • Token de dĂ©mo (Claude Desktop vitrine) : re-seed avant chaque dĂ©mo publique significative.
  • Token VPS (HTTP Streamable V1.1) : rotation mensuelle recommandĂ©e dès que le transport distant est en production.

Pour aller plus loin

Assistant documentaire

Posez une question sur la documentation. Les réponses citent leurs sources — un clic ouvre le document à gauche.

Loading…
Loading the web debug toolbar…
Attempt #