关于 monkeymcp
monkeymcp 是一个基于 .NET 9.0 构建的 MCP 服务示例,提供猴子数据查询、行程模拟及位置服务等工具。它适合想学习如何搭建 C# MCP 服务的开发者,并同时支持 stdio 与 SSE 两种传输方式。
主要功能
- 01查询全部猴子及指定猴子的信息
- 02生成猴子的行程路径与活动记录
- 03基于 Haversine 公式计算行程距离
- 04提供 stdio 与 SSE 两种传输实现
- 05通过特性标注快速注册 MCP 工具
适用场景
- 01学习如何使用 .NET 搭建 MCP 服务
- 02在 VS Code 或 Claude Desktop 中测试 MCP 工具调用
- 03作为自定义工具服务的起始模板
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 GetMonkeys、GetMonkey、GetMonkeyJourney 和 GetAllMonkeyJourneys 等工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Monkey - 模型上下文协议(MCP)服务
概述
这是一个使用 .NET 9.0 构建的模型上下文协议(MCP)服务实现。MCP 服务提供一种通信协议,用于促进模型驱动系统中各个组件之间的交互。此实现演示了如何设置一个包含自定义工具和服务的基本 MCP 服务。
立即试用
VS Code 和 VS 快速安装
在 VS Code 中配置 GitHub Copilot、Claude Desktop 或其他 MCP 客户端:
选项 1:Azure Functions 远程服务(推荐)
{
"servers": {
"monkeymcp": {
"url": "https://func-monkeymcp-3t4eixuap5dfm.azurewebsites.net/",
"type": "http"
}
},
"inputs": []
}
选项 2:Docker 容器
{
"inputs": [],
"servers": {
"monkeymcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"jamesmontemagno/monkeymcp"
],
"env": {}
}
}
}
功能
核心组件
- MCP 服务:使用 ModelContextProtocol 库构建(版本 0.1.0-preview.2)
- 标准输入/输出传输:使用 stdio 与客户端通信
- 自定义工具集成:包含创建和注册 MCP 工具的示例
服务
-
MonkeyService:示例服务,从 API 端点获取猴子数据
- 提供获取所有猴子列表或按名称查找特定猴子的方法
- 缓存结果以提升性能
-
MonkeyLocationService:为猴子生成独特旅程和活动的服务
- 根据猴子的物种行为创建随机路径点
- 生成特定物种的活动(梳理毛发、嚎叫、泡温泉等)
- 提供健康统计数据和活动模式
- 每段旅程都包含有趣的活动,例如吃香蕉、为其他猴子清洁和探索
可用工具
服务端提供多个可由客户端调用的工具:
Monkey Tools
- GetMonkeys:返回所有可用猴子的 JSON 序列化列表
- GetMonkey:按名称检索特定猴子的信息
- GetMonkeyJourney:为特定猴子创建包含活动和健康统计数据的独特旅程路线
- GetAllMonkeyJourneys:为所有可用猴子生成旅程路线
配置选项
托管配置
服务器使用 Microsoft.Extensions.Hosting(版本 9.0.3),它提供:
- 来自多个来源(JSON、环境变量、命令行)的配置
- 服务的依赖注入
- 日志记录功能
日志选项
提供多种日志记录提供程序:
- Console:将日志记录到标准输出
- Debug:记录用于调试的日志
- EventLog:将日志记录到系统事件日志(在 Windows 上运行时)
- EventSource:提供 ETW(Windows 事件跟踪)集成
入门
先决条件
- .NET 9.0 SDK 或更高版本
- 对 Model Context Protocol(MCP)的基本了解
运行服务器
- 克隆此代码库
- 导航到项目目录
- 构建项目:
dotnet build - 使用 VS Code 或其他客户端进行配置:
"monkeyserver": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"/Users/jamesmontemagno/GitHub/TestMCP/MonkeyMCP/MonkeyMCP.csproj"
]
}
更新项目路径
扩展服务器
添加自定义工具:
- 创建一个类,并使用
[McpServerToolType]属性标记 - 添加带有
[McpServerTool]属性的方法 - 可选:添加
[Description]属性以提供文档说明
示例:
[McpServerToolType]
public static class CustomTool
{
[McpServerTool, Description("Description of what the tool does")]
public static string ToolMethod(string param) => $"Result: {param}";
}
服务器发送事件实现(MonkeyMCPSSE)
概述
MonkeyMCPSSE 项目提供了 Monkey MCP 服务的另一种实现,它使用基于 HTTP 的服务器发送事件(SSE),而不是 stdio 传输。此实现以 Web 服务的形式运行,非常适合基于 Web 的客户端以及需要基于 HTTP 通信的场景。
在此阅读有关 SSE 安全最佳实践的更多信息
特性
- 基于 HTTP 的传输:默认运行于
http://localhost:3001 - 服务器发送事件:支持从服务器到客户端的实时单向通信
- ASP.NET Core 集成:使用 ASP.NET Core 的 Web 服务功能构建
- 基于 HTTP 的 MCP:通过 HTTP 传输实现 Model Context Protocol
运行 SSE 服务
- 导航到 MonkeyMCPSSE 目录
- 构建并运行项目:
- 在 VS Code 中连接并运行,或使用 MCP Inspector
npx @modelcontextprotocol/inspector
实现详情
SSE 实现使用 ASP.NET Core 内置的 Web 服务功能,同时保留与 stdio 版本相同的猴子数据服务和工具。因此,在保持核心功能不变的同时,可以轻松切换传输方式。
项目结构
- /MonkeyMCP:主项目目录
- MonkeyService.cs:用于获取猴子数据的服务实现
- MonkeyTools.cs:用于访问猴子数据的 MCP 工具
- Program.cs:配置并启动 MCP 服务的入口点
依赖项
- Microsoft.Extensions.Hosting(9.0.3):提供托管基础设施
- ModelContextProtocol(0.1.0-preview.2):MCP 服务实现
- System.Text.Json(9.0.3):JSON 序列化/反序列化
许可证
此项目采用 MIT 许可证。
MonkeyLocationService 特性
MonkeyLocationService 提供丰富的模拟功能:
猴子类型配置
- 狒狒:生活在稀树草原,具有社交梳理行为并会挖掘根茎觅食
- 吼猴:森林居民,以领地嚎叫和吃树叶而闻名
- 日本猕猴:喜欢泡温泉和玩雪的山地猴子
- 长鼻猴:红树林专家,会游泳并会展示其独特的鼻子
- 金丝猴:高海拔杂技高手,会挤在一起取暖
行程组件
- 路径点:显示猴子行进路线的 GPS 坐标
- 活动:具有能量消耗或收益的物种特有行为
- 健康数据:能量、幸福度、饥饿度、社交度、压力和健康指标
- 时间追踪:开始和结束时间,以及活动时长
- 距离计算:使用 Haversine 公式计算行程总距离
独特活动包括
- 寻找和食用香蕉
- 相互梳理毛发
- 标记领地
- 泡温泉(猕猴)
- 游泳(长鼻猴)
- 杂技表演
- 社交互动
- 觅食和探索
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。