本项目使用 Go 语言实现了 MCP 服务器的客户端和服务器端功能,重点在于实现客户端与服务端的双向通信,具备工具调用、提示调用和资源管理等特性。
本项目实现了客户端与服务端的双向通信,下面将详细介绍其核心功能模块。
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)
}
}
package main
import (
"context"
"log"
mcp "github.com/metoro-io/mcp-golang"
"github.com/metoro-io/mcp-golang/transport/stdio"
)
// 此处代码示例原文档未完整给出,可根据实际情况补充完整