如何用golang实现一个MCP Server

什么是MCP?

MCP(Model Communication Protocol)是一种用于大语言模型(LLM)与外部工具进行交互的协议。它允许大语言模型在处理用户请求时,调用外部工具(如计算器、API、数据库等)来完成特定任务。通过 MCP,大语言模型可以扩展其功能,而无需自己实现所有逻辑。MCP 的核心思想是将复杂任务分解为多个工具调用,从而提高模型的灵活性和效率。

MCP协议的golang Sdk有哪些?

目前官方没有给出对golang的实现,不过你可以在awesome-mcp-servers 项目中找到基于go的SDK,如foxy-contextsmcp-gomcp-golang、当前这些库使用的golang版本均比较高,使用的时候需要注意下,目前,MCP 的 Golang 实现主要由 mark3labs/mcp-go 提供。这个库为开发者提供了一套完整的工具,用于创建和管理 MCP Server。它支持工具定义、参数处理、工具调用等功能,并且提供了丰富的配置选项和日志记录功能。

如何使用golang实现一个mcp server?

这里我们实现一个加减乘除的mcp server,让大模型在识别到要计算的任务时,首先使用mcp server来计算。


下面是mcp-go提供的一段示例代码

go 复制代码
package main

import (
	"context"
	"fmt"

	"github.com/mark3labs/mcp-go/mcp"
	"github.com/mark3labs/mcp-go/server"
)

func main() {
	// Create a new MCP server
	s := server.NewMCPServer(
		"Calculator Demo",
		"1.0.0",
		server.WithResourceCapabilities(true, true),
		server.WithLogging(),
	)

	// Add a calculator tool
	calculatorTool := mcp.NewTool("calculate",
		mcp.WithDescription("Perform basic arithmetic operations"),
		mcp.WithString("operation",
			mcp.Required(),
			mcp.Description("The operation to perform (add, subtract, multiply, divide)"),
			mcp.Enum("add", "subtract", "multiply", "divide"),
		),
		mcp.WithNumber("x",
			mcp.Required(),
			mcp.Description("First number"),
		),
		mcp.WithNumber("y",
			mcp.Required(),
			mcp.Description("Second number"),
		),
	)

	// Add the calculator handler
	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 "add":
			result = x + y
		case "subtract":
			result = x - y
		case "multiply":
			result = x * y
		case "divide":
			if y == 0 {
				return mcp.NewToolResultError("Cannot divide by zero"), nil
			}
			result = x / y
		}

		return mcp.NewToolResultText(fmt.Sprintf("%.2f", result)), nil
	})

	// Start the server
	if err := server.ServeStdio(s); err != nil {
		fmt.Printf("Server error: %v\n", err)
	}
}

在实现 MCP Server 后,需要将其配置到客户端插件中。以下是一个在 Windows 系统中配置cline插件的 MCP Server 的示例 JSON 文件:

json 复制代码
{
  "mcpServers": {
    "culculate_server": {
      "command": "C:\\Users\\Administrator\\go\\bin\\calculator.exe",
      "args": [
      ],
      "env": {
        "GOPATH": "C:\\Users\\Administrator\\go",
        "GOMODCACHE": "C:\\Users\\Administrator\\go\\pkg\\mod"
      }
    }
  }
}

配置完成后,你可以通过对话框向大语言模型提问,例如计算 89989 + 4378247 的结果。大语言模型会自动调用 MCP Server 来完成计算任务,并返回结果。


总结

通过上述步骤,我们成功实现了一个简单的 MCP Server,它支持加、减、乘、除等基本运算。你可以根据需要扩展更多功能,例如支持更复杂的数学运算、调用外部 API 或与数据库交互等。 希望这些内容对你有帮助!如果有任何问题请留言告诉我。

相关推荐
AI大模型2 小时前
COZE实战部署(一)—— 扣子任务空间调配和实现
agent·coze·mcp
Piper蛋窝3 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
堆栈future6 小时前
manus终于开放啦
llm·aigc·agent
堆栈future6 小时前
在Mac上10分钟玩转LoRA微调模型
llm·openai·agent
堆栈future7 小时前
学习【北京大学】DeepSeek内部研讨系列: AI Agent与Agentic AI的原理和应用并做分享
llm·agent·deepseek
堆栈future7 小时前
揭秘 Google A2A 协议:赋能智能体协作的未来
llm·agent·mcp
强哥之神7 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
DemonAvenger8 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
Code季风8 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
zhuyasen10 小时前
定义即代码!这个框架解决了90%的Go开发者还在低效开发项目的问题
架构·go·gin