mcp-go
Go语言实现的MCP协议SDK,让大模型安全访问外部数据源和工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Go语言实现的MCP协议SDK,让大模型安全访问外部数据源和工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的体验:和 AI 聊了半天,结果它对你的项目、你的数据库、你手头的文件一无所知,只能靠你一点点喂给它?这不是 AI 的问题,而是 AI 和外部世界之间缺少一座桥梁。mcp-go 就是那座桥。
mcp-go 是 Model Context Protocol(模型上下文协议)的 Go 语言实现,由 mark3labs 团队开发维护。它让任何 LLM 应用能够以一种安全、标准化的方式,访问外部数据源和工具——就像给 AI 装上了眼睛和手。

图1:mcp-go 项目 Logo
在大模型应用开发的真实场景中,AI 的能力往往受限于它的训练数据。开发者为了让模型"认识"自己的业务数据,常见的做法是把文件内容一股脑塞进 prompt 里——这不仅消耗大量 token,检索效果也难以保证。
更优雅的解决方案是让 AI 在需要时主动查询外部数据。Anthropic 在 2024 年底正式提出 Model Context Protocol 标准,试图解决一个根本问题:如何让任何 LLM 应用和任何数据源/工具之间,用一种统一、安全的方式对话?
mcp-go 正是这个协议在 Go 生态中的完整实现。2025 年 11 月,该项目实现了 MCP 规范版本 2025-11-25,同时保持对 2025-06-18、2025-03-26、2024-11-05 等旧版本的向后兼容,显示出成熟的版本管理能力。
MCP 协议定义了服务器向 LLM 暴露功能的四种标准方式,mcp-go 对每一种都提供了完整支持:
Resources 类似于 GET 接口,用于将数据加载到 AI 的上下文中。你可以将本地文件、API 响应、数据库查询结果、甚至是系统信息,以标准化的 URI 形式暴露给 AI。mcp-go 支持静态资源(固定 URI)和动态资源(URI 模板,支持参数化查询)。
一个典型场景是:将项目 README 文件暴露为 docs://readme 资源,AI 在回答问题时可以直接引用这些实时数据,而无需在 prompt 中硬编码。
Tools 类似于 POST 接口,用于执行代码或产生副作用。通过定义工具,AI 不再只是"能说",而是真正"能做"。开发者可以用 Go 代码定义任意工具函数,将其注册到 MCP 服务器,AI 就能在对话中调用它们。
mcp-go 提供了类型安全的工具定义接口,支持字符串、数字、枚举等参数类型,工具处理器接收标准 context.Context,可以执行任意 Go 逻辑,并通过标准化的 CallToolResult 返回结果。
Prompts 定义了可复用的 LLM 交互模板,让开发者可以预先定义高质量的 prompt 模式,供 AI 在不同场景中调用,提升回答的一致性和专业度。
Sampling 允许 MCP 服务器向 LLM 发起采样请求,支持自定义采样参数和会话管理。这是 MCP 协议中较为高级的特性,mcp-go 在 sampling_client 示例中有完整演示。
mcp-go 选择 Go 语言并非偶然。Go 以编译速度快、并发模型优雅、部署简洁著称,这些特质恰好契合 MCP 服务器作为基础设施组件的定位。
从项目结构来看,代码被清晰地划分为几个核心包:
mcp/:协议定义层,包含资源(resources)、工具(prompts)、错误处理(errors)、Schema 验证等核心数据结构和常量定义。server/:服务器实现层,处理连接管理、协议合规性、消息路由,提供了完整的 MCPServer 核心类型。client/:客户端实现层,包含 stdio 客户端、HTTP 客户端、in-process 客户端等多种接入方式,还包含 OAuth 认证支持。examples/:大量示例代码,覆盖从基础工具定义到复杂 OAuth 认证的完整场景,共 15 个示例子目录。otel/:集成 OpenTelemetry 的可观测性包,支持分布式追踪。tracing/:独立的追踪工具包。项目采用模块化设计,遵循 Go 的 module 规范,依赖管理清晰(go.mod/go.sum),包含完整的 golangci-lint 配置和测试覆盖率收集流程,体现了高质量的工程实践。
mcp-go 支持三种传输协议,覆盖从本地到网络的各类部署场景:
其中,StreamableHTTPServer 是一个标准的 http.Handler,可以无缝挂载到任何支持 net/http 的路由框架上。它还提供了 transport-agnostic 的 Handle(w, r) 接口,能嵌入 fasthttp、fiber 等不走标准库的框架,而无需通过适配器缓冲响应——这对于追求极致性能的 Go 服务来说是重要细节。
安装 mcp-go 只需一行命令:
go get github.com/mark3labs/mcp-go
创建一个能处理工具调用的 MCP 服务器,核心代码不超过 30 行。mcp-go 屏蔽了所有协议细节,开发者只需关注业务逻辑本身。同时,文档提供了 YouTube 视频教程,Discord 社区活跃,pkg.go.dev 页面提供完整的 API 文档。
作为一个处于活跃开发阶段的协议实现库,mcp-go 有几个值得注意的局限:
mcp-go 在 GitHub 上已获得超过 8,700 颗星,836 个 fork,显示出 Go 社区对该协议的强烈兴趣。在 MCP 协议标准逐步成为行业共识的背景下,Go 作为云原生和基础设施领域的主导语言,mcp-go 的出现填补了 Go 生态中 MCP 协议实现的空白。
它让 Go 开发者能够轻松构建 MCP 服务器,使 AI 应用能够安全、可控地访问外部数据源和工具,无需引入 Python 等其他运行时。随着 MCP 协议的生态扩展,mcp-go 有望成为连接 Go 后端服务和 LLM 应用的标配中间件。
对于 AI 应用开发者而言,如果你有一个用 Go 构建的数据服务或工具链,mcp-go 提供了一条低摩擦的路径,让你的服务无缝接入任何支持 MCP 协议的 AI 客户端(如 Claude Desktop、各类 AI IDE 插件等),实现从"喂数据"到"让 AI 主动取数据"的范式转变。