MCP Server Weather について
MCP Server Weatherは、FastMCPを使った天気マイクロサービスです。MCPクライアントで天気を確認したいユーザー向けに、Open-Meteo APIから指定座標の現在の天気と予報を取得します。
主な機能
- 01座標を指定した天気予報の取得
- 02座標を指定した現在の天気の取得
- 03非同期HTTPリクエストによるデータ取得
活用シーン
- 01座標に基づく日別予報の確認
- 02LLMによる説明生成に使う現在の天気データの提供
MCP 対応
MCPクライアントに天気予報と現在の天気を取得するツールを公開し、Open-Meteo APIからデータを取得します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバー Weather
FastMCP で構築されたシンプルな天気マイクロサービスです。Open-Meteo API を使用して、天気予報と現在の天気データを提供します。
目次
機能
- 任意の場所(緯度/経度)の天気予報を取得
- 任意の場所(緯度/経度)の現在の天気を取得
- 高速な応答を実現する非同期 HTTP リクエスト
- MCP ツールとして簡単に統合可能
要件
- Python >= 3.13
- httpx >= 0.28.1
- mcp[cli] >= 1.9.2
インストール
- リポジトリをクローンします:
git clone https://github.com/yourusername/mcp-server-weather.git cd mcp-server-weather - (任意)仮想環境を作成して有効化します:
python3 -m venv .venv source .venv/bin/activate - 依存関係をインストールします:
pip install -r requirements.txt # or, if using pyproject.toml pip install .
使い方
サーバーを実行します:
python server.py
サーバーは、次の 2 つの主要なツールを公開します。
1. 予報を取得
指定した緯度と経度の毎日の天気予報を取得します。
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str
- 戻り値: 日ごとの最高/最低気温、降水量、天気コードを含む整形済み文字列。
出力例:
Date: 2024-06-01
Max Temperature: 22°C
Min Temperature: 14°C
Precipitation: 0.5 mm
Weather Code: 2
---
Date: 2024-06-02
Max Temperature: 20°C
Min Temperature: 13°C
Precipitation: 1.2 mm
Weather Code: 3
2. 現在の天気を取得
指定した緯度と経度の現在の天気データを取得します。
@mcp.tool()
async def get_current_weather(latitude: float, longitude: float) -> str
- 戻り値: 現在の天気の詳細(気温、風、湿度など)を含む JSON 文字列
出力例:
{
"current": {
"temperature_2m": 21.3,
"is_day": 1,
"showers": 0.0,
"cloud_cover": 45,
"wind_speed_10m": 5.2,
"wind_direction_10m": 180,
"pressure_msl": 1012.3,
"snowfall": 0.0,
"precipitation": 0.0,
"relative_humidity_2m": 60,
"apparent_temperature": 21.0,
"rain": 0.0,
"weather_code": 2,
"surface_pressure": 1012.3,
"wind_gusts_10m": 8.0
}
}
API とツールスキーマ
get_forecast
- 入力:
latitude(float)longitude(float)
- 出力:
- 日ごとの天気データを含む整形済み文字列(上記の例を参照)
get_current_weather
- 入力:
latitude(float)longitude(float)
- 出力:
- 現在の天気データを含む JSON オブジェクト(上記の例を参照)
プロジェクト構成
.
├── server.py # Main server code, defines weather tools
├── pyproject.toml # Project metadata and dependencies
├── README.md # Project documentation
├── project.md # Project code summary
├── .gitignore # Git ignore file
├── .python-version # Python version file
├── uv.lock # Lock file for uv package manager
├── .venv/ # Virtual environment (not committed)
└── __pycache__/ # Python cache files
アーキテクチャ
graph TD;
A[Client (Claude Desktop, etc)] -- stdio --> B(MCP Server: server.py)
B -- HTTPX async requests --> C(Open-Meteo API)
B -- Exposes tools --> D[LLM/Client]
B -- Returns weather data --> A
- クライアント:stdio 経由で MCP サーバーに接続します(例:Claude Desktop)
- MCP サーバー:リクエストを処理し、ツールを公開し、Open-Meteo からデータを取得します
- Open-Meteo API:天気と予報のデータを提供します
- LLM/クライアント:データを利用して応答を生成します
チュートリアル
Python と Open-Meteo API を使用した MCP サーバーの作成
MCP サーバーは、言語モデルをデータソースやサービスに接続することで、その機能を拡張します。
MCP サーバーは、主に次の 3 つのプリミティブを公開します。
リソース(クライアント制御)
- リクエストに応じて、クライアントがコンテキストとして使用するデータを公開します。
- MCP クライアントにデータやコンテンツを受動的に公開し、アクセスするタイミングをクライアントに選ばせたい場合は、リソースを使用します。
ツール(モデル制御)
- クライアントモデルが実行できる機能を公開します。
- API からのコンテンツ取得、データの変換、メールの送信など、クライアントにアクションを実行させたい場合は、ツールを使用します。
プロンプト(ユーザー制御)
- 再利用可能なプロンプトとワークフローをユーザーに公開します。
- リソースやツールとのやり取りを効率化するなど、クライアントにプロンプトやワークフローをユーザーに提示させたい場合は、プロンプトを使用します。
例:天気データを自然言語に変換
LLM は、データを自然言語に変換するのが得意です。たとえば、気温、風速、露点などの天気データを、体感する天気の説明や、どのような服装が適しているかの提案に変換できます。
ステップごとのチュートリアル
0. 要件
- Claude.ai アカウント(すべてのアカウントタイプで MCP を利用できます)
- Claude Desktop アプリ(macOS/Windows)
- コードエディター(例:VS Code)
- uv(Rust ベースの Python パッケージマネージャー)
- macOS:
brew install uv - Windows:
winget install --id=astral-sh.uv -e
- macOS:
1. プロジェクトのセットアップ
プロジェクトをセットアップするには、プロジェクトを追加したいフォルダーをコードエディターで開きます。次に、以下の手順に従ってプロジェクトをセットアップします。
エディターツールまたはターミナルを使って、mcp-server-weather という名前の新しいフォルダーを作成します。
mkdir mcp-server-weather
ターミナルでフォルダーに移動します。
cd mcp-server-weather
新しい uv プロジェクトを開始します。
uv init
uv を使って仮想環境を作成します。
uv venv
仮想環境を起動します。
source .venv/bin/activate
注:仮想環境を停止するには、ターミナルで deactivate を実行します。
仮想環境に、CLI 拡張機能を含む Python MCP SDK と追加の Python 依存関係をインストールします。
uv add "mcp[cli]" httpx
2. 天気 MCP サーバーの構築
server.py を作成し、以下のひな形を追加します。
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("weather")
# ... your code here ...
if __name__ == "__main__":
mcp.run(transport='stdio')
定数とヘルパー関数を追加する
OPENMETEO_API_BASE = "https://api.open-meteo.com/v1"
USER_AGENT = "weather-app/1.0"
# Helper function to make a request to the Open-Meteo API
async def make_openmeteo_request(url: str) -> dict[str, Any] | None:
"""Make a request to the Open-Meteo API with proper error handling."""
headers = {
"User-Agent": USER_AGENT,
"Accept": "application/json"
}
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=headers, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception:
return None
ツールを追加する
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
# ...
@mcp.tool()
async def get_current_weather(latitude: float, longitude: float) -> str:
"""Get current weather for a location.
Args:
latitude: Latitude of the location
longitude: Longitude of the location
"""
url = f"{OPENMETEO_API_BASE}/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,is_day,showers,cloud_cover,wind_speed_10m,wind_direction_10m,pressure_msl,snowfall,precipitation,relative_humidity_2m,apparent_temperature,rain,weather_code,surface_pressure,wind_gusts_10m"
data = await make_openmeteo_request(url)
if not data:
return "Unable to fetch current weather data for this location."
return data
3. MCP サーバーのテストと実行
mcp dev server.py
- ブラウザーで http://localhost:5173 を開きます
- 接続して、ツールを一覧表示し、緯度と経度を使ってテストします
4. MCP サーバーの拡張
- ツールを追加します(例:get_location)
- Open-Meteo Geocoding API を使って場所を検索します
貢献
貢献を歓迎します!改善、バグ修正、新機能については、イシューを作成するか、プルリクエストを送信してください。
ライセンス
MIT
作成者
- ONE-FRONT tech: Michael Wybraniec
- MCP Hands-On: Morten Rand-Hendriksen
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。