打开Meteo MCP TypeScript
 ](https://nodejs.org) ](https://www.docker.com) 
TypeScript/Node.js的实现 模型上下文协议(MCP) 服务器 开放天气 天气数据。提供AI助手,如 克劳德提供全面的天气预报、雪况、空气质量 例如位置、度量和位置搜索能力。
现代堆栈:此TypeScript实现在Node.js 20 LTS+上运行 完全支持Docker。最初用Deno编写,迁移到Node.js(2026年2月) 为了更广泛的生态系统兼容性。早期版本可在 python.
特性
11 MCP工具
- 🌤️ 天气预报:当前状况、小时和每日预报
(温度、降水、风、紫外线)
- ❄️ 雪况:雪深、降雪量和适合滑雪的山地天气
度假村
- 🌫️ 空气质量:空气质量指数(欧洲和美国)、污染物(PM2.5、PM10、O3、NO2)、紫外线
花粉数据索引
- 🗺️ 位置搜索:使用模糊搜索和国家过滤的地理编码
- 📊 天气警报:极端条件(热、冷、冷)的自动警报,
风暴、紫外线)
- 🏔️ 瑞士地点:100多个瑞士城市和山区的预配置数据
通过
- 📈 历史天气:用于分析的过去天气数据
- 🌊 海洋条件:海洋天气、海浪、洋流
- 🧭 舒适度指数:基于温度的人体舒适度计算,
湿度、风
- 🌅 天文数据:日出、日落、黄金时段、蓝色时段
- 🔀 位置比较:比较多个地点的天气
4 MCP资源
- weather://codes -WMO天气代码参考(28个代码)
- weather://parameters -可用的API参数文档
- weather://aqi-reference -空气质量指数量表与健康
建议
- weather://swiss-locations -100多个瑞士城市、山脉、滑雪胜地
坐标
3个MCP提示
- 滑雪旅行天气 -滑雪旅行计划,包括雪况和度假村
建议
- 计划户外活动 -天气感知活动规划(徒步旅行、骑自行车、,
等等)
- 天气感知旅行 -结合天气的旅行计划
安装
先决条件
- 20.0.0或更高
- 8.0.0或更高版本(或npm/yarn)
- 不需要API密钥(Open-Meteo是免费的)
本地设置
# Clone the repository
git clone https://github.com/schlp/open-meteo-mcp-ts.git
cd open-meteo-mcp-ts
# Install dependencies
pnpm install
# Run tests
pnpm test
# Start the server
pnpm start用法
使用克劳德桌面
配置Claude Desktop以使用MCP服务器:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"open-meteo": {
"command": "node",
"args": ["/path/to/open-meteo-mcp-ts/dist/main.js"]
}
}
}或者使用Docker:
{
"mcpServers": {
"open-meteo": {
"command": "docker",
"args": ["run", "--rm", "-i", "open-meteo-mcp:latest"]
}
}
}重新启动Claude Desktop,天气工具将可用。
与MCP检查员一起
首先构建项目,然后进行交互式测试:
pnpm build
npx @modelcontextprotocol/inspector node dist/main.js这将打开一个web界面来测试所有工具、资源和提示。
发展
可用命令
# Development with hot reload (tsx)
pnpm dev
# Run tests
pnpm test
# Watch mode for tests
pnpm test:watch
# Generate coverage report
pnpm coverage
# Linting (ESLint)
pnpm lint
# Format code (Prettier)
pnpm fmt
# Type checking (TypeScript)
pnpm check
# Build TypeScript to JavaScript
pnpm build项目结构
open-meteo-mcp-ts/
├── src/
│ ├── main.ts # Entry point (MCP server initialization)
│ ├── server.ts # MCP tools, resources, prompts
│ ├── client.ts # Open-Meteo API client
│ ├── models.ts # Zod schemas and TypeScript types
│ ├── helpers.ts # Utility functions
│ └── data/ # JSON resources
├── tests/ # Test suite (168 tests)
├── dist/ # Compiled JavaScript (generated)
├── .github/
│ └── workflows/ # CI/CD configuration
├── package.json # Node.js/pnpm configuration
├── tsconfig.json # TypeScript configuration
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
├── DEPLOYMENT.md # Deployment guide
└── README.md # This file部署
使用Docker部署以供生产使用。多阶段构建优化了安全性 以及尺寸。
快速入门-Docker
# Build the image
docker build -t open-meteo-mcp:latest .
# Run the container
docker run -it open-meteo-mcp:latest
# Or use Docker Compose
docker-compose up -d快速入门-Node.js
# Install and build
pnpm install
pnpm build
# Run in production
pnpm start
# View logs
node dist/main.js看 部署.md 包括Docker在内的详细说明, docker编写和裸Node.js选项。
测试
全部168项测试通过:
$ pnpm test
✔ 168 passed | ✖ 0 failed (1.1s)测试覆盖率
- 6测试:空气质量边缘案例
- 21测试:API客户端(模拟)
- 9测试:地理编码功能
- 48测试:辅助功能
- 12项测试:集成改进
- 26测试:模型验证(Zod模式)
- 22次测试:服务器集成(工具、资源、提示)
- 24次测试:服务器工具调用处理程序(所有11个MCP工具)
API使用
示例:获取天气
import { OpenMeteoClient } from "./src/client.js";
const client = new OpenMeteoClient();
// Search for location
const location = await client.searchLocation("Zurich");
const zurich = location.results![0];
// Get weather forecast
const weather = await client.getWeather(
zurich.latitude,
zurich.longitude,
7, // forecast days
true, // include hourly
"Europe/Zurich", // timezone
);
console.log(`Current temperature: ${weather.current_weather.temperature}°C`);
console.log(`Condition: ${weather.current_weather.weathercode}`);示例:获取空气质量
const airQuality = await client.getAirQuality(
47.3769, // Zurich latitude
8.5417, // Zurich longitude
5, // forecast days
true, // include pollen
"Europe/Zurich",
);
console.log(`European AQI: ${airQuality.current.european_aqi}`);
console.log(`PM2.5: ${airQuality.current.pm2_5} μg/m³`);技术栈
- 运行时: 20.0.0+(从Deno迁移,
2026年2月)
- 包管理器: 8+
- MCP-SDK:
- 构建:通过TypeScript tsc
- 测试:Node.js本机测试运行器
- 代码检查:ESLint与TypeScript插件
- 格式化:更漂亮
- HTTP客户端:带有gzip压缩的本机Fetch API
- 部署:Docker(多阶段Alpine构建,200MB镜像)
演出
Python版本的主要改进:
- ⚡ 响应时间加快50% (目标:≤125ms P95)
- 💾 内存使用率降低30% (目标:≤70 MB)
- 📊 吞吐量提高40% (目标:≥280 RPS)
- 🚀 冷启动速度提高60% (目标:≤160ms)
看 docs/PERFORMANCE.md 详细的基准测试(即将发布 很快)。
迁移历史
python→ TypeScript(原始重写)
TypeScript实现与 Python版本:
| 特性 | Python(FastMCP) | TypeScript |
|---|---|---|
| MCP工具 | 11 | 11✅ |
| MCP资源 | 4 | 4✅ |
| MCP提示 | 3 | 3✅ |
| 测试 | 137 | 168✅ |
| Gzip压缩 | ✅ | ✅ |
Deno → Node.js(2026年2月)
迁移到Node.js 20 LTS+以实现更广泛的生态系统兼容性:
| 特性 | Deno(v4.0.0) | Node.js(v4.1.0) |
|---|---|---|
| 运行时 | Deno 1.40+ | Node.js 20 LTS+ |
| 包管理器 | JSR/NMP | pnpm/NMP |
| 构建系统 | esbuild | tsc |
| 测试运行器 | deno测试 | 节点--测试 |
| 部署 | Deno部署 | Docker |
| 测试计数 | 144 | 168✅ |
关键变化
- 运行时:Deno→ Node.js 20 LTS+实现通用兼容性
- 包管理器:迪诺→ pnpm用于性能和一致性
- 构建:通过tsc进行TypeScript本机编译
- 部署:Deno部署→ Docker(多阶段构建)
- 命令行界面:deno任务命令→ pnpm命令
- 重大变更:无-MCP协议完全兼容
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 打开拉取请求
开发指南
- 遵循Prettier风格指南(
pnpm fmt) - 为新功能添加测试
- 更新文档
- 确保所有测试通过(
pnpm test) - 运行类型检查(
pnpm check) - 跑linting(
pnpm lint)
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
致谢
标准
- -JavaScript运行时
- 安thropic克劳德 -AI助手集成
- 德诺 -初始TypeScript实现(v1-4.0.0)
相关项目
- 开放式气象mcp -原始Python
实施
- MCP服务器 -官方MCP
服务器示例
- 瑞士移动MCP -瑞士人
公共交通一体化
支持
______________________________________________________________________
建于❤️ Claude Code社区
