使用golang快速构建你的MCP Server

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,返回了defaultrag_test,而这两个和实际的也是对应上的:

总结

本文完整的展示了使用golang构建一个mcp server的示例,主要分四步:

  • 1.创建一个server
  • 2.向server注册tools
  • 3.为对应的tool添加相应的handler
  • 4.启动server

你也可以根据自身需求做扩展,构建出符合自己需求的servermcp在大型模型应用中展现出巨大的潜力和广阔的发展前景,希望本文能够为您的学习和了解提供有价值的参考。

相关推荐
1点东西2 天前
做了近两年的Agent开发,其实真正要学的就是这五件事
llm·agent·ai编程
程序猿编码2 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
小林ixn2 天前
从 LangChain 到 LangGraph:用「网状工作流」解锁多 Agent 协作的正确姿势
langchain·llm·agent
武子康2 天前
自己做一个 Mini Reviewer:让 AI 审到本次准备提交的代码
人工智能·llm·agent
武子康2 天前
GPU Pod 已经 Running,为什么扩容还没变成推理容量?
人工智能·llm·agent
为美好的生活献上中指2 天前
《Spring AI MCP 实战全景:AI 股票大师如何用模型上下文协议接入金融数据宇宙——从 JSON-RPC 握手到企业级部署与安全加固》
serverless·mcp·模型上下文协议·promptinjection·toolpoisoning·mcp生态
BlackStar_L2 天前
第二章 上下文工程
大模型·llm·agent
吴佳浩2 天前
Tool 的安全性与执行沙箱:从 Docker 到 gVisor 的防御架构
agent·ai编程·mcp
Together_CZ2 天前
DeepSeek-V4.1-Flash:Pushing the Limits of KV Cache Compression——推动 KV 缓存压缩的极限
缓存·llm·compression·kv cache·deepseek·v4.1-flash·推动 kv 缓存压缩的极限
桃西西呀3 天前
你拍的一堆硬币,手机怎么一眼数出有几枚?聊聊边缘、轮廓和模板匹配
人工智能·llm·图像识别