From 976fc964adb048c6670caa7e79d69b0026f1421a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8C=AE=E7=BB=B4?= Date: Mon, 28 Apr 2025 00:01:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ go.mod | 11 +++++++++ main.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 说明.md | 23 ++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 .gitignore create mode 100644 go.mod create mode 100644 main.go create mode 100644 说明.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..81a60ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.idea/ +/go.sum +/main diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d03ed96 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module main + +go 1.24.1 + +require github.com/mark3labs/mcp-go v0.23.1 + +require ( + github.com/google/uuid v1.6.0 // indirect + github.com/spf13/cast v1.7.1 // indirect + github.com/yosida95/uritemplate/v3 v3.0.2 // indirect +) diff --git a/main.go b/main.go new file mode 100644 index 0000000..96a2364 --- /dev/null +++ b/main.go @@ -0,0 +1,70 @@ +package main + +import ( + "context" + "fmt" + + "github.com/mark3labs/mcp-go/mcp" + "github.com/mark3labs/mcp-go/server" +) + +func main() { + fmt.Printf("开始启动...\n") + // 创建新的 MCP 服务器 + s := server.NewMCPServer( + "计算小样", + "1.0.0", + server.WithResourceCapabilities(true, true), + server.WithLogging(), + server.WithRecovery(), + ) + + // 添加计算器工具 + calculatorTool := mcp.NewTool("计算", + mcp.WithDescription("执行基本算术运算"), + mcp.WithString("运行", + mcp.Required(), + mcp.Description("要执行的作(加、减、乘、除)"), + mcp.Enum("加", "减", "乘", "除"), + ), + 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["运算"].(string) + x := request.Params.Arguments["x"].(float64) + y := request.Params.Arguments["y"].(float64) + + var result float64 + switch op { + case "加": + result = x + y + case "减": + result = x - y + case "乘": + result = x * y + case "除": + if y == 0 { + return mcp.NewToolResultError("不能被零除"), nil + } + result = x / y + } + + return mcp.NewToolResultText(fmt.Sprintf("%.2f", result)), nil + }) + + // 启动服务器 + if err := server.ServeStdio(s); err != nil { + fmt.Printf("服务器错误: %v\n", err) + } else { + fmt.Printf("服务器停止!\n") + } +} diff --git a/说明.md b/说明.md new file mode 100644 index 0000000..1b6d108 --- /dev/null +++ b/说明.md @@ -0,0 +1,23 @@ +# 中文版本(MCP-GO Demo) + + +配置文件 + +```json +{ + "mcpServers": { + "calculator": { + "name": "计算小样", + "version": "1.0.0", + "command": "~/Music/go-code/mcp-go-demo/main", + "args": [], + "description": "提供加减乘除运算服务", + "enabled": true, + "autoApprove": [ + "计算" + ] + } + } +} + +``` \ No newline at end of file