MCP Go SDK

MCP Go SDK

使用Go语言构建模型上下文协议(MCP)服务器。

简介

MCP Go SDK 是 Model Context Protocol 的 Go 语言实现,让您能够创建客户端和服务器以标准化方式为 LLM 提供上下文。

GoDoc Build

安装

go get github.com/riza-io/mcp-go

基本用法

创建 MCP 服务器

下面是一个基本示例,创建服务器将文件系统内容作为资源公开:

package main

import (
	"context"
	"fs"
	"log"
	"os"
	
	"github.com/riza-io/mcp-go"
)

// 创建服务器结构体
type FSServer struct {
	fs fs.FS
	mcp.UnimplementedServer
}

// 实现Initialize方法
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
}

// 实现ListResources方法
func (s *FSServer) ListResources(ctx context.Context, req *mcp.Request[mcp.ListResourcesRequest]) (*mcp.Response[mcp.ListResourcesResponse], error) {
	// 这里添加遍历文件系统的代码
	var resources []mcp.Resource
	// ...
	return mcp.NewResponse(&mcp.ListResourcesResponse{
		Resources: resources,
	}), nil
}

// 实现ReadResource方法
func (s *FSServer) ReadResource(ctx context.Context, req *mcp.Request[mcp.ReadResourceRequest]) (*mcp.Response[mcp.ReadResourceResponse], error) {
	// 读取文件内容的代码
	// ...
	return mcp.NewResponse(&mcp.ReadResourceResponse{
		Contents: []mcp.ResourceContent{
			// 填充文件内容
		},
	}), nil
}

func main() {
	// 创建服务器实例
	server := mcp.NewStdioServer(&FSServer{
		fs: os.DirFS("/path/to/files"),
	})

	// 启动服务器
	if err := server.Listen(context.Background(), os.Stdin, os.Stdout); err != nil {
		log.Fatal(err)
	}
}

与 LLM 客户端集成

配置 Claude Desktop 或其他 MCP 客户端以使用您的服务器:

{
	"mcpServers": {
		"fs": {
			"command": "/path/to/your/compiled/server",
			"args": [
				"/path/to/root/directory"
			]
		}
	}
}

主要功能

  • 构建连接到任何 MCP 服务器的客户端
  • 创建暴露资源、提示和工具的 MCP 服务器
  • 使用 stdio 和 SSE 等标准传输(部分功能即将推出)
  • 处理 MCP 协议消息和生命周期事件

更多资源

许可证

MIT 许可证