一个基于 Gin 框架和 mcp-go 的 Model Context Protocol (MCP) 服务器实现。
StreamableHTTPServer 实现 MCP 协议http.ServeMux 挂载,灵活集成到现有路由go mod download
go run main.go
服务将在 http://localhost:8080 启动。
# 代码格式化
make lint
gin-mcp/ ├── main.go # 主程序入口 ├── go.mod # Go 模块定义 ├── go.sum # 依赖校验和 ├── Makefile # 构建脚本 └── README.md # 项目文档
/v1/mcp - MCP 协议端点,处理所有 MCP 请求/health - 健康检查端点,返回服务状态curl http://localhost:8080/health
响应:
{
"status": "ok",
"service": "gin-mcp"
}
项目包含一个示例工具 greet,用于演示如何创建和使用 MCP 工具。
greetname (string, required): 要问候的名字greeting (string): 问候语type MyToolReq struct {
Param1 string `json:"param1" jsonschema_description:"参数1" jsonschema:"required"`
Param2 int `json:"param2" jsonschema_description:"参数2"`
}
type MyToolRsp struct {
Result string `json:"result" jsonschema_description:"结果"`
}
func myToolHandler(ctx context.Context, req mcp.CallToolRequest, args MyToolReq) (MyToolRsp, error) {
// 处理逻辑
return MyToolRsp{Result: "处理结果"}, nil
}
func RegisterMyTool(mcpServer *server.MCPServer) {
tool := mcp.NewTool("my_tool",
mcp.WithDescription("工具描述"),
mcp.WithInputSchema[MyToolReq](),
mcp.WithOutputSchema[MyToolRsp](),
)
mcpServer.AddTool(tool, mcp.NewStructuredToolHandler(myToolHandler))
}
RegisterMyTool(mcpServer)
项目使用以下方式将 MCP 服务集成到 Gin 框架:
// 1. 创建 StreamableHTTPServer
mcpHTTPServer := server.NewStreamableHTTPServer(mcpServer)
// 2. 创建 http.ServeMux 并挂载
mux := http.NewServeMux()
mux.Handle("/v1/mcp", mcpHTTPServer)
// 3. 集成到 Gin 路由
router := gin.Default()
router.POST("/v1/mcp", gin.WrapH(mux))
这种方式的优势:
github.com/gin-gonic/gin - Gin Web 框架github.com/mark3labs/mcp-go - MCP Go 实现make lint
这将运行:
gofmt - Go 代码格式化goimports - 导入语句格式化golangci-lint - 代码检查go build -o gin-mcp main.go
本项目遵循相应的开源许可证。