Que fait go-mcp-server-generator ?
Génère un projet complet de serveur MCP (Model Context Protocol) en Go avec une structure, des dépendances et une implémentation conformes, en utilisant le SDK officiel github.com/modelcontextprotocol/go-sdk.
Ce que fait cette compétence
- Crée l'architecture de projet Go standard (
cmd/server/,internal/,pkg/). - Initialise un module Go (
go mod init) avec les dépendances nécessaires (go-sdk, log, etc.). - Implémente un serveur MCP minimal avec gestion des outils et des ressources.
- Configure le transport standard (stdio ou HTTP) avec une gestion d'erreurs robuste.
- Ajoute un fichier
README.mdde base avec les instructions de lancement.
Pourquoi c'est utile
Le SDK MCP Go officiel est encore récent et sa configuration manuelle peut être source d'erreurs (versions de modules, structure des handlers, gestion des contextes). Cette compétence réduit le temps de démarrage de plusieurs heures à quelques secondes, en générant un code prêt à l'emploi, testé et conforme aux bonnes pratiques.
Plateformes supportées
- Claude Code
- Cursor
- Codex
- Tout agent compatible MCP
Utilisation
# Générer un nouveau serveur MCP dans le dossier courant
github/go-mcp-server-generator
# Ou spécifier un nom de projet
PROJECT_NAME=mon-serveur-mcp github/go-mcp-server-generator
Structure générée
mon-serveur-mcp/
├── cmd/
│ └── server/
│ └── main.go # Point d'entrée du serveur
├── internal/
│ ├── handler/
│ │ └── handler.go # Handlers MCP (outils, ressources)
│ └── server/
│ └── server.go # Configuration et lancement du serveur
├── pkg/
│ └── mcp/
│ └── types.go # Types partagés
├── go.mod
├── go.sum
└── README.md
Exemple d'implémentation (fichier main.go généré)
package main
import (
"context"
"log"
"os"
"github.com/modelcontextprotocol/go-sdk/server"
"github.com/modelcontextprotocol/go-sdk/server/stdio"
)
func main() {
s := server.NewServer()
// Exemple : ajouter un outil simple
s.SetTools([]server.Tool{
{
Name: "echo",
Description: "Renvoie le message passé en paramètre",
InputSchema: map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"message": map[string]interface{}{
"type": "string",
},
},
},
},
})
s.SetToolHandler(func(ctx context.Context, req server.CallToolRequest) (server.CallToolResult, error) {
msg := req.Arguments["message"].(string)
return server.CallToolResult{
Content: []server.Content{
{Text: msg},
},
}, nil
})
log.Fatal(stdio.ListenAndServe(s))
}
Personnalisation
- Modifiez
internal/handler/handler.gopour ajouter vos propres outils et ressources. - Ajustez le transport dans
internal/server/server.go(ex: passer à HTTP avechttp.ListenAndServe). - Mettez à jour
go.modsi vous avez besoin de versions spécifiques du SDK.
Notes
- Le SDK Go MCP est en développement actif ; vérifiez la compatibilité des versions.
- Le transport stdio est recommandé pour l'intégration avec des agents locaux, HTTP pour des déploiements distants.
- Consultez la documentation officielle du SDK Go pour les fonctionnalités avancées.