关于 MCP-Go
MCP-Go 是用 Go 实现 MCP 的库,为构建 MCP 客户端和服务端的开发者提供类型安全、模块化的接口。它支持多种传输方式,并采用 Go 的并发机制管理会话。
主要功能
- 01实现 MCP 客户端与服务端
- 02支持 stdio、WebSockets 和 HTTP
- 03基于 goroutine 和 channel 的并发设计
- 04类型安全 API
- 05模块化处理器设计
- 06会话生命周期管理
适用场景
- 01用 Go 构建 MCP 服务端
- 02用 Go 构建 MCP 客户端
- 03在不同传输方式间建立 MCP 会话
MCP 相关
该库实现 MCP 协议 v2025-03-26,包含客户端和服务端组件,可通过 stdio、WebSockets、HTTP 或自定义传输建立会话。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP-Go
什么是 MCP?
MCP(Model Context Protocol)是一种轻量、灵活的协议,旨在实现 AI 模型与应用程序之间的高效通信。它提供了一种标准化方式,让服务能够交换消息、工具和资源,同时保持高性能与可靠性。
关于此软件包
MCP-Go 是 Model Context Protocol 的 Go 实现,提供了用于 AI 通信的稳健框架:
- 客户端-服务端架构:完整实现客户端和服务端组件
- 灵活的传输方式:可通过标准输入/输出、WebSockets 或 HTTP 无缝通信
- 并发设计:从底层开始便基于 Go 的 goroutine 和 channel 构建
- 类型安全的 API:整个代码库都采用强类型,以避免运行时错误
- 模块化组件:采用基于处理器的设计模式,便于扩展和维护
- 会话管理:持久连接,并妥善处理生命周期
用法
常见模式
所有 MCP-Go 实现都遵循类似的模式:
package main
import (
"github.com/OkutaniDaichi0106/mcp-go/mcp"
)
func main() {
server := mcp.NewServer()
// Tool registration
mcp.HandleToolFunc(&mcp.ToolDefinition{
Name: "tool_name",
Description: "Tool description",
InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
}, func(w mcp.ContentsWriter, name string, args map[string]any) {
// Tool implementation
// ...
w.WriteContents(contents)
})
// Resource registration
mcp.HandleResourceFunc(&mcp.ResourceDefinition{
URI: "resource_uri",
MimeType: "resource_mime_type",
Name: "resource_name",
Description: "Resource description",
}, func(w mcp.ContentsWriter, uri string) {
// Resource implementation
// ...
w.WriteContents(contents)
})
// Prompt registration
mcp.HandlePromptFunc(&mcp.PromptDefinition{
Name: "prompt_name",
Description: "Prompt description",
InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
}, func(w mcp.PromptWriter, name string, args map[string]any) {
// Prompt implementation
// ...
w.WriteContents(contents)
})
transport, err := ... // Create transport
// Configure transport and accept -> get session
session, err := server.Accept(transport)
defer session.Close()
// ...
}
package main
import (
"github.com/OkutaniDaichi0106/mcp-go/mcp"
)
func main() {
// Sample registration
mcp.HandleSampleFunc(&mcp.SampleDefinition{
Name: "sample_name",
Description: "Sample description",
}, func(w mcp.ContentsWriter, name string, args map[string]any) {
// Sample implementation
// ...
w.WriteContents(contents)
})
// Root registration
mcp.HandleRoot(&mcp.RootDefinition{
URI: "root_uri",
Name: "Root name",
})
// Create client
client := mcp.NewClient()
transport, err := ... // Create transport
// Configure transport and dial -> get session
session, err := client.Dial(transport)
defer session.Close()
// ...
}
传输选项
MCP-Go 支持多种传输方式,只需进行最少的代码更改:
自定义传输
对于自定义传输,请将 Accept 和 Dial 方法与相应的传输对象配合使用。
// Server
sess, err := server.Accept(t)
// Client
sess, err := client.Dial(t)
标准输入/输出
对于标准输入/输出,请使用 AcceptStdio 和 DialStdio 方法。
// Server
sess, err := server.AcceptStdio()
// Client
sess, err := client.DialStdio("command", "arg1", "arg2")
HTTP
使用 HTTP 时,可以使用 AcceptHTTP 和 DialHTTP 方法。
// Server
http.HandleFunc("/mcp", func(w http.ResponseWriter, r *http.Request) {
sess, err := server.AcceptHTTP(w, r)
})
// Client
sess, err := client.DialHTTP("http://localhost:8080/mcp", nil)
规范合规性
MCP-Go 实现了 Model Context Protocol 规范 v2025-03-26,这是截至此版本发布时最新的协议版本。
安装
go get github.com/OkutaniDaichi0106/mcp-go
文档
如需详细的 API 文档和高级用法示例,请参阅我们的 GoDoc。
许可证
本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。