MCP天气(Vercel)
ChatGPT 的,之Developer mode 连接MCP(Model Context Protocol)服务器。Open-Meteo 免费的API 中所述修改相应参数的值。
Vercel 的明细栏样式中定义的设置HTTPS 的 /api/mcp 来定义自定义外观。
机能
使用方法(步骤)
步骤1:在聊天中输入地名并发送(例如:东京)\ 步骤2:用卡显示候选地址\ 步骤3:选择候选地卡后,会显示地图\ 步骤4:按下地图上的“在这个地方出天气”,就会显示一周(7天)的天气预报(目标:3回合以内)
工具
- 地理位置:输入地名后,返回多个候选位置(经纬度)
- 参数: place (必须)、count (可选,默认值:20/最大值:20)
- 获取预测:从经纬度获取天气预报数据
- ※是互换用的非推荐工具。小部件通常会在候选卡选择中直接获取 - 参数: latitude (必须)、longitude (必须)、label (可选) - 补充:总是在7天内返回
用户界面
ChatGPT 中显示动态部件:
- “候选位置搜索结果”按钮
- 地図(OpenStreetMap)
- 天气予报一覧(周间/时间别)
补充:小部件ChatGPT 的显示区域内移动,所以外部URL不能自由地打。\ 因此,小部件直接通信 开放 天气 和 OpenStreetMap(地图的iframe) 只做。
CSP(通信目的地许可列表)
manifest.json 的,之 widgets.weather-widget.csp 是正的(根据此设置实施)。
connect-src:
- https://geocoding-api.open-meteo.com(候补地検索) - https://api.open-meteo.com(天气予报)
frame-src:
- https://www.openstreetmap.org(嵌入地图)
安装,安装
前提条件
- Node.js 18.0 以上
- npm 9.0 大于或等于yarn、pnpm)
本地开发
# 1. リポジトリをクローン
git clone
cd mcp-weather-vercel
# 2. 依存パッケージをインストール
npm install
# 3. 環境変数を設定(オプション)
cp .env.example .env.local
# .env.local を編集してカスタマイズ(デフォルト値で動作します)
# 4. 開発サーバーを起動
npm run dev
# 5. ブラウザでアクセス
# http://localhost:3000
# MCPエンドポイント: http://localhost:3000/api/mcp生产构建
npm run build
npm startVercel 部署到
自动部署(推荐)
- GitHub 推送存储库
- Vercel仪表板 访问
- 新项目 来修改标记元素的显示属性
- GitHub 选择存储库
- 部署 来修改标记元素的显示属性
- 部署完成后MCP URL 确认
手动部署
# Vercel CLI をインストール
npm install -g vercel
# デプロイ
vercelChatGPT 连接到
设定手顺
- ChatGPT 的双曲正切值Developer mode 启用
- 设置 → 应用 或 设置 → 连接器
- 创建 来修改标记元素的显示属性
- MCP Server URL 输入:
- 本地: http://localhost:3000/api/mcp - 本番: https://your-vercel-url.vercel.app/api/mcp
- 连接 来修改标记元素的显示属性
ChatGPT 使用方法
ユーザー: "Tokyo の天気を教えてください"
ChatGPT:
1. geocode_place を使用して Tokyo の候補地を検索
2. 候補地を表示(UI ウィジェット内)
3. ユーザーが候補を選択 → 地図が表示される
4. ユーザーが「この場所で天気を出す」を押す(会話が進む)
5. 週間(7日)の予報を表示评估(10个测试提示)
即使不取得胜率OK是。首先只确认“3周以内会有周预报”。
- 东京的天气
- 涩谷的天气预报(7日)
- 大阪的一周天气
- 札幌下周的天气
- 那霸的天气(旅行用的笼统)
- Kyoto 天气(英语输入)
- 冬季天气(平假名)
- 中央区天气(假设同名较多)
- 成田空港の天气(施设名/地名混在)
- 不存在的地名XYZ的天气(失败・诱导确认)
API 引用
MCP 端点
统一资源定位符: /api/mcp\ 方法: POST\ 内容类型: application/json
geocode_place 工具
查找候选位置。
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "geocode_place",
"arguments": {
"place": "Tokyo",
"count": 20
}
}
}响应示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "検索: Tokyo\n候補:\n1. Tokyo / Japan (35.6762, 139.6503)\n..."
}
],
"structuredContent": {
"kind": "geocode",
"query": "Tokyo",
"candidates": [
{
"name": "Tokyo",
"country": "Japan",
"latitude": 35.6762,
"longitude": 139.6503,
"timezone": "Asia/Tokyo"
}
]
}
}
}get_forecast 工具
取得天气预报。
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_forecast",
"arguments": {
"latitude": 35.6762,
"longitude": 139.6503,
"label": "Tokyo / Japan"
}
}
}响应示例:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "座標: 35.6762, 139.6503 (Asia/Tokyo)\nいま: 12℃ / 風 8\n2026-01-28: 曇り / 10〜15℃ / 降水 最大20%\n..."
}
],
"structuredContent": {
"kind": "forecast",
"location": {
"latitude": 35.6762,
"longitude": 139.6503,
"timezone": "Asia/Tokyo"
},
"current": {
"temperature_c": 12,
"windspeed": 8
},
"daily": [
{
"date": "2026-01-28",
"summary_ja": "曇り",
"temp_max_c": 15,
"temp_min_c": 10,
"precip_prob_max_percent": 20
}
]
}
}
}环境变数
.env.example 复制 .env.local 中所述修改相应参数的值。
|变量名|默认|说明| |--------|-----------|------| | NEXT_PUBLIC_GEOCODING_API_URL | https://geocoding-api.open-meteo.com/v1/search \_地理编码API 的,之URL | | NEXT_PUBLIC_FORECAST_API_URL | https://api.open-meteo.com/v1/forecast 天气预报API 的,之URL | | MCP_REQUEST_TIMEOUT | 30 | API 请求超时(秒) | MCP_RETRY_ATTEMPTS | 3 | API 请求失败时的重试次数 | NEXT_PUBLIC_GEOCODING_DEFAULT_COUNT | 20 |地理编码的默认结果数| | NEXT_PUBLIC_FORECAST_DEFAULT_DAYS | 7 预报的默认天数(始终为7天) | NEXT_PUBLIC_DEFAULT_TIMEZONE | Asia/Tokyo 默认时区
故障排除
详细的故障排除指南 文档/故障排除/ 来修改标记元素的显示属性。
常见问题
构建错误:“类型string‘is not assignable to type‘AnySchema’”
解决方法: Zod 请确认是否使用架构。
// ❌ 間違い
inputSchema: { type: "object", properties: {} }
// ✅ 正しい
inputSchema: z.object({ /* ... */ })了解更多信息 docs/故障排除/issue-schema-validation-error.md 来修改标记元素的显示属性。
API 超时
解决方法:环境变数 MCP_REQUEST_TIMEOUT 的总和。
MCP_REQUEST_TIMEOUT=60 # 60 秒に設定关于重试
API 如果请求失败,则自动最大化 MCP_RETRY_ATTEMPTS 重新启动。
MCP_RETRY_ATTEMPTS=5 # 最大 5 回リトライ性能
高速缓存
当前API 未缓存调用。在生产环境中CDN 请考虑使用缓存。
响应时间
- geocode_place: 1-3 秒(包括Open-Meteo API延迟)
- 获取预测:1-2秒
开発
文件配置
.
├── app/
│ ├── api/
│ │ └── mcp/
│ │ └── route.ts # MCP ハンドラーのメイン実装
│ ├── layout.tsx
│ └── page.tsx
├── docs/
│ └── troubleshooting/ # トラブルシューティングガイド
├── .env.example # 環境変数テンプレート
├── next.config.mjs # Next.js 設定
├── package.json
├── tsconfig.json
└── README.md # このファイル脚本
npm run dev # 開発サーバー起動
npm run build # 本番ビルド
npm start # ビルド済みの本番サーバー起動测试
# ビルドテスト
npm run build
# 開発サーバーでテスト
npm run dev故障排除
详细的测试方法是 docs/故障排除/测试指南.md 来修改标记元素的显示属性。
技术栈
- 运行时:Node.js
- 框架结构:Next.js 16.1.5
- 言语:TypeScript 5.6.3
- 验证:佐德3.25.76
- 主控程序:mcp处理程序1.0.7
- 部署:Vercel
许可证
麻省理工学院
支持
在您查看完详细信息后,单击文档/故障排除/ 请确认文件夹。
API 出典
- 地理编码: Open-Meteo地理编码API
- 天气予报: 开放气象API
两API 都可以免费使用API 无需按键。
