3 分钟把你的 Gin API 接入 Claude Desktop —— GoMCP 框架实战

AI摘要
GoMCP是一个Go语言开发的MCP Server框架,旨在简化AI应用调用后端服务的开发流程。该框架通过struct tag自动生成JSON Schema和参数校验,支持用少量代码创建MCP工具,并能将现有Gin、OpenAPI或gRPC服务快速转换为AI可调用的接口。其特性包括中间件链、认证授权、工具分组及生产级传输层,为Go开发者提供了高效集成AI能力的解决方案。

背景

MCP(Model Context Protocol)是 Anthropic 发布的开放协议,让 AI 应用(Claude Desktop、Cursor、Kiro)能调用你的服务。简单说,就是给 AI 装上”手”,让它能操作你的系统。

问题是:Go 生态里现有的 MCP 库(mcp-go、官方 go-sdk)都是 SDK 级别的,写一个 Tool 要 30 行样板代码,手动定义 JSON Schema,接入现有项目更是要重写一遍接口层。

所以我们做了 GoMCP —— 一个类似 Gin 风格的 MCP Server 框架。

GitHub: github.com/zhangpanda/gomcp

它能做什么

一句话:让 Go 开发者用最少的代码构建 MCP Server,并能一行代码把现有 Gin/OpenAPI/gRPC 服务接入 AI。

快速体验

场景一:5 行代码写一个 MCP Tool


package main

import (

"fmt"

"github.com/zhangpanda/gomcp"

)

type SearchInput struct {

Query  string  `json:"query" mcp:"required,desc=搜索关键词"`

Limit  int  `json:"limit" mcp:"default=10,min=1,max=100"`

}

type SearchResult struct {

Items []string  `json:"items"`

Total  int  `json:"total"`

}

func  main() {

s := gomcp.New("my-server", "1.0.0")

s.ToolFunc("search", "搜索文档", func(ctx *gomcp.Context, in SearchInput) (SearchResult, error) {

items := []string{fmt.Sprintf("搜索 %q 的结果", in.Query)}

return SearchResult{Items: items, Total: len(items)}, nil

})

s.Stdio()

}

SearchInput 的 struct tag 会自动生成 JSON Schema:


{

"type":  "object",

"properties":  {

"query":  {  "type":  "string",  "description":  "搜索关键词"  },

"limit":  {  "type":  "integer",  "default":  10,  "minimum":  1,  "maximum":  100  }

},

"required":  ["query"]

}

参数校验也是自动的。客户端传了 {"limit": 200} 但没传 query,直接返回:


validation failed: query: required; limit: must be <= 100

不需要手动写 mcp.WithString("name", mcp.Required(), mcp.Description(...)) 这种冗长的代码。

场景二:一行代码把 Gin API 接入 MCP(核心卖点)

这是最实用的场景。你已经有一个 Gin 项目,100 个接口,老板说”让 AI 能调这些接口”。

以前:重写一遍接口层,至少一周。

现在:


ginRouter := setupYourExistingGinApp() // 你已有的 Gin 应用

s := gomcp.New("my-api", "1.0.0")

adapter.ImportGin(s, ginRouter, adapter.ImportOptions{

IncludePaths: []string{"/api/v1/"},

})

s.Stdio()

就这样。 自动转换规则:

Gin 路由 MCP Tool
GET /api/v1/users get_api_v1_users
GET /api/v1/users/:id get_api_v1_users_by_id(id = 必填参数)
POST /api/v1/users post_api_v1_users(body = JSON 参数)
DELETE /api/v1/users/:id delete_api_v1_users_by_id

你原有的 Gin 中间件(认证、日志)照常执行。

场景三:从 Swagger 文档生成 MCP Server

有 OpenAPI 文档?更简单:


s := gomcp.New("petstore", "1.0.0")

adapter.ImportOpenAPI(s, "./swagger.yaml", adapter.OpenAPIOptions{

TagFilter: []string{"pets"},

ServerURL: "https://api.example.com",

})

s.Stdio()

和现有方案对比

mcp-go (8.6k star) 官方 Go SDK (4.4k star) GoMCP
定位 SDK SDK 框架
Schema 生成 手动 jsonschema tag mcp tag + 自动校验
中间件 基础钩子 Logger、Auth、限流、OTel
工具分组 支持
导入 Gin 路由 一行代码
导入 OpenAPI 一行代码
导入 gRPC 支持
内置认证 Bearer / API Key / Basic + RBAC

完整功能列表

框架能力:

  • struct tag 自动 JSON Schema 生成 + 参数校验

  • 中间件链:Logger、Recovery、RequestID、Timeout、RateLimit、OpenTelemetry

  • 认证中间件:BearerAuth、APIKeyAuth、BasicAuth + 角色/权限授权

  • 工具分组(类似 Gin 的 RouterGroup)

  • 组件版本化 + 废弃标记

  • 异步任务(长时间运行的工具)

适配器:

  • Gin 适配器 —— 现有 Gin 路由一键转 MCP 工具

  • OpenAPI 适配器 —— 从 Swagger 文档自动生成

  • gRPC 适配器

生产就绪:

  • stdio + Streamable HTTP 双传输层

  • MCP Inspector 内置调试界面

  • YAML 热加载 Provider

  • mcptest 测试包 + 快照测试

中间件示例


s := gomcp.New("platform", "1.0.0")

// 全局中间件

s.Use(gomcp.Logger())

s.Use(gomcp.Recovery())

s.Use(gomcp.RateLimit(100))

s.Use(gomcp.OpenTelemetry())

// 分组 + 认证

user := s.Group("user", gomcp.BearerAuth(jwtValidator))

user.Tool("get", "获取用户", getUser) // → user.get

user.Tool("update", "更新用户", updateUser) // → user.update

// 管理员分组

admin := user.Group("admin", gomcp.RequireRole("admin"))

admin.Tool("delete", "删除用户", deleteUser) // → user.admin.delete

配合 Claude Desktop 使用

编译后配置 claude_desktop_config.json


{

"mcpServers":  {

"my-server":  {

"command":  "/path/to/your/binary"

}

}

}

重启 Claude Desktop,就能在对话中调用你的工具了。

安装


go  get  github.com/zhangpanda/gomcp

需要 Go 1.25+。

链接

Apache 2.0 开源,欢迎 Star ⭐

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!