一文弄懂用Go实现自己的MCP服务
本文介绍了AI领域热门的MCP(模型上下文协议)标准及其Go语言实现。MCP通过"客户端-服务器"架构,使AI能动态访问外部工具和数据源,突破传统静态知识库限制。文章详细演示了如何用Go构建MCP服务端(实现计算器功能)和客户端,并配置VSCode和Cursor IDE插件调用自定义MCP服务。该方案显著提升了AI的交互能力,支持直接调用外部API、访问本地文件等操作,为开发者
写在前面
最近这段时间,AI领域里有一个非常热门的概念——MCP(模型上下文协议) 。Anthropic推出的这一开放标准旨在为大型语言模型和AI助手提供统一的接口,使其能够轻松操作外部工具并完成更复杂的任务。
本文将带你速览MCP的核心概念,并以Go语言为例,介绍如何开发MCP服务端和客户端,并且用cursor和vscode调用自己开发的MCP服务器。
为什么MCP如此重要?
在过去,如果想要让AI处理特定的数据,通常只能依赖于预训练数据或者手动上传数据,这既麻烦又低效。即便对于强大的AI模型而言,也存在数据隔离的问题,无法直接访问新的数据源,每次更新数据都需要重新训练或上传。现在,MCP解决了这个问题,它使得AI不再局限于静态知识库,而是能够像人类一样调用搜索引擎、访问本地文件、连接API服务等,极大提升了AI的动态交互能力。
MCP总体架构
MCP的核心是“客户端-服务器”架构,其中MCP客户端可以连接到多个服务器。客户端是指希望通过MCP访问数据的应用程序,如CLI工具、IDE插件或AI应用。
GO 构建MCP服务端
package main
import (
"context"
"errors"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
"log"
)
func main() {
s := server.NewMCPServer("CalculatorServer", "1.0.0")
// 添加工具
calculatorTool := mcp.NewTool("calculate",
mcp.WithDescription("执行基本的算术运算"),
mcp.WithString("operation",
mcp.Required(),
mcp.Description("要执行的算术运算类型"),
mcp.Enum("multiply", "divide"),
),
mcp.WithNumber("x",
mcp.Required(),
mcp.Description("第一个数字"),
),
mcp.WithNumber("y",
mcp.Required(),
mcp.Description("第二个数字"),
),
)
s.AddTool(calculatorTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
op := request.Params.Arguments["operation"].(string)
x := request.Params.Arguments["x"].(float64)
y := request.Params.Arguments["y"].(float64)
var result float64
switch op {
case "multiply":
result = x * y
case "divide":
if y == 0 {
return nil, errors.New("不允许除以零")
}
result = x / y
}
return mcp.FormatNumberResult(result), nil
})
//sseServer := server.NewSSEServer(s, server.WithBaseURL("http://localhost:8082"))
//log.Printf("SSE server listening on :8082")
//if err := sseServer.Start(":8082"); err != nil {
// log.Fatalf("Server error: %v", err)
//}
// 启动基于 stdio 的服务器
if err := server.ServeStdio(s); err != nil {
log.Printf("Server error: %v\n", err)
}
}
执行go build -o mcp-server main.go
命令,生成服务器端可执行文件
GO 构建MCP客户端
package main
import (
"context"
"fmt"
"os"
"strconv"
"time"
"github.com/mark3labs/mcp-go/client"
"github.com/mark3labs/mcp-go/mcp"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("请提供至少一个参数。")
return
}
// 输出程序名称
// 遍历并输出所有参数
a, _ := strconv.ParseFloat(os.Args[1], 64)
b, _ := strconv.ParseFloat(os.Args[2], 64)
// 这里的路径是上面编译的mcp-server可执行文件
mcpClient, err := client.NewStdioMCPClient("/Users/yourusername/Workspace/go/src/mcp-server/mcp-server", []string{})
if err != nil {
panic(err)
}
defer mcpClient.Close()
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
initRequest := mcp.InitializeRequest{}
initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
initRequest.Params.ClientInfo = mcp.Implementation{
Name: "Client Demo",
Version: "1.0.0",
}
initResult, err := mcpClient.Initialize(ctx, initRequest)
if err != nil {
panic(err)
}
fmt.Printf("初始化成功,服务器信息: %s %s\n", initResult.ServerInfo.Name, initResult.ServerInfo.Version)
// 调用工具
toolRequest := mcp.CallToolRequest{
Request: mcp.Request{
Method: "tools/call",
},
}
toolRequest.Params.Name = "calculate"
toolRequest.Params.Arguments = map[string]any{
"operation": "multiply",
"x": a,
"y": b,
}
result, err := mcpClient.CallTool(ctx, toolRequest)
if err != nil {
panic(err)
}
fmt.Printf("%f * %f = %s\n", a, b, result.Content[0].(mcp.TextContent).Text)
}
运行客户端
go run main.go 4 6
初始化成功,服务器信息: CalculatorServer 1.0.0
4.000000 * 6.000000 = 24.00
vs code调用 GO MCP服务端
vscode 主要是通过cline插件运行MCP服务
- 安装cline插件
- 配置cline插件的MCP服务
增加如下配置
{
"mcpServers": {
"mcp-calculator-server": {
"command": "/Users/yourusername/Workspace/go/src/mcp-server/mcp-server"
}
}
}
配置成功后即可看到如下信息
cursor 调用 GO MCP服务端
- 配置MCP服务器调用
添加如下配置
{
"mcpServers": {
"mcp-calculator-server": {
"command": "/Users/yourusername/Workspace/go/src/mcp-server/mcp-server"
}
}
}
配置成功后,看到如下信息
然后去聊天对话框中问大模型,可以看到它调用了自定义的MCP服务
总结
本文以 Go 语言为例,教你开发 MCP 服务端与客户端,并用 Cursor 和 VSCode 调用。
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为
等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等
一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。
二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
三、LLM大模型系列视频教程
四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)
这份 LLM大模型资料
包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等
😝有需要的小伙伴,可以 下方小卡片领取🆓↓↓↓

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
所有评论(0)