Weather MCP Server
Model Context Protocol (MCP) サーバーの実装プロジェクトです。天気情報を提供するツールを実装します。
参考ドキュメント
システム要件
- Python 3.10以上
- uv (Pythonパッケージマネージャー)
セットアップ
# 仮想環境の作成とアクティベート
uv venv
source .venv/bin/activate
# 依存関係のインストール
uv add "mcp[cli]" httpx
実行方法
uv run main.py
提供するツール
| ツール名 | 説明 |
|---|---|
get_alerts | 米国の州の気象警報を取得 |
get_forecast | 緯度・経度から天気予報を取得 |
Claude for Desktop への統合
~/Library/Application Support/Claude/claude_desktop_config.json を編集:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/weather",
"run",
"main.py"
]
}
}
}
処理の流れ (What's happening under the hood)
Claude for Desktopでの質問から回答までの流れ:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude Desktop │ │ MCP Server │ │ External API │
│ (Client) │ │ (weather) │ │ (weather.gov) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ 1. ユーザーが質問 │ │
│ 「サクラメントの天気は?」 │
│ │ │
│ 2. Claudeが利用可能な │ │
│ ツールを分析 │ │
│ │ │
│ 3. ツール実行リクエスト│ │
│ (JSON-RPC over STDIO)│ │
│──────────────────────>│ │
│ │ 4. 外部API呼び出し │
│ │──────────────────────>│
│ │ │
│ │ 5. APIレスポンス │
│ │<──────────────────────│
│ 6. ツール実行結果 │ │
│<──────────────────────│ │
│ │ │
│ 7. Claudeが結果を解釈 │ │
│ して自然言語で回答 │ │
│ │ │
ポイント
- 自動起動: Claude Desktopが設定に基づいてMCPサーバープロセスを起動・管理
- ツール検出: クライアントがサーバーの
tools/listを呼び出して利用可能なツールを取得 - STDIO通信: 標準入出力を介してJSON-RPCメッセージをやり取り
- 非同期実行: API呼び出しなどのI/O操作を効率的に処理
注意事項
- STDIOベースのサーバーでは
print()を使用しないこと(JSON-RPCメッセージが破損する) - ログ出力には
loggingモジュールを使用する
