mcpField
M
MCP Server Weather

MCP Server Weather

ローカル
github.com/michaelwybraniecメディア・デザイン073 週間前に更新

MCP Server Weather について

MCP Server Weatherは、FastMCPを使った天気マイクロサービスです。MCPクライアントで天気を確認したいユーザー向けに、Open-Meteo APIから指定座標の現在の天気と予報を取得します。

主な機能

  1. 01座標を指定した天気予報の取得
  2. 02座標を指定した現在の天気の取得
  3. 03非同期HTTPリクエストによるデータ取得

活用シーン

  1. 01座標に基づく日別予報の確認
  2. 02LLMによる説明生成に使う現在の天気データの提供

MCP 対応

MCPクライアントに天気予報と現在の天気を取得するツールを公開し、Open-Meteo APIからデータを取得します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP サーバー Weather

Python License: MIT

FastMCP で構築されたシンプルな天気マイクロサービスです。Open-Meteo API を使用して、天気予報と現在の天気データを提供します。


目次


機能

  • 任意の場所(緯度/経度)の天気予報を取得
  • 任意の場所(緯度/経度)の現在の天気を取得
  • 高速な応答を実現する非同期 HTTP リクエスト
  • MCP ツールとして簡単に統合可能

要件

  • Python >= 3.13
  • httpx >= 0.28.1
  • mcp[cli] >= 1.9.2

インストール

  1. リポジトリをクローンします:
    git clone https://github.com/yourusername/mcp-server-weather.git
    cd mcp-server-weather
    
  2. (任意)仮想環境を作成して有効化します:
    python3 -m venv .venv
    source .venv/bin/activate
    
  3. 依存関係をインストールします:
    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
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}&current=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

作成者

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。