Vérifier ce qu’un serveur MCP déclare
Une description d’outil n’est pas de la documentation. Le client reçoit les noms et descriptions des outils via
tools/list, avant qu’un outil ne soit appelé, et ils sont intégrés dans le contexte du modèle — donc une description
est exécutable dans le seul sens qui compte : elle peut porter des instructions.
Quand cela s’applique
- ajouter un serveur MCP à un agent et vouloir savoir ce qu’il exposera
- une revue de sécurité demandant quels outils tiers l’agent peut appeler
- un agent se comportant étrangement, où une description d’outil est suspecte
Exécution
pip install "git+https://github.com/sushant-me/mcpaudit"
mcpaudit audit tools.json # sortie 1 si des problèmes sont trouvés, 0 si tout est propre
Installez depuis le dépôt, pas depuis PyPI — le nom mcpaudit sur PyPI est un projet différent et
non lié dont l’interface en ligne de commande n’accepte pas d’argument de fichier.
Obtenez tools.json à partir de ce que le client a reçu : mcp-client --list > tools.json, ou le
fichier de déclaration publié par le fournisseur (c’est le meilleur, car rien n’est exécuté). Le tube fonctionne aussi :
mcp-client --list | mcpaudit audit -
Les onze vérifications
critical — reserved-name-collision : un outil nommé avec un nom que le framework installe en dehors de la
table des outils (set_model_response, google_search, finish), ce qui déplace silencieusement une primitive.
high — instruction-in-declaration, invisible-characters, look-alike-tool-names,
destructive-declared-read-only, duplicate-tool-name.
medium / low — confusable-tool-name, missing-annotations, unconstrained-sink-parameter,
url-in-description, undocumented-tool.
Deux d’entre elles ne peuvent pas être détectées en lisant la déclaration. Le bloc de balises Unicode encode
l’ASCII imprimable en texte de largeur nulle visible, et mcpaudit rapporte ce qu’il décode. Deux
noms qui se normalisent vers le même ASCII (search / ѕearch) contournent une liste autorisée écrite de mémoire.
Triage
Travaillez du haut vers le bas par sévérité. Un résultat critical est un arrêt : résolvez-le, ou faites accepter le risque
par écrit, avant de vous connecter. Un résultat propre est un résultat — un serveur bien comporté produit zéro
problème, ce qui permet à un réviseur de l’approuver rapidement.
Limite
Ceci lit les déclarations, pas le comportement. Il ne peut pas vous dire si l’implémentation d’un serveur est correcte, seulement si ce qu’il annonce est sûr à exposer à un modèle.
Vous voulez la partie application
Fixer l’ensemble d’outils approuvé comme fichier de politique, de sorte qu’un serveur qui modifie silencieusement une description après une revue échoue dans l’intégration continue au lieu de changer silencieusement, est la version payante : MCP Server Security Review, listée sur Agensi. En attendant que cette liste soit active, la référence des règles avec des exemples travaillés est à https://github.com/sushant-me/mcpaudit-mcp-security
Limite
Ceci lit les déclarations, pas le comportement. Il ne peut pas vous dire si l’implémentation d’un serveur est correcte, seulement si ce qu’il annonce est sûr à exposer à un modèle.