MCP天气服务器
一个使用Open-Meteo API为任何城市提供天气信息的模型上下文协议(MCP)服务器。
概述
这个MCP服务器实现了一个简单的天气工具,允许您获取全球任何城市的当前天气状况。它使用Open-Meteo地理编码API将城市名称解析为坐标,然后获取包括温度和风速在内的当前天气数据。
特点/功能
- 城市天气查询通过城市名称获取当前天气
- 地理编码集成自动将城市名称解析为坐标
- 当前状况返回温度和风速信息
- 错误处理优雅地处理无效城市或API故障
- MCP 兼容使用官方MCP SDK构建
先决条件
- Node.js(版本14或更高)
- npm 或 yarn 包管理器
安装
- 克隆此存储库:
git clone
cd mcp-weather-server- 安装依赖项:
npm install使用方法
本地开发
构建并运行服务器
- 构建TypeScript代码:
npm run build- 启动MCP天气服务器:
npm start或者用于开发(一键构建并运行):
npm run dev服务器将启动并监听通过stdio传输的MCP连接。
Docker 部署
快速入门Docker
- 构建Docker镜像:
./scripts/docker-build.sh- 在生产模式下运行:
./scripts/docker-run.sh production- 以开发模式运行(启用热重载):
./scripts/docker-run.sh development手动Docker命令
构建生产镜像:
docker build -t mcp-weather-server:latest .构建开发镜像:
docker build -f Dockerfile.dev -t mcp-weather-server:dev .使用 Docker Compose 运行(生产环境):
docker-compose up mcp-weather-server使用 Docker Compose 运行(开发环境):
docker-compose --profile dev up mcp-weather-server-dev运行独立容器:
docker run -it --rm --name mcp-weather-server mcp-weather-server:latestDocker 功能
- 多阶段构建 为了优化生产镜像
- 非root用户 为了增强安全性
- 健康检查 用于集装箱监控
- 资源限制 为了控制资源使用
- 开发模式 支持热重载和卷挂载
- Node.js 调试器 用于调试支持
- 持续记录日志 带有音量调节装置
调试
MCP 检查器(推荐)
MCP Inspector 为 MCP 协议通信提供了一个专门的调试接口:
启动MCP检查器:
npm run inspector从构建和检查器开始:
npm run dev:inspector访问检查器:
- 打开你的浏览器以
http://localhost:5173 - 检查员提供了一个基于网页的界面用于:
- 监控MCP协议消息 - 检查工具调用和响应 - 调试服务器-客户端通信 - 查看实时消息流
Node.js 调试
启用 Node.js 调查器后开始:
npm run dev:debug从检查器开始,并在第一行断开:
npm run dev:debug-brkTypeScript 编译的监视模式:
npm run dev:watchDocker 调试
运行包含所有调试工具的开发容器:
./scripts/docker-run.sh development或者手动:
docker-compose --profile dev up mcp-weather-server-dev这暴露了:
- 端口 9229:Node.js 调试器
- 端口5173:MCP检查器网页界面
- 端口3000:应用程序端口(如需要)
连接调试器
- MCP 检查器(网页界面):
- 导航至 http://localhost:5173 - 配置您的MCP服务器连接 - 实时监控协议消息
- Chrome 开发者工具(DevTools):
- 打开Chrome浏览器并导航至 chrome://inspect - 点击“配置”并添加 localhost:9229 - 您的 Node.js 进程应该出现在“远程目标”下 - 点击“检查”以打开开发者工具
- VS Code:
- 将此配置添加到您的 .vscode/launch.json:
{
"type": "node",
"request": "attach",
"name": "Attach to MCP Server",
"address": "localhost",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app",
"skipFiles": ["/**"]
}- WebStorm/IntelliJ:(这里可以翻译为“WebStorm/IntelliJ:”或者保持原样,因为“WebStorm/IntelliJ”作为专有名词通常不需要翻译,但为了符合中文表达习惯,也可以稍作调整,不过在此直接保留原样)
- 创建一个新的“附加到 Node.js/Chrome”配置 - 将主机设置为 localhost 并且移植到 9229
调试脚本详解
inspector启动MCP Inspector网页界面dev:inspector构建并启动MCP Inspectordev:debug从端口9229启动Node.js调试器dev:debug-brk从 Node.js 调试器开始并断在第一行dev:watch以监视模式运行 TypeScript,实现持续编译
调试工作流程
- 对于MCP协议问题:
- 使用 npm run dev:inspector 监控MCP消息 - 检查工具调用、响应以及协议合规性
- 对于代码级别的调试:
- 使用 npm run dev:debug 使用 Chrome DevTools 或 VS Code - 在您的TypeScript源文件中设置断点
- 对于Docker开发:
- 使用 ./scripts/docker-run.sh development - 访问MCP Inspector(端口5173)和Node.js调试器(端口9229)
可用工具
get-weather
获取指定城市的当前天气信息。
参数:
city(字符串):要获取天气的城市名称
示例回复:
The current temperature in London is 15°C with a wind speed of 12 km/h.与MCP客户端的集成
这台服务器可以与任何兼容MCP(Minecraft协议)的客户端进行集成。服务器提供了(或开放了) get-weather 一个可以通过传递城市名称参数来调用的工具。
API 依赖项
此服务器依赖于以下免费API:
- Open-Meteo 地理编码API将城市名称转换为坐标
- Open-Meteo天气API用于获取当前天气数据
无需API密钥,因为Open-Meteo提供免费访问其天气数据。
项目结构
mcp-weather-server/
├── src/ # Source code
│ ├── index.ts # Main entry point
│ ├── server/ # Server implementation
│ │ └── index.ts # MCP server setup
│ ├── tools/ # Tool implementations
│ │ └── weather-tool.ts # Weather tool logic
│ ├── types/ # TypeScript type definitions
│ │ └── weather.ts # Weather-related types
│ └── utils/ # Utility functions
│ └── api.ts # API client utilities
├── dist/ # Compiled JavaScript output
├── examples/ # Example configurations
│ └── mcp-config.json # MCP client configuration example
├── docs/ # Documentation
├── tests/ # Test files
├── tsconfig.json # TypeScript configuration
├── package.json # Project dependencies and metadata
├── package-lock.json # Locked dependency versions
├── .gitignore # Git ignore rules
└── README.md # This file依赖项
@modelcontextprotocol/sdk官方MCP服务器构建SDKzod用于输入验证的模式验证库
错误处理
服务器针对常见场景提供了强大的错误处理机制:
- 无效的城市名称当无法找到城市时,返回一条有帮助的信息
- API故障优雅地处理网络错误或API不可用情况
- 格式错误的请求输入验证确保请求格式正确
发展
建筑
这个项目使用了ES模块。请确保您的Node.js版本支持ES模块,或者在需要时使用转译器。
测试
目前,未包含任何自动化测试。要测试服务器:
- 启动服务器
- 与MCP客户端建立连接
- 打电话给
get-weather带有各种城市名称的工具
做出贡献
- 为仓库创建分支
- 创建一个特性分支
- 做出你的更改
- 彻底测试
- 提交一个拉取请求
许可证
ISC许可证
更改日志
版本1.0.0
- 首次发布
- 基本天气查询功能
- MCP SDK 集成
- Open-Meteo API 集成
支持
如遇问题或疑问,请在仓库中提交一个议题。
