使用说明
Go中模型上下文协议(MCP)的实现
此存储库包含的Go实现 模型上下文协议(MCP),一种基于JSON-RPC的协议,用于LLM驱动的应用程序中客户端和服务器之间的交互。
目录
mcp/schema.go:MCP模式的Go结构定义,从TypeScript模式翻译而来mcp/client.go:用于与MCP服务器交互的客户端实现examples/mcp_client_example.go:显示如何使用客户端的简单示例
MCP概述
模型上下文协议(MCP)实现了模型“主机”(例如,LLM客户端或与LLM接口的系统)和“服务器”(提供上下文信息、工具、提示或资源以增强LLM功能的系统)之间的通信。
MCP的主要特征包括:
- 资源:主机可以读取的文件、文档和其他数据
- 工具:主机可以代表模型调用的函数
- 鼓励:主机可以使用的模板或预定义的消息序列
- 根:服务器可以操作的文件系统或数据根
入门指南
先决条件
- 转到1.18或更高版本
运行示例
# Set the MCP server URL (optional, defaults to http://localhost:3000/jsonrpc)
export MCP_SERVER_URL=http://your-mcp-server/jsonrpc
# Run the example
go run examples/mcp_client_example.go
使用MCP客户端
import (
"fmt"
"path/to/mcp"
)
func main() {
// Create a new client
client := mcp.NewClient("http://your-mcp-server/jsonrpc")
// Initialize the client
clientInfo := mcp.Implementation{
Name: "My MCP Client",
Version: "1.0.0",
}
capabilities := mcp.ClientCapabilities{
// Specify the capabilities your client supports
}
err := client.Initialize(clientInfo, capabilities)
if err != nil {
// Handle error
}
// Now you can use various client methods:
// List resources
resources, err := client.ListResources("")
// Read a resource
resource, err := client.ReadResource("resource-uri")
// Call a tool
result, err := client.CallTool("tool-name", map[string]interface{}{
"argument1": "value1",
"argument2": 123,
})
// Get a prompt
prompt, err := client.GetPrompt("prompt-name", map[string]string{
"argName": "argValue",
})
}
实现细节
模式
中的Go架构定义 mcp/schema.go 为MCP消息提供类型安全结构。这包括:
- JSON-RPC协议结构
- 资源、提示和工具定义
- 文本、图像和嵌入式资源的内容结构
- 通过以下方式处理多态类型的辅助函数
json.RawMessage
客户端
客户端实现 mcp/client.go 提供了以下方法:
- 正在初始化与MCP服务器的连接
- 发送请求和处理响应
- 将Go结构转换为JSON-RPC消息
- 常见MCP操作的辅助方法
贡献
欢迎投稿!以下是您可以做出贡献的一些方式:
- 实现服务器
- 为客户端添加WebSocket支持
- 改进错误处理
- 添加测试
- 记录其他用例
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。