MCP协议服务器

一个基于.NET Web API的MCP协议服务器,提供Chuck Norris笑话和天气预报功能,支持通过聊天界面交互。

  • by azimjooon
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 adheeeem/HelloMCP

使用说明

HelloMCP - 模型上下文协议服务器

本项目展示了如何创建一个.NET Web API,该API同时作为MCP(模型上下文协议)服务器,使用SSE(服务器发送事件)传输方式,使您能够通过聊天界面与API进行交互。

特点/特性

查克·诺里斯笑话API

  • 获取随机的查克·诺里斯笑话
  • 按类别获取笑话
  • 按文本搜索笑话
  • 列出可用类别

天气预报API

  • 获取多天天气预报
  • 获取今天的天气
  • 获取天气概要

可用的MCP工具

查克·诺里斯工具(或“查克·诺里斯专属工具”,根据语境可灵活翻译)

  1. GetRandomChuckNorrisJokeAsync - 获取一个随机的查克·诺里斯笑话
  2. GetChuckNorrisJokeByCategoryAsync - 从特定类别中获取一个笑话(需要类别参数)
  3. GetChuckNorrisCategoriesAsync - 列出所有可用的笑话类别
  4. SearchChuckNorrisJokesAsync - 通过文本内容搜索笑话(需要查询参数)

天气工具

  1. GetWeatherForecastAsync - 获取1至14天的天气预报(可选天数参数,默认5天)
  2. GetTodaysWeatherAsync - 获取今天的实时天气
  3. GetWeatherSummaryAsync - 获取包含建议的3天天气概要

运行MCP服务器

快速入门

  1. 启动MCP服务器:

    cd HelloMCP
    dotnet run
    

    服务器将在 http://localhost:5281

  2. 验证SSE端点是否正常工作:

    curl -i http://localhost:5281/mcp/sse
    

    你应该看到:

    HTTP/1.1 200 OK
    Content-Type: text/event-stream
    ...
    event: endpoint
    data: /mcp/message?sessionId=<session-id>
    

与基于Web的MCP聊天系统配合使用

要使用此MCP服务器与基于网页的MCP聊天客户端(位于https://daodao97.github.io/chatmcp/)进行连接:

  1. 启动服务器:

    cd HelloMCP
    dotnet run
    
  2. 打开MCP聊天网页界面: 在您的浏览器中打开 https://daodao97.github.io/chatmcp/

  3. 配置MCP服务器:

    • 点击设置/配置图标
    • 添加一个具有以下设置的新MCP服务器:
      • 姓名: 你好,MCP(这里MCP可能指某个特定的人、组织或项目,具体含义需根据上下文确定)
      • 运输方式: 上海证券交易所
      • 网址: http://localhost:5281/mcp/sse
      • 描述: 查克·诺里斯笑话和天气预报
  4. 连接并开始聊天:

    • 选择HelloMCP服务器
    • 开始提问,比如:
      • “给我讲个关于查克·诺里斯的笑话”
      • “来个关于编程的笑话”
      • “有哪些类型的笑话可供选择?”
      • “搜索关于电脑的笑话”
      • “今天天气怎么样?”
      • “给我一份7天的天气预报”

配置文件

这个(或“该”) mcp-config.json 文件包含服务器配置:

{
  "mcpServers": {
    "hellomcp": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:5281/mcp/sse"
      },
      "description": "HelloMCP server with Chuck Norris jokes and weather forecasts"
    }
  }
}

测试工具

一旦连接成功,您就可以使用自然语言与工具进行交互:

查克·诺里斯的例子:

  • “给我讲一个随机的查克·诺里斯笑话”
  • “来一个关于查克·诺里斯和计算机的笑话”
  • “显示所有笑话类别”
  • “搜索包含‘网络’的笑话”

天气示例:

  • “今天的天气怎么样?”
  • “给我一份10天的天气预报”
  • “接下来几天的天气概况是什么?”

项目结构

HelloMCP/
├── Controllers/
│   ├── JokesController.cs          # Chuck Norris jokes REST API
│   └── WeatherForecastController.cs # Weather forecast REST API
├── Services/
│   ├── Interfaces/
│   │   ├── IChuckNorrisService.cs  # Chuck Norris service interface
│   │   └── IWeatherService.cs      # Weather service interface
│   ├── ChuckNorrisService.cs       # Chuck Norris API integration
│   └── WeatherService.cs           # Weather forecast service
├── Tools/
│   ├── ChuckNorrisMcpTools.cs      # MCP tools for Chuck Norris jokes
│   └── WeatherMcpTools.cs          # MCP tools for weather
├── Models/
│   └── ChuckNorrisJoke.cs          # Data models
└── Program.cs                      # Application startup with MCP configuration

API终端点

查克·诺里斯笑话

  • GET /jokes/random - 获取一个随机笑话
  • GET /jokes/categories - 获取所有类别
  • GET /jokes/category/{category} - 按类别获取笑话
  • GET /jokes/search?query={query} - 搜索笑话

天气

  • GET /weatherforecast?days={days} - 获取天气预报
  • GET /weatherforecast/today - 获取今天的天气

依赖项

  • 模型上下文协议 (v0.4.0-preview.2) - MCP服务器功能
  • Microsoft.AspNetCore.OpenApi 翻译为中文是“Microsoft.AspNetCore(ASP.NET Core)的OpenApi(开放API)组件” API文档

配置

MCP服务器已配置在 Program.cs:

builder.Services.AddMcpServer()
    .WithStdioServerTransport()
    .WithToolsFromAssembly();

这会自动发现并注册所有类到 [McpTool] 将属性作为聊天交互的可用工具。

示例聊天互动

用户: “给我讲个编程笑话” 助手: 用途 get_chuck_norris_joke_by_category 带有“开发(dev)”类别

用户: “这周天气会怎么样?” 助手: 用途 get_weather_forecast (期限)7天

用户: “找一些关于电脑的笑话” 助手: 用途 search_chuck_norris_jokes 使用“计算机”进行查询

MCP工具提供丰富、格式化的回复,包含表情符号和有用信息,使聊天互动既有趣又富有信息量。