天气API服务

一个增强版的天气API服务,通过Model Context Protocol (MCP)服务器功能,将现有的Web API转换为MCP服务器,使AI代理和其他客户端能够通过标准化的MCP协议与天气数据交互。

  • by Geertvdc
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 geertvdc/weather-mcp

使用说明

气象MCP服务器

通过模型上下文协议(MCP)服务器功能增强的天气API示例,演示如何将现有的web API转换为MCP服务器。

项目概述

该项目是将MCP(模型上下文协议)功能集成到现有功能中的一个实例。NET web API。它最初是一个简单的天气预报API,后来被增强为MCP服务器,允许AI代理和其他客户端通过标准化的MCP协议与天气数据交互。

什么是MCP(模型上下文协议)?

模型上下文协议(MCP)是一个开放标准,可实现人工智能应用程序和外部数据源之间的无缝集成。MCP允许AI模型通过标准化的接口安全地连接到各种工具、数据库和服务并与之交互。

MCP的主要优势:

  • 标准化沟通:为AI代理与工具和数据源交互提供一致的方式
  • 安全:确保安全和受控地访问外部资源
  • 灵活性:支持各种传输机制(HTTP、WebSocket等)
  • 工具集成:使AI代理能够调用函数并从外部服务访问数据

将Web API转换为MCP服务器

此项目演示了向现有ASP添加MCP功能所需的最小更改。NET核心web API:

1.包依赖关系

已将MCP服务器包添加到 WeatherMcp.csproj:

<PackageReference Include="ModelContextProtocol.AspNetCore" Version="0.2.0-preview.3" />

2.MCP工具实施

创建 Tools/WeatherTools.cs 采用MCP装饰方法:

  • [McpServerToolType] 类的属性
  • [McpServerTool] 公共方法的属性
  • [Description] 文档属性

3.服务注册

在……里面 Program.cs,添加了MCP服务器服务:

// Add MCP server with HTTP transport
builder.Services.AddMcpServer()
    .WithHttpTransport()
    .WithToolsFromAssembly();

// Map MCP endpoints
app.MapMcp();

4.工具类别

气象工具包裹了现有的气象服务,使其可以通过MCP访问:

  • GetWeatherForecast() -获取默认城市的预测
  • GetWeatherForecastForCity(string city) -获取特定城市的天气预报

运行应用程序

先决条件

  • .NET 9 SDK
  • Visual Studio代码(推荐)或Visual Studio

构建并运行

# Build the solution
dotnet build

# Run the application
dotnet run --project WeatherMcp

# Or run with watch for development
dotnet watch --project WeatherMcp

应用程序将于启动 http://localhost:5260 (或类似端口)。

可用端点

REST API终结点:

  • GET /weatherforecast -获取默认城市的5天预测
  • GET /weatherforecast/{city} -获取特定城市的5天天气预报
  • GET /swagger -Swagger用户界面文档

您可以使用 WeatherMcp.http 文件。例子:

### Get weather forecast for London
GET http://localhost:5260/weatherforecast/London
Accept: application/json

MCP端点:

  • POST / -用于所有MCP通信的MCP JSON-RPC端点

使用以下方法测试MCP端点 WeatherMcp.mcp.http示例:

### Call GetWeatherForecastForCity Tool
POST http://localhost:5260/
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "GetWeatherForecastForCity",
    "arguments": {
      "city": "Amsterdam"
    }
  }
}

MCP检查器集成

您可以使用MCP检查器与MCP服务器进行交互:

npx @modelcontextprotocol/inspector

这提供了一个基于web的界面来测试MCP工具并探索服务器功能。

Claude桌面集成

要将此MCP服务器连接到Claude Desktop,请将以下内容添加到您的 claude_desktop_config.json 文件:

{
  "mcpServers": {
    "weather": {               
      "command": "npx",                      
      "args": [
        "-y",                                
        "mcp-remote",                        
        "http://localhost:5260"          
      ]
    }
  }
}

测试应用程序

单元测试

运行综合测试套件:

# Run all tests
dotnet test

# Run tests with verbose output
dotnet test --verbosity normal

# Run specific test project
dotnet test WeatherMcp.Tests

该项目包括22项测试,涵盖:

  • 气象服务功能
  • REST API端点
  • MCP服务器配置
  • 气象工具集成

REST API测试

使用提供的HTTP文件测试REST端点:

# Using VS Code REST Client extension or similar tools
# Open and run requests from: WeatherMcp/WeatherMcp.http

请求示例:

  • 获取默认天气预报
  • 获取伦敦、纽约、东京的天气
  • 访问Swagger文档

MCP协议测试

使用MCP HTTP文件测试MCP功能:

# Open and run requests from: WeatherMcp/WeatherMcp.mcp.http

MCP测试场景:

  • 初始化MCP会话
  • 列出可用工具
  • 呼叫 GetWeatherForecast 工具
  • 呼叫 GetWeatherForecastForCity 带参数的工具

开发环境

此存储库包含一个Dev Container配置,该配置提供了一个一致的开发环境。NET 9预安装。这对GitHub Copilot编码代理特别有用,可确保顺利的开发体验。

开发容器快速入门

  1. 在VS Code中打开此存储库
  2. 安装“开发容器”扩展
  3. 按 Ctrl+Shift+P 然后选择“开发容器:在容器中重新打开”
  4. 容器将自动设置。NET 9和所有必要的工具

有关开发容器设置的更多详细信息,请参阅 .devcontainer/README.md.

进行更改

开发工作流程

  1. 设置:使用dev容器实现一致的环境
  2. 构建: dotnet build 编译解决方案
  3. 测试: dotnet test 运行单元测试
  4. 跑: dotnet watch --project WeatherMcp 用于热重载开发
  5. HTTP测试:使用 .http 用于测试REST和MCP端点的文件

项目结构

WeatherMcp/
├── Models/              # Data models (WeatherForecast)
├── Services/            # Business logic (WeatherService)
├── Tools/               # MCP tools (WeatherTools)
├── Program.cs           # Application startup and configuration
├── WeatherMcp.http      # REST API test requests
└── WeatherMcp.mcp.http  # MCP protocol test requests

WeatherMcp.Tests/        # Unit tests for all components

此示例演示了将MCP功能添加到现有API中是多么简单,使它们能够被AI代理和其他兼容MCP的客户端使用。