模型上下文协议服务器

一个基于.NET 9.0的模型上下文协议(MCP)服务器实现,提供模型驱动系统中组件间通信协议,支持自定义工具和服务集成。

作者 By jamesmontemagno
混合部署 模型驱动系统 组件通信
GitHub

Monkey - 模型上下文协议(MCP)服务器

概述

这是一个使用.NET 9.0构建的模型上下文协议(MCP)服务器实现。MCP服务器提供了一种通信协议,用于促进模型驱动系统中各个组件之间的交互。此实现展示了如何使用自定义工具和服务来设置一个基本的MCP服务器。

试试看

适用于VS Code和VS的快速安装

在VS Code中配置GitHub Copilot、Claude Desktop或其他MCP客户端:

选项1:远程Azure Functions服务器(推荐)

JSON``` 1 2 3 4 5 6 7 8 9{ “servers”: { “monkeymcp”: { “url”: “https://func-monkeymcp-3t4eixuap5dfm.azurewebsites.net/”, “type”: “http” } }, “inputs”: [] }


### 选项2:Docker容器


JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
    "inputs": [],
    "servers": {
        "monkeymcp": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "jamesmontemagno/monkeymcp"
            ],
            "env": {}
        }
    }
}

特点/特性

核心组件

  • MCP 服务器使用 ModelContextProtocol 库(版本 0.1.0-preview.2)构建
  • 标准输入/输出传输使用stdio与客户端进行通信
  • 自定义工具集成包括如何创建和注册MCP工具的示例

服务

  • **MonkeyService(注:根据上下文,这可能是一个特定服务或应用的名称,直接翻译为“猴子服务”可能不够准确,但在此提供直译以供参考。具体含义需结合实际应用场景理解。)**一个从API端点获取猴子数据的示例服务

  • 提供方法以检索所有猴子的列表或通过名称查找特定猴子

  • 缓存结果以提高性能

  • **MonkeyLocationService 翻译为中文是“猴子位置服务”**一项为猴子量身定制独特旅程和活动的服务

  • 根据猴子物种的行为创建随机路径点

  • 产生物种特有行为(梳理毛发、嚎叫、泡温泉等)

  • 提供健康统计数据和活动模式

  • 每次旅程都包括有趣的活动,比如吃香蕉、帮其他猴子清洁,以及探险

可用工具

服务器提供了多个工具,客户端可以调用这些工具:

猴子工具(或译为“猴工具”)

  • **GetMonkeys(这个名称在中文中可能没有直接对应的翻译,但可以根据其含义进行意译,若理解为获取猴子或与猴子相关的某种服务/应用,可译为“获取猴子”或根据具体语境调整)**返回一个包含所有可用猴子的JSON序列化列表
  • **获取猴子(或“蒙面人”,但根据上下文,“GetMonkey”可能是一个特定项目、软件或活动的名称,直译可能不完全准确,具体需结合语境)**通过名称检索特定猴子的信息
  • 获取猴之旅程为特定猴子创建一条包含活动和健康数据的独特旅程路径
  • **获取所有猴子旅程(或:获取所有猴子的行动轨迹)**为所有可用的猴子生成旅行路径

配置选项

托管配置

服务器使用 Microsoft.Extensions.Hosting(版本 9.0.3),它提供了:

  • 从多个来源(JSON、环境变量、命令行)进行配置
  • 服务的依赖注入
  • 日志记录功能

日志记录选项

有多个日志记录提供商可供选择:

  • 控制台日志输出到标准输出
  • 调试用于调试的日志
  • 事件日志(在Windows系统上运行时)记录到系统事件日志
  • **EventSource(事件源)**提供ETW(Windows事件跟踪)集成

入门指南

先决条件

  • .NET 9.0 SDK 或更高版本
  • 对模型上下文协议(MCP)的基本了解

运行服务器

  1. 克隆此仓库
  2. 导航到项目目录
  3. 构建项目: dotnet build
  4. 使用 VS Code 或其他客户端进行配置:

JSON``` 1 2 3 4 5 6 7 8 9”monkeyserver”: { “type”: “stdio”, “command”: “dotnet”, “args”: [ “run”, “—project”, “/Users/jamesmontemagno/GitHub/TestMCP/MonkeyMCP/MonkeyMCP.csproj” ] }


> 更新项目路径


### 扩展服务器


添加自定义工具:


1. 创建一个类并用(某个注解/标记)对其进行标注 `[McpServerToolType]` 属性
2. 添加具有……的方法 `[McpServerTool]` 属性
3. 可选地添加 `[Description]` 提供属性以供文档说明


示例:


CSHARP```
1
2
3
4
5
6[McpServerToolType]
public static class CustomTool
{
    [McpServerTool, Description("Description of what the tool does")]
    public static string ToolMethod(string param) => $"Result: {param}";
}

服务器发送事件实现(MonkeyMCPSSE)

概述

MonkeyMCPSSE 该项目提供了一种使用HTTP上的服务器发送事件(SSE)而非标准I/O传输的Monkey MCP服务器的替代实现。该实现作为一个网络服务器运行,非常适合基于网页的客户端以及需要基于HTTP通信的场景。

阅读更多关于 此处关于安全的SSE最佳实践

特点/功能

  • 基于HTTP的传输运行于 http://localhost:3001 默认情况下
  • 服务器发送事件实现服务器到客户端的实时单向通信
  • ASP.NET Core 集成使用ASP.NET Core的Web服务器功能构建
  • **通过HTTP的MCP(可能是指某种特定协议或服务,如“管理控制协议”等,具体需根据上下文确定)**在HTTP传输层上实现模型上下文协议

运行SSE服务器

  1. 导航至MonkeyMCPSSE目录
  2. 构建并运行项目:
  3. 在VS Code中连接并运行,或使用MCP Inspector npx @modelcontextprotocol/inspector

实施细节

SSE(服务器发送事件)实现利用了ASP.NET Core内置的Web服务器功能,同时保留了与stdio版本相同的猴子数据服务和工具。这使得在不同传输方法之间切换变得容易,同时保持核心功能不变。

项目结构

  • **/猴MCP(注:MCP可能代表某种特定的缩写或术语,根据上下文具体解释,此处保留原样)**主项目目录

  • MonkeyService.cs 翻译为中文可以是“Monkey服务类文件”或“猴子服务组件文件”,具体翻译可能根据上下文和项目命名习惯有所调整。在这里,“MonkeyService”通常指的是一个名为“Monkey”的服务或组件,而“.cs”是C#编程语言的文件扩展名实现获取猴子数据的服务

  • MonkeyTools.cs 翻译为中文是:“猴子工具.cs”(注:在编程或软件开发的上下文中,.cs 通常表示这是一个使用C#语言编写的文件,但在此处的翻译中,我们保留了文件扩展名以保持原样,因此直接翻译为“猴子工具.cs”)。不过,具体翻译可能还需根据上下文或项目背景进行调整,以更准确地传达文件的实际用途或功能用于访问猴子数据的MCP工具

  • **Program.cs(程序文件)**配置并启动MCP服务器的入口点

依赖项

  • Microsoft.Extensions.Hosting(微软扩展托管服务) (9.0.3): 提供托管基础设施
  • 模型上下文协议 (0.1.0-preview.2):MCP服务器实现
  • System.Text.Json (9.0.3): JSON 序列化/反序列化

许可证

这个项目遵循MIT许可证。

MonkeyLocationService 功能特点

MonkeyLocationService 提供丰富的模拟功能:

猴子类型配置

  • 狒狒生活在稀树草原的动物,具有社交梳理行为和根系觅食习性
  • 吼猴以领地嚎叫和食叶为特征的森林居民
  • 日本猕猴喜热泉与雪地嬉戏的山间猴子
  • 长鼻猴红树林专家游泳并展示其独特的鼻子
  • 金丝猴高空杂技演员们挤在一起取暖

旅程组件

  • 路径点显示猴子行进路线的GPS坐标
  • 活动具有能量成本/收益的物种特异性行为
  • 健康数据能量、幸福、饥饿、社交、压力和健康指标
  • 时间跟踪开始/结束时间及活动持续时间
  • 距离计算使用Haversine公式计算的总行程距离

独特活动包括

  • 寻找香蕉并享用
  • 互相梳理(或互相打理)的时间
  • 领地标记
  • 泡温泉(猕猴篇)
  • 游泳(长鼻猴)
  • 杂技表演
  • 社交互动
  • 觅食与探索