详细介绍
mcp-golang 是一个基于 Go 语言的 Model Context Protocol(MCP)实现,旨在简化与 AI 模型的交互过程。该库提供类型安全、异步支持、多协议兼容等特性,支持通过 stdio 和 HTTP 传输方式与 AI 服务进行通信,并内置错误处理机制,帮助开发者专注于业务逻辑的实现。
核心功能
mcp-golang 提供了丰富的功能模块,包括工具调用、提示调用和资源管理,支持客户端与服务端的双向通信。
- 工具调用:支持用户通过定义的工具接口进行功能扩展,使用原生 Go 结构体作为参数,保障数据传递的安全性和类型安全。同时提供程序化生成工具列表端点,客户端可动态获取可用工具信息,并支持分页功能。
- 提示调用:用户可通过预设的提示模板与服务端进行交互,同样使用 Go 结构体作为参数,确保数据的一致性和安全性。支持自动生成提示列表端点,客户端可动态获取可用提示信息,并支持分页功能。
- 资源管理:支持资源的增删改查操作,方便用户管理各类配置和数据。自动生成资源列表端点,客户端能够实时获取最新资源信息,并支持分页功能。
安装方法
mcp-golang 可通过 Go 的模块管理工具进行安装。开发者只需使用 Go 模块管理命令,即可将该库集成到项目中。
go get github.com/metoro-io/mcp-golang安装完成后,开发者需要创建并编辑配置文件 config.json,指定服务监听地址、端口等参数,以完成服务的初始化配置。
使用方法
mcp-golang 提供了客户端和服务端的双向通信能力,开发者可以通过定义处理函数并注册到服务容器中,实现具体的业务逻辑。
工具调用示例
package main
import (
"context"
"log"
mcp "github.com/metoro-io/mcp-golang"
"github.com/metoro-io/mcp-golang/transport/stdio"
)
// 定义工具调用的参数结构体
type CalculateArgs struct {
Operation string `json:"operation"`
A int `json:"a"`
B int `json:"b"`
}
func main() {
// 创建并初始化客户端
transport := stdio.NewStdioServerTransport()
client := mcp.NewClient(transport)
if _, err := client.Initialize(context.Background()); err != nil {
log.Fatalf("Failed to initialize: %v", err)
}
// 调用工具示例
args := CalculateArgs{
Operation: "add",
A: 10,
B: 5,
}
response, err := client.CallTool(context.Background(), "calculate", args)
if err != nil {
log.Fatalf("Failed to call tool: %v", err)
}
if response != nil && len(response.Content) > 0 {
log.Printf("Result: %s", response.Content[0].TextContent.Text)
}
}提示调用示例
package main
import (
"context"
"log"
mcp "github.com/metoro-io/mcp-golang"
"github.com/metoro-io/mcp-golang/transport/stdio"
)
// 定义提示调用的参数结构体
type QueryArgs struct {
Keywords []string `json:"keywords"`
PageSize int `json:"page_size"`
PageNumber int `json:"page_number"`
}
func main() {
transport := stdio.NewStdioServerTransport()
client := mcp.NewClient(transport)
if _, err := client.Initialize(context.Background()); err != nil {
log.Fatalf("Failed to initialize: %v", err)
}
// 调用提示示例
args := QueryArgs{
Keywords: []string{"大数据", "分析"},
PageSize: 10,
PageNumber: 1,
}
response, err := client.CallPrompt(context.Background(), "data_analysis", args)
if err != nil {
log.Fatalf("Failed to call prompt: %v", err)
}
if response != nil && len(response.Content) > 0 {
log.Printf("Result: %s", response.Content[0].TextContent.Text)
}
}使用场景
mcp-golang 可广泛应用于以下场景:
- 与 AI 模型进行交互,如文本生成、数学计算等。
- 集成到桌面工具(如 Claude Desktop)中,实现本地 AI 服务的调用。
- 构建模块化、可扩展的 AI 服务,支持工具调用、提示调用和资源管理。
注意事项
在使用 mcp-golang 时,开发者需要注意以下事项:
- HTTP 传输方式不支持通知功能,建议使用 stdio 以获得完整的功能支持。
- 对于复杂任务,可能需要额外的性能调优。
- 目前仅支持文本和轻量级计算任务。
mcp-golang 通过其简洁的接口和强大的功能,为开发者提供了一个高效、安全的 AI 服务交互平台。