关于 MCP Go SDK
MCP Go SDK 是用 Go 实现的 Model Context Protocol 库,同时提供客户端和服务端能力。适合希望用 Go 构建 MCP 服务或客户端的开发者,项目以 MIT 许可证发布。
主要功能
- 01实现 MCP 基础协议
- 02支持构建客户端与服务端
- 03可将资源、提示词和工具暴露给客户端
- 04支持 stdio 传输方式
适用场景
- 01用 Go 编写 MCP 服务,将本地文件作为资源提供给客户端
- 02开发连接任意 MCP 服务的 Go 客户端
MCP 相关
该 SDK 用于实现 MCP 协议本身,服务端可向 MCP 客户端暴露资源、提示词和工具,客户端可连接任意 MCP 服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
暂未收录安装方式
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Go SDK
Model Context Protocol(MCP)的 Go 实现,为集成大模型界面提供客户端和服务端功能。
概览
Model Context Protocol 允许应用以标准化方式为大模型提供上下文,将提供上下文与实际的大模型交互分离。此 Go SDK 实现了完整的 MCP 规范,让你可以轻松地:
- 构建可连接任何 MCP 服务的 MCP 客户端
- 创建公开资源、提示词和工具的 MCP 服务
- 使用 stdio 和 SSE 等标准传输方式(即将推出)
- 处理所有 MCP 协议消息和生命周期事件
一个简单示例
想了解实际效果吗?下面是一个示例服务,它将 io.FS 的内容作为资源公开。
package main
import (
"context"
"flag"
"io/fs"
"log"
"mime"
"os"
"path/filepath"
"strings"
"github.com/riza-io/mcp-go"
)
type FSServer struct {
fs fs.FS
mcp.UnimplementedServer
}
func (s *FSServer) Initialize(ctx context.Context, req *mcp.Request[mcp.InitializeRequest]) (*mcp.Response[mcp.InitializeResponse], error) {
return mcp.NewResponse(&mcp.InitializeResponse{
ProtocolVersion: req.Params.ProtocolVersion,
Capabilities: mcp.ServerCapabilities{
Resources: &mcp.Resources{},
},
}), nil
}
func (s *FSServer) ListResources(ctx context.Context, req *mcp.Request[mcp.ListResourcesRequest]) (*mcp.Response[mcp.ListResourcesResponse], error) {
var resources []mcp.Resource
fs.WalkDir(s.fs, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
resources = append(resources, mcp.Resource{
URI: "file://" + path,
Name: path,
MimeType: mime.TypeByExtension(filepath.Ext(path)),
})
return nil
})
return mcp.NewResponse(&mcp.ListResourcesResponse{
Resources: resources,
}), nil
}
func (s *FSServer) ReadResource(ctx context.Context, req *mcp.Request[mcp.ReadResourceRequest]) (*mcp.Response[mcp.ReadResourceResponse], error) {
contents, err := fs.ReadFile(s.fs, strings.TrimPrefix(req.Params.URI, "file://"))
if err != nil {
return nil, err
}
return mcp.NewResponse(&mcp.ReadResourceResponse{
Contents: []mcp.ResourceContent{
{
URI: req.Params.URI,
MimeType: mime.TypeByExtension(filepath.Ext(req.Params.URI)),
Text: string(contents), // TODO: base64 encode
},
},
}), nil
}
func main() {
flag.Parse()
root := flag.Arg(0)
if root == "" {
root = "/"
}
server := mcp.NewStdioServer(&FSServer{
fs: os.DirFS(root),
})
if err := server.Listen(context.Background(), os.Stdin, os.Stdout); err != nil {
log.Fatal(err)
}
}
你可以编译此示例,并将其接入 Claude Desktop(或任何其他 MCP 客户端)。
{
"mcpServers": {
"fs": {
"command": "/path/to/mcp-go-fs",
"args": [
"/path/to/root/directory"
]
}
}
}
文档
路线图
基础协议的大部分功能已经实现。以下功能已列入路线图:
- 通知
- 采样
- 根目录
法律声明
依据 MIT license 提供。
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。