Défi 005 : Construire un outil sûr de style MCP¶
Scénario¶
OutdoorGear veut exposer un outil de consultation de statut de commande aux agents via un contrat de style MCP. L'outil actuel divulgue les emails clients, accepte des arguments supplémentaires et possède un schéma incomplet.
Votre tâche consiste à concevoir un contrat local d'outil et un chemin d'exécution sûrs avant d'exposer l'outil à un runtime d'agent.
Objectif¶
Corrigez starter_mcp_tool.py afin que le manifeste de l'outil soit valide, que la validation des arguments soit stricte, que les appels invalides soient bloqués, que les recherches de commandes masquent les PII et que le validateur génère un code de réussite.
Votre outil final doit :
- Définir un manifeste clair de
get_order_statusavec un schéma d'entrée - Accepter uniquement
order_id - Rejeter les outils inconnus et les arguments supplémentaires
- Retourner des données sûres de statut de commande sans
customer_email - Rapporter correctement les métriques de contrat
Fichiers de départ¶
Enregistrez ces fichiers dans un dossier nommé challenge-005/ :
| Fichier | Objectif | Télécharger |
|---|---|---|
orders.json |
Commandes mock OutdoorGear | Télécharger |
tool_requests.json |
Appels d'outil valides et invalides | Télécharger |
starter_mcp_tool.py |
Implémentation cassée d'outil style MCP | Télécharger |
test_mcp_tool.py |
Tests d'acceptation | Télécharger |
validate_mcp_tool.py |
Génère le code final de réussite | Télécharger |
Brief du défi¶
Vous recevez des commandes mock, des appels d'outil valides et invalides, et une implémentation cassée. Il n'y a pas de walkthrough : décidez comment décrire l'outil, valider les arguments, dispatcher l'exécution et masquer les champs sensibles.
Contraintes¶
- Utilisez uniquement la bibliothèque standard Python dans
starter_mcp_tool.py. - N'exposez pas
customer_emaildans les résultats de l'outil. - N'acceptez pas d'arguments supplémentaires.
- N'exécutez pas d'outils inconnus.
- Préservez les noms publics des fonctions utilisés par les tests.
Critères d'acceptation¶
Votre solution est complète lorsque :
python -m pytest test_mcp_tool.pypasse- Le manifeste inclut un
inputSchemavalide - Seul
order_idest accepté en entrée - Les outils inconnus et les arguments supplémentaires avec PII sont bloqués
- Les appels réussis retournent
deliveredetprocessing - Les résultats de l'outil sont masqués
Validation¶
Lorsque votre implémentation est prête, exécutez :
Saisissez le code de réussite imprimé par validate_mcp_tool.py :
Indices¶
Indice 1 — Le schéma est une frontière de sécurité
Un schéma trop souple invite les agents à envoyer des champs que l'outil ne devrait jamais recevoir.
Indice 2 — Le masquage doit être proche de l'outil
Ne comptez pas sur l'agent pour cacher les champs sensibles après leur retour par l'outil.
Indice 3 — Échouez fermé
Les outils inconnus, champs requis manquants et arguments supplémentaires doivent générer une erreur.
Rubrique¶
| Domaine | Points | Ce qui est attendu |
|---|---|---|
| Contrat du manifeste | 25 | Nom, description, schéma et champs requis clairs |
| Validation des arguments | 25 | Les champs manquants et supplémentaires sont rejetés |
| Exécution sûre | 25 | Statut correct de commande avec PII masquées |
| Gestion d'erreurs | 15 | Les appels inconnus ou invalides échouent fermés |
| Simplicité | 10 | Code d'outil petit et déterministe |