模型上下文协议实现

一个展示如何在.NET 9中实现模型上下文协议(MCP)的演示应用,支持HTTP和StdIO传输,适用于游戏/体育数据管理场景。

  • by LyubomirPetrovski
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 LyubomirPetrovski/SyncEnv-MCP

使用说明

# SyncEnv MCP-模型上下文协议演示。网

全面示范实施 模型上下文协议(MCP) 在。网9。此示例应用程序展示了如何使用HTTP和StdIO传输构建MCP服务器,以游戏/体育数据管理的真实数据同步场景为特色。

🤔 什么是MCP?

模型上下文协议(MCP)是一个开放协议,它规范了应用程序如何向大型语言模型(LLM)提供上下文。这使得Claude、ChatGPT等AI助手能够以标准化的方式与应用程序的数据和工具进行交互。

📚 一般资源

📚 安全漏洞

✨ 特性

此演示应用程序演示:

  • 双重运输支持:HTTP和StdIO(标准输入/输出)MCP服务器实现
  • 自定义MCP工具:用于环境管理和数据同步的即用型工具
  • 依赖关系映射:自动解析实体关系以实现复杂的数据同步
  • 内存数据存储:具有真实体育/比赛数据的示例数据生成器
  • Docker支持:容器化部署就绪
  • 综合测试:包括单元和集成测试

🛠️ 已实施MCP工具

环境工具

  • ListEnvironments -列出所有可用环境(生产环境、本地环境)
  • TestConnection -测试与特定环境的连接
  • GetDatabaseStats -获取环境的数据库统计信息

游戏同步工具

  • FindGames -按球队名称和日期范围搜索比赛
  • PreviewGameSync -预览要同步的数据(模拟运行模式)
  • SyncGame -在环境之间同步特定游戏及其所有依赖关系

📁 溶液结构

SyncEnvMcp/
SyncEnvMcp/
├── SyncEnv.Mcp/                    # Core MCP library
│   ├── Services/                   # Data services and dependency mapping
│   ├── Tools/                      # MCP tool implementations
│   └── Prompts/                    # MCP prompts (future enhancement)
├── SyncEnv.Mcp.Http/               # HTTP transport MCP server
│   ├── Program.cs                  # HTTP server configuration
│   ├── Examples/                   # Example client implementations
│   └── Dockerfile                  # Container configuration
├── SyncEnv.Mcp.StdIo/             # StdIO transport MCP server
│   ├── Program.cs                  # StdIO server configuration
│   └── Dockerfile                  # Container configuration
├── SyncEnv.Mcp.Tests/             # Unit tests
├── SyncEnv.Mcp.Tests.Integration/ # Integration tests
└── MongoDAL/                       # Data models and abstractions

🚀 技术

  • .NET 9 -最新。NET框架与C#13
  • ASP。NET核心 -用于HTTP传输服务器
  • 模型上下文协议。网 -官方MCP SDK。网
  • x单位 -测试框架
  • 码头工人 -集装箱化支持

📦 安装和设置

先决条件

  • .NET 9 SDK
  • Visual Studio 2022或VS代码
  • Docker(可选,用于容器化部署)

运行HTTP服务器

cd SyncEnv.Mcp.Http
dotnet run

服务器将于启动 http://0.0.0.0:5000 MCP端点位于 /mcp.

测试运行状况端点:

curl http://localhost:5000/health

运行StdIO服务器

cd SyncEnv.Mcp.StdIo
dotnet run

这将使用标准输入/输出启动MCP服务器,以便与MCP客户端通信。

使用Docker运行

# Build the HTTP server image
docker build -f SyncEnv.Mcp.Http/Dockerfile -t syncenv-mcp-http .

# Run the container
docker run -p 5000:5000 syncenv-mcp-http

🧪 运行测试

# Run unit tests
dotnet test SyncEnv.Mcp.Tests/SyncEnv.Mcp.Tests.Unit.csproj

# Run integration tests
dotnet test SyncEnv.Mcp.Tests.Integration/SyncEnv.Mcp.Tests.Integration.csproj

# Run all tests
dotnet test

💡 使用示例

示例1:列出可用环境

{
  "method": "tools/call",
  "params": {
    "name": "ListEnvironments",
    "arguments": {}
  }
}

示例2:按团队查找游戏

{
  "method": "tools/call",
  "params": {
    "name": "FindGames",
    "arguments": {
      "teamName": "Manchester",
      "startDate": "2024-01-01",
      "environment": "Production"
    }
  }
}

示例3:预览游戏同步

{
  "method": "tools/call",
  "params": {
    "name": "PreviewGameSync",
    "arguments": {
      "gameId": "game_12345",
      "sourceEnvironment": "Production"
    }
  }
}

示例4:将游戏与依赖项同步

{
  "method": "tools/call",
  "params": {
    "name": "SyncGame",
    "arguments": {
      "gameId": "game_12345",
      "sourceEnvironment": "Production",
      "targetEnvironment": "Local"
    }
  }
}

🔌 连接MCP客户端

克劳德桌面

添加到您的Claude Desktop配置文件中:

对于HTTP服务器:

{
  "mcpServers": {
    "syncenv": {
      "url": "http://localhost:5000/mcp"
    }
  }
}

对于StdIO服务器:

{
  "mcpServers": {
    "syncenv": {
      "command": "dotnet",
      "args": ["run", "--project", "path/to/SyncEnv.Mcp.StdIo"]
    }
  }
}

🎓 关键概念演示

1.MCP工具注册

使用属性和依赖注入注册工具:

[McpServerToolType]
public sealed class EnvironmentTools
{
    [McpServerTool, Description("List all available environments")]
    public static string ListEnvironments() { ... }
}

2.依赖关系映射

自动解析复杂数据同步的实体关系:

public interface IDependencyMapper
{
    Task<DependencyGraph> GetGameDependenciesAsync(string gameId, string environment);
}

3.双重运输支持

相同的工具适用于HTTP和StdIO传输:

// HTTP Transport
builder.Services.AddMcpServer()
    .WithHttpTransport()
    .WithTools<EnvironmentTools>();

// StdIO Transport
builder.Services.AddMcpServer()
    .WithStdioTransport()
    .WithTools<EnvironmentTools>();

🤝 贡献

这是一个示范项目,但请随时:

  • 报告问题或提出改进建议
  • 使用您自己的MCP工具进行分叉和增强
  • 用作您自己的MCP实现的模板

📄 许可证

这是一个示例/演示项目。您可以自由地使用它来学习和构建您自己的MCP实现。

🔮 未来的增强功能

  • []添加MCP提示支持
  • []实施MCP资源
  • []添加身份验证/授权
  • []支持MongoDB而不是内存存储
  • []与ViewModel实时同步
  • []添加更复杂的依赖场景
  • []GraphQL集成示例

📧 联系

作为MCP在中的演示而创建。NET-您可以自由地学习并调整此代码以适应您自己的项目!


备注:这是一个示例应用程序,旨在演示MCP概念。出于学习目的,有意简化内存中的数据存储。在生产场景中,您将与实际数据库集成并实施适当的安全措施。