天气MCP服务器

一个基于Model Context Protocol的天气服务MCP服务器,提供实时天气和5天预报功能,适用于AI PC集成和开发学习。

  • by lmanchu
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 lmanchu/weather-mcp-server

使用说明

天气MCP服务器-示例实现

华硕和OEM合作伙伴的参考实施

一个简单的、生产就绪的MCP服务器,演示如何使用模型上下文协议将外部服务与AI PC集成。


🎯 目的

此示例MCP服务器演示了:

  • ✅ 如何从头开始创建MCP服务器
  • ✅ 如何向AI客户端公开工具(功能)
  • ✅ 如何集成外部API(OpenWeather API)
  • ✅ 生产就绪错误处理
  • ✅ 干净、文档齐全的代码

非常适合:OEM合作伙伴构建AI PC功能,开发人员学习MCP,概念验证项目


🌟 特性

可用工具

  1. get_current_weather -获取任何城市的实时天气

    • 温度、条件、湿度、风速
    • 支持摄氏和华氏温度
  2. get_weather_forecast -获取5天预报

    • 每日高温/低温
    • 每日天气状况

🚀 快速开始

先决条件

  • Node.js>=18.0.0
  • OpenWeather API密钥(可用的免费层)

安装

# Clone or download this repository
cd weather-mcp-server

# Install dependencies
npm install

# Configure API key
cp .env.example .env
# Edit .env and add your OpenWeather API key

获取API密钥

  1. 访问 OpenWeather API
  2. 注册免费帐户
  3. 生成API密钥
  4. 增添 .env 文件

运行服务器

# Start the server
npm start

# Or with auto-reload during development
npm run dev

📖 用法示例

在Claude桌面中配置

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": ["/absolute/path/to/weather-mcp-server/index.js"],
      "env": {
        "OPENWEATHER_API_KEY": "your_api_key_here"
      }
    }
  }
}

使用AI客户端进行测试

配置后,您可以询问您的AI助手:

"What's the weather like in Taipei?"
"Give me a 5-day forecast for Tokyo"
"What's the temperature in New York in Fahrenheit?"

AI将自动调用相应的MCP工具!


🏗️ 建筑

┌─────────────────┐
│   AI Client     │ (Claude, ChatGPT, etc.)
│  (Claude Desktop)│
└────────┬────────┘
         │ MCP Protocol (stdio)
         ↓
┌─────────────────┐
│  Weather MCP    │ ← This server
│     Server      │
└────────┬────────┘
         │ HTTPS
         ↓
┌─────────────────┐
│ OpenWeather API │
└─────────────────┘

关键组件

  • index.js -主服务器实现
  • @modelcontextprotocol/sdk -官方MCP SDK
  • StdioServerTransport -通过stdin/stdout进行通信
  • OpenWeather API -外部天气数据源

📁 项目结构

weather-mcp-server/
├── package.json          # Dependencies and scripts
├── index.js              # Main MCP server code
├── .env.example          # Environment variables template
├── .env                  # Your API keys (git-ignored)
├── README.md             # This file
├── README.zh-TW.md       # 繁體中文版
├── PARTNER-GUIDE.md      # Detailed guide for OEM partners
└── examples/
    └── client-example.js # Example client code

🛠️ 发展

编码结构

服务器被组织成清晰的部分:

  1. 配置 -API密钥、URL
  2. WeatherServer类 -主服务器逻辑
  3. 工具注册 -定义可用工具
  4. 工具操作员 -实现工具功能
  5. 错误处理 -强大的错误管理

添加新工具

// 1. Add tool definition in setupToolHandlers()
{
  name: 'your_new_tool',
  description: 'What this tool does',
  inputSchema: {
    type: 'object',
    properties: {
      param1: { type: 'string', description: 'Parameter description' }
    },
    required: ['param1']
  }
}

// 2. Add handler in CallToolRequestSchema
case 'your_new_tool':
  return await this.yourNewTool(args.param1);

// 3. Implement the method
async yourNewTool(param1) {
  // Your logic here
  return {
    content: [{
      type: 'text',
      text: 'Result'
    }]
  };
}

🧪 测试

手动测试

# Test the MCP server directly
npm test

集成测试

使用随附的 examples/client-example.js 以编程方式测试工具调用。


📝 API 参考

工具: get_current_weather

参数:

  • city (字符串,必填)-城市名称(例如“台北”、“东京”)
  • units (字符串,可选)-“公制”(默认)或“英制”

退货:

🌤️ Current Weather in Taipei, TW

Temperature: 25.3°C (feels like 26.1°C)
Condition: Clear - clear sky
Humidity: 65%
Wind Speed: 3.2 m/s
Pressure: 1013 hPa
Visibility: 10.0 km

Last updated: 11/14/2025, 10:30:00 AM

工具: get_weather_forecast

参数:

  • city (字符串,必填)-城市名称
  • units (字符串,可选)-“公制”(默认)或“英制”

退货:

📅 5-Day Weather Forecast for Taipei, TW

11/14/2025:
  High: 26.5°C | Low: 22.1°C
  Condition: Clear

11/15/2025:
  High: 27.2°C | Low: 23.4°C
  Condition: Clouds

...

🔒 安全最佳实践

在此示例中实现:

  • ✅ 存储在环境变量中的API键(不在代码中)
  • ✅ 所有参数的输入验证
  • ✅ 正确的错误处理(无敏感数据泄露)
  • ✅ 用于外部API调用的HTTPS
  • ✅ 最小依赖性(减少攻击面)

对于生产部署:

  • 🔐 使用机密管理系统(AWS机密管理器、Azure密钥库)
  • 🔐 实施速率限制
  • 🔐 添加请求日志记录/监控
  • 🔐 如果远程部署,请使用TLS进行MCP通信

🌐 本地化

此服务器通过OpenWeather API支持多种语言:

// Add language parameter to API call
const url = `${API_BASE_URL}/weather?q=${city}&units=${units}&lang=zh_tw&appid=${API_KEY}`;

支持的语言:en、zh_tw、zh_cn、ja、ko和 50+更多


🐛 故障排除

常见问题

“未找到城市”

  • 检查城市名称的拼写
  • 尝试包括国家代码:“Taipei,TW”

“天气API错误:未经授权”

  • 在中验证您的API密钥 .env
  • 在openweathermap.org上检查API密钥是否处于活动状态

“找不到模块”

  • 跑 npm install
  • 检查Node.js版本>=18.0.0

在Claude中未检测到MCP服务器

  • 验证 claude_desktop_config.json 路径
  • 重新启动克劳德桌面
  • 检查服务器日志是否有错误

📚 了解更多

MCP资源

天气API


🤝 OEM合作伙伴

看 PARTNER-GUIDE.md 为了:

  • 详细的集成指南
  • 部署选项
  • 定制示例
  • 生产检查表
  • 支持信息

联系: partners@irisgo.ai


📄 许可证

MIT许可证-请参阅 许可证 文件


🙏 鸣谢

  • 由...创建:IrisGo。AI团队
  • MCP协议:人类学
  • 天气数据:开放天气
  • 对于:华硕和AI PC OEM合作伙伴

📮 支持


最后更新: 2025-11-14 版本: 1.0.0