Générer un serveur MCP TypeScript
Créer un serveur Model Context Protocol (MCP) complet en TypeScript avec les spécifications suivantes :
Exigences
- Structure du projet : Créer un nouveau projet TypeScript/Node.js avec une structure de répertoires appropriée
- Packages NPM : Inclure @modelcontextprotocol/sdk, zod@3, et soit express (pour HTTP) soit le support stdio
- Configuration TypeScript : Un tsconfig.json approprié avec support des modules ES
- Type de serveur : Choisir entre un serveur basé sur HTTP (avec transport HTTP Streamable) ou stdio
- Outils : Créer au moins un outil utile avec validation de schéma appropriée
- Gestion d'erreurs : Inclure une gestion d'erreurs et une validation complètes
Détails d'implémentation
Configuration du projet
- Initialiser avec
npm initet créer package.json - Installer les dépendances :
@modelcontextprotocol/sdk,zod@3, et les packages spécifiques au transport - Configurer TypeScript avec les modules ES :
"type": "module"dans package.json - Ajouter les dépendances de développement :
tsxouts-nodepour le développement - Créer un fichier .gitignore approprié
Configuration du serveur
- Utiliser la classe
McpServerpour l'implémentation de haut niveau - Définir le nom et la version du serveur
- Choisir le transport approprié (StreamableHTTPServerTransport ou StdioServerTransport)
- Pour HTTP : configurer Express avec les middlewares et la gestion d'erreurs appropriés
- Pour stdio : utiliser StdioServerTransport directement
Implémentation des outils
- Utiliser la méthode
registerTool()avec des noms descriptifs - Définir les schémas en utilisant zod pour la validation des entrées et sorties
- Fournir des champs clairs
titleetdescription - Retourner à la fois
contentetstructuredContentdans les résultats - Implémenter une gestion d'erreurs appropriée avec les blocs try-catch
- Supporter les opérations asynchrones le cas échéant
Configuration des ressources/invites (Optionnel)
- Ajouter des ressources en utilisant
registerResource()avec ResourceTemplate pour les URI dynamiques - Ajouter des invites en utilisant
registerPrompt()avec des schémas d'arguments - Envisager d'ajouter le support de la complétion pour une meilleure expérience utilisateur
Qualité du code
- Utiliser TypeScript pour la sécurité des types
- Suivre les modèles async/await de manière cohérente
- Implémenter un nettoyage approprié lors des événements de fermeture du transport
- Utiliser les variables d'environnement pour la configuration
- Ajouter des commentaires en ligne pour la logique complexe
- Structurer le code avec une séparation claire des responsabilités
Types d'outils à considérer
- Traitement et transformation de données
- Intégrations d'API externes
- Opérations sur le système de fichiers (lire, chercher, analyser)
- Requêtes de base de données
- Analyse de texte ou résumé (avec échantillonnage)
- Récupération d'informations système
Options de configuration
-
Pour les serveurs HTTP :
- Configuration du port via variables d'environnement
- Configuration CORS pour les clients navigateur
- Gestion de session (sans état vs avec état)
- Protection contre le rebinding DNS pour les serveurs locaux
-
Pour les serveurs stdio :
- Gestion appropriée de stdin/stdout
- Configuration basée sur l'environnement
- Gestion du cycle de vie du processus
Conseils de test
- Expliquer comment exécuter le serveur (
npm startounpx tsx server.ts) - Fournir la commande MCP Inspector :
npx @modelcontextprotocol/inspector - Pour les serveurs HTTP, inclure l'URL de connexion :
http://localhost:PORT/mcp - Inclure des exemples d'invocations d'outils
- Ajouter des conseils de dépannage pour les problèmes courants
Fonctionnalités supplémentaires à considérer
- Support de l'échantillonnage pour les outils alimentés par des LLM
- Sollicitation d'entrée utilisateur pour les workflows interactifs
- Enregistrement dynamique des outils avec les capacités d'activation/désactivation
- Débounce des notifications pour les mises à jour en masse
- Liens de ressources pour les références de données efficaces
Générer un serveur MCP complet, prêt pour la production, avec documentation complète, sécurité des types et gestion d'erreurs.