MCP golang sdk
目前官方并没有go版本的sdk,我们选择的是https://github.com/mark3labs/mcp-go
,这个项目✨已超过3000。
MCP Server 代码
这里我们构建一个Milvus
助手,让他查询有哪些数据库,具体示例代码如下:
golang
package main
import (
"context"
"errors"
"fmt"
"github.com/milvus-io/milvus-sdk-go/v2/client"
"log"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)
var milvusDb client.Client
func init() {
ctx := context.Background()
config := client.Config{
Address: "localhost:19530",
//DBName: "my_database",
}
var err error
milvusDb, err = client.NewClient(ctx, config)
if err != nil {
log.Fatal("connect err:", err)
}
}
func main() {
// Create MCP server
s := server.NewMCPServer(
"Milvus 🚀",
"1.0.0",
)
// Add tool
tool := mcp.NewTool("list_database",
mcp.WithDescription("Get all database of milvus"))
// Add tool handler
s.AddTool(tool, ListDatabaseHandler)
// Start the stdio server
if err := server.ServeStdio(s); err != nil {
fmt.Printf("Server error: %v\n", err)
}
}
func ListDatabaseHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
databases, err := milvusDb.ListDatabases(ctx)
if err != nil {
return nil, err
}
cts := []mcp.Content{}
for _, database := range databases {
content := mcp.NewTextContent(database.Name)
cts = append(cts, content)
}
return &mcp.CallToolResult{
Content: cts,
}, nil
}
构建完成后使用go build -o mcp_test mian.go
编译出mcp_test
文件,之后就可以测试这个server了。
测试Server
这里我们使用mark3labs
的另外一个项目https://github.com/mark3labs/mcphost
, mcphost
支持本地ollama
模型,我们使用Llama 3.1
这个模型,需要注意的是,模型需要支持tools
调用才行。
配置
ruby
{
"mcpServers": {
"milvus":{
"command": "/Users/jhonroxton/Desktop/code/golang/mcp-server-milvus/mcp_test", //路径替换成你自己的
"args":[]
}
}
}
启动ollama测试
使用命令./mcphost -m ollama:llama3.1:latest
启动项目
可以看到成功连接到了
milvus
,让它以表格形式返回milvus
中有哪些数据库
可以看到调用了
list_database
这个tool
,返回了default
和rag_test
,而这两个和实际的也是对应上的:
总结
本文完整的展示了使用golang
构建一个mcp server
的示例,主要分四步:
- 1.创建一个
server
- 2.向
server
注册tools
- 3.为对应的
tool
添加相应的handler
- 4.启动
server
你也可以根据自身需求做扩展,构建出符合自己需求的server
。mcp
在大型模型应用中展现出巨大的潜力和广阔的发展前景,希望本文能够为您的学习和了解提供有价值的参考。