Skip to content

Politique d'intégration des outils MCP ​

Les outils MCP de NENE2 doivent exposer les fonctionnalités applicatives via des frontières documentées, pas des raccourcis cachés vers la base de données ou le système de fichiers.

Position ​

L'intégration MCP est une couche d'intégration compatible API.

Direction par défaut :

  • Dériver la forme des outils depuis OpenAPI lorsque c'est pratique
  • Commencer par des outils d'inspection en lecture seule
  • Séparer les outils de développement local des outils de production
  • Exiger une autorisation et une politique d'audit explicites avant les outils de mutation
  • Éviter l'accès direct à la base de données depuis les outils MCP par défaut

Sources des outils ​

Sources recommandées pour les définitions d'outils :

  • Opérations OpenAPI d'API JSON publiques
  • Services applicatifs documentés pour les outils internes n'utilisant pas HTTP
  • Commandes de maintenance explicites pour les workflows locaux uniquement

Évitez de créer des comportements MCP-only qui ne peuvent pas être exécutés et vérifiés via les frontières applicatives normales.

Catalogue ​

Le premier catalogue d'outils MCP lisible par machine se trouve dans docs/mcp/tools.json.

Il contient des métadonnées d'outils read-only correspondant aux opérations OpenAPI livrées. Le catalogue est validé par :

bash
docker compose run --rm app composer mcp

composer check inclut cette validation.

Niveaux de sécurité ​

Chaque outil MCP doit être classifié avant implémentation :

  • read : retourne sans modifier l'état applicatif
  • write : modifie l'état applicatif
  • admin : modifie la configuration, les permissions, la rétention de données ou l'état opérationnel
  • destructive : supprime des données ou effectue des opérations irréversibles

Les premiers outils MCP doivent être des outils read.

Les outils write, admin et destructive nécessitent :

  • Comportement d'authentification et autorisation documenté
  • Champs d'audit/journalisation
  • Propagation du request id
  • Comportement de confirmation explicite pour les actions destructives
  • Tests couvrant les échecs et les frontières de permissions

Les frontières de clés API et jetons sont définies dans docs/development/authentication-boundary.md.

Outils de développement local ​

Les outils MCP locaux uniquement aident les agents à inspecter l'application de développement, mais leur portée doit être clairement limitée.

Opérations autorisées pour les outils locaux :

  • Appeler l'API HTTP locale
  • Lire la documentation versionnée
  • Exécuter des commandes de validation sûres documentées

Opérations interdites pour les outils locaux :

  • Lire les secrets .env
  • Contourner l'autorisation applicative d'une manière qui ressemble au comportement de production
  • Modifier la base de données en dehors des commandes de test ou migration documentées
  • Dépendre de la disposition privée du système de fichiers du développeur

Outils de production ​

Les outils MCP de production doivent être conçus comme des fonctionnalités produit, pas des raccourcis de débogage.

Avant d'activer un outil de production, documentez :

  • Propriétaire et objectif
  • Credentials ou portées requis
  • Environnements autorisés
  • Limites de débit ou mesures anti-abus
  • Champs d'audit
  • Chemin de rollback ou réparation pour les mutations échouées

Alignement avec OpenAPI ​

Lorsqu'un outil se mappe à une opération API HTTP :

  • Utiliser le summary et schéma de l'opération OpenAPI comme point de départ
  • Faire correspondre les noms de paramètres au contrat API
  • Conserver le comportement d'erreur Problem Details
  • Inclure le request id dans les logs et métadonnées retournées lorsque c'est utile

Si un outil nécessite une forme qui ne correspond pas à l'API actuelle, mettez d'abord à jour le contrat API ou documentez pourquoi une frontière de service interne est meilleure.

Types de paramètres de chemin ​

Si un paramètre de chemin OpenAPI est de type integer (ex. {year}, {id}), l'inputSchema de l'outil doit refléter ce type :

json
"inputSchema": {
  "type": "object",
  "properties": {
    "year": { "type": "integer" }
  },
  "required": ["year"]
}

Les clients LLM doivent envoyer les paramètres de chemin entiers comme nombres JSON, pas comme chaînes :

json
{"name": "getItemsByYear", "arguments": {"year": 2026}}

Envoyer une chaîne ("2026") sera rejeté par la validation de l'adaptateur si le schéma spécifie "type": "integer".

Non-objectifs ​

  • Fournir des outils de base de données de production directe comme premier milestone MCP.
  • Comportement métier MCP-only contournant les tests HTTP/API.
  • Stocker des credentials MCP dans le dépôt.
  • Exposer des outils destructifs avant que les politiques d'authentification, autorisation et audit existent.

Publié sous licence MIT.