当前位置: 首页 > news >正文

【Golang玩转MCP】-实现一个加减乘除MCP服务

文章目录

    • 概要
    • 1 首先创建一个MCP服务器
    • 2 添加MCP工具
    • 如何测试我们的MCP服务功能是否正常呢
    • 小结

概要

今天我们使用golang简单实现一个加减乘除MCP服务

1 首先创建一个MCP服务器

	s := server.NewMCPServer("Hello World Server","1.0.0",server.WithToolCapabilities(true), #开放工具列表给AI)

2 添加MCP工具

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

calHandler为具体实现方法【这里实现了计算的基础方法】

func calHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {x, err := request.RequireFloat("x")if err != nil {return mcp.NewToolResultError(err.Error()), nil}y, err := request.RequireFloat("y")if err != nil {return mcp.NewToolResultError(err.Error()), nil}operation, err := request.RequireString("operation")if err != nil {return mcp.NewToolResultError(err.Error()), nil}switch operation {case "add":return mcp.NewToolResultText(fmt.Sprintf("%f", x+y)), nilcase "subtract":return mcp.NewToolResultText(fmt.Sprintf("%f", x-y)), nilcase "multiply":return mcp.NewToolResultText(fmt.Sprintf("%f", x*y)), nilcase "divide":if y == 0 {return mcp.NewToolResultError("Cannot divide by zero"), nil}return mcp.NewToolResultText(fmt.Sprintf("%f", x/y)), nildefault:return mcp.NewToolResultError("Unknown operation"), nil}
}

如何测试我们的MCP服务功能是否正常呢

可以使用 MCP Inspector 进行测试

# Install the MCP Inspector
npm install -g @modelcontextprotocol/inspector# Run your server with the inspector
mcp-inspector go run main.go

运行成功之后会弹出一个界面
在这里插入图片描述
我们点击左边的连接就能开始调试我们的MCP服务了

小结

目前MCP-GO官方的文档非常详细了,大家可以参考文档里面进行学习开发。我这里就不做过多的赘述了。看官方文档比任何一些教程都要靠谱
https://mcp-go.dev/

http://www.lryc.cn/news/574203.html

相关文章:

  • 1 Studying《Systems.Performance》7-13
  • 数据赋能(313)——合作共享——跨界融合
  • Modbus TCP转Profibus DP网关与JF - 600MT称重变送器在STEP 7快速配置
  • 计算机操作系统(十六)进程同步
  • DMDRS部署实施手册(ORACLE=》DM)
  • Long类型返回给前端精度丢失问题(解决方案)
  • AWS S3服务器访问日志启用
  • RAG实战基础篇/windows电脑快速部署qwen3:14B
  • Python Arrow 库详解:更智能的日期时间处理
  • 制造业B端页面个性化设计案例:生产流程监控的专属布局打造
  • 探秘 Java 安全利器 ——JVMTI
  • 揭开 Git 裸仓库的神秘面纱:`git clone --mirror` 详解与使用指南
  • idea 报错:java: 非法字符: ‘\ufeff‘
  • Node.js特训专栏-实战进阶:7.Express模板引擎选型与使用
  • 大数据时代UI前端的变革:从静态展示到动态交互
  • 数字孪生:为UI前端设计带来沉浸式交互新体验
  • 【机器学习深度学习】偏置项(Bias)概念
  • 常用终端命令(Linux/macOS/bash 通用)分类速查表
  • Elasticsearch 如果保证读写一致
  • Milvus【工具 01】milvus_cli和可视化工具attu安装使用
  • 【Linux学习笔记】进程间通信之共享内存
  • Three.js 中自定义 UV 坐标贴图详解
  • Ntfs!_LFCB结构如何构建出来的--从Ntfs!NtfsMountVolume到Ntfs!LfsAllocateLfcb
  • CentOS 上安装snmp
  • 如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG
  • AI编程再突破,文心快码发布行业首个多模态、多智能体协同AI IDE
  • 【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
  • SpringCloud系列(33)--使用Hystrix进行通配服务降级
  • 前缀树进阶-经典案例详解
  • Ubuntu20.04安装录屏工具OBS