Skip to main content
Glama
Kohei-Suzuki22

Weather MCP Server

README.md
# Weather MCP Server

Model Context Protocol (MCP) サーバーの実装プロジェクトです。天気情報を提供するツールを実装します。

## 参考ドキュメント

- [Building MCP Servers](https://modelcontextprotocol.io/docs/develop/build-server)
- [公式サンプルコード](https://github.com/modelcontextprotocol/quickstart-resources/tree/main/weather-server-python)

## システム要件

- Python 3.10以上
- uv (Pythonパッケージマネージャー)

## セットアップ

```bash
# 仮想環境の作成とアクティベート
uv venv
source .venv/bin/activate

# 依存関係のインストール
uv add "mcp[cli]" httpx
```

## 実行方法

```bash
uv run main.py
```

## 提供するツール

| ツール名 | 説明 |
|---------|------|
| `get_alerts` | 米国の州の気象警報を取得 |
| `get_forecast` | 緯度・経度から天気予報を取得 |

## Claude for Desktop への統合

`~/Library/Application Support/Claude/claude_desktop_config.json` を編集:

```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` モジュールを使用する

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_alerts retrieves alerts for US states, while get_forecast provides forecasts for geographic coordinates. There is no overlap in functionality or ambiguity between them.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (get_alerts, get_forecast) with the same verb style and snake_case convention. The naming is perfectly uniform and predictable.

Tool Count2/5

With only 2 tools, the server feels thin for a weather domain. It lacks basic operations like current conditions, historical data, or location search, making it borderline too minimal for practical use.

Completeness2/5

The tool surface is severely incomplete for a weather server. It misses core functionalities such as current weather, location lookup, radar data, and unit conversion, leaving significant gaps that will hinder agent workflows.