如何用golang实现一个MCP Server

什么是MCP?

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

MCP协议的golang Sdk有哪些?

目前官方没有给出对golang的实现,不过你可以在awesome-mcp-servers 项目中找到基于go的SDK,如foxy-contexts 、mcp-go 、mcp-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 或与数据库交互等。 希望这些内容对你有帮助!如果有任何问题请留言告诉我。

相关推荐
泯泷4 小时前
像项目经理一样指挥 AI 团队:管理者模式
人工智能·llm·agent
DigitalOcean8 小时前
Kimi K3.1 Pro 现已上线 DigitalOcean 无服务器推理
llm
泯泷9 小时前
AI 最坑的失败:不是不会做,而是"假装做完了"
人工智能·llm·agent
喵个咪11 小时前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪12 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
跨境Jacky12 小时前
选品数据采集: MCP 比爬虫稳在哪? 实测 46/47
跨境电商·mcp·sorftime
喵个咪12 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
喵个咪12 小时前
GoWind CMS 拆解:搜索三板斧——高亮、联想、同义词
后端·搜索引擎·go
喵个咪12 小时前
GoWind 拆解:AI Agent 编排引擎——波次并行、子图递归与人工审批
人工智能·后端·go
喵个咪12 小时前
GoWind Admin 拆解:打印模板设计器——从画布到服务端 PDF 的完整打印链路
前端·后端·go