weather について
weatherは、米国国立気象局のAPIから警報と予報を取得するPython製MCPサーバーの例です。2つのツールでLLMアシスタントに気象データを提供します。
主な機能
- 01気象警報の取得
- 02天気予報の取得
- 03米国国立気象局APIの利用
活用シーン
- 01米国の州で発令中の警報を確認
- 02米国内の地点の予報を取得
MCP 対応
対応するアシスタント向けにget_alertsとget_forecastのMCPツールを公開します。米国国立気象局APIを使用し、米国内の地点に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Model Context Protocol(MCP)
🚀 なぜ今、誰もが突然MCP/サーバーに夢中なのでしょうか?(その理由:AIオーケストレーションを再定義しています)
Model Context Protocol(MCP)は、AI アシスタントを実世界のデータソースやシステムに接続するという、AI 統合における重要な課題に対処するため、2024年末に Anthropic が開発したオープン標準です[1][3]。MCP は、AI モデルが外部のツール、データベース、API とやり取りするための標準インターフェースとして機能し、デバイス向けのユニバーサルポートとして USB-C が機能するのと似ています[4][7]。
主な機能とメリット
-
統合の標準化: MCP によりカスタム統合が不要になり、開発者は単一のプロトコルを使って AI モデルをさまざまなデータソースに接続できます。
-
動的な検出: AI エージェントは、ハードコードされた統合を必要とせず、利用可能な MCP サーバーとその機能を自動的に検出して活用できます。
-
セキュリティの強化: MCP により、開発者はサーバー内にセキュリティ対策を実装できるため、AI エージェントが許可されたデータや操作のみにアクセスするようにできます。
-
柔軟性: このプロトコルはモデルに依存しないため、あらゆる AI モデル(Claude、GPT-4、オープンソースの LLM など)が MCP 対応ツールを利用できます。
-
エコシステムの拡大: MCP は導入以来大きな支持を集め、2025年2月までにコミュニティが構築した MCP サーバーが1,000を超えました。
AI 開発への影響
MCP は以下の点で AI の状況を変革しています。
-
統合の簡素化: AI モデルを外部システムに接続する複雑さを、「N×M」の問題から「N+M」の問題へと軽減します。
-
複雑なワークフローの実現: 複数のプラットフォームが関わるイベント計画など、AI エージェントによる複数段階のシステム横断操作を可能にします。
-
コラボレーションの促進: マルチエージェントシステムに共有ワークスペースを提供し、専門化された AI エージェントが効率的にタスクを調整できるようにします。
-
パーソナライズの強化: 個人用 AI アシスタントをユーザーのデータやアプリケーションに安全に統合できます。
-
企業ガバナンスの向上: 社内ツールへの AI アクセスを標準化し、AI とのやり取りをより適切に監視、制御できるようにします。
2025年3月現在、MCP は AI コミュニティで大きな話題となっており、より統合され、コンテキストを認識する AI システムを開発するうえで重要な要素だと多くの人に見なされています。オープンな性質と大手 AI 企業の後ろ盾により急速な普及と発展が進み、MCP は AI の世界における統合の事実上の標準となる可能性を秘めています。
Model Context Protocol(MCP)- 天気予報クイックスタート:
概要
このドキュメントでは、シンプルな Model Context Protocol(MCP)天気予報サーバーを構築し、ホストである Claude for Desktop に接続する方法を詳しく説明します。このサーバーは、National Weather Service API を使用して気象警報と予報を取得する2つのツール、get-alerts と get-forecast を公開します。
目次
はじめに
このガイドでは、リアルタイムの気象データを使って LLM(Claude など)を強化する MCP サーバーの作成方法を説明します。このサーバーは MCP フレームワークを利用して、気象警報や予報を取得するツールを公開し、LLM が本来備えていない環境認識能力を補います。
前提条件
始める前に、次の内容を確認してください。
- Python の基本的な知識
- Claude などの LLM に関する理解
システム要件
- Python 3.10 以上
- MCP SDK 1.2.0 以上
セットアップ
-
uvをインストールします。window
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macos/linux
curl -LsSf https://astral.sh/uv/install.sh | shuvコマンドが認識されるように、ターミナルを再起動します。 -
プロジェクトを作成してセットアップします。
window(開発用リポジトリのパスに移動し、以下のコマンドを PowerShell などで実行します)
# Create a new directory for our project uv init weather cd weather # Create virtual environment and activate it uv venv .venv\Scripts\activate # Install dependencies uv add mcp[cli] httpx # Create our server file new-item weather.pymacos/linux
# Create a new directory for our project uv init weather cd weather # Create virtual environment and activate it uv venv source .venv/bin/activate # Install dependencies uv add "mcp[cli]" httpx # Create our server file touch weather.py
サーバーの構築
パッケージのインポートとインスタンスのセットアップ
以下のコードを weather.py ファイルの先頭に追加します。
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("weather")
# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"
#helper function
async def make_nws_request(url: str) -> dict[str, Any] | None:
"""Make a request to the NWS API with proper error handling."""
headers = {
"User-Agent": USER_AGENT,
"Accept": "application/geo+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
def format_alert(feature: dict) -> str:
"""Format an alert feature into a readable string."""
props = feature["properties"]
return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""
@mcp.tool()
async def get_alerts(state: str) -> str:
"""Get weather alerts for a US state.
Args:
state: Two-letter US state code (e.g. CA, NY)
"""
url = f"{NWS_API_BASE}/alerts/active/area/{state}"
data = await make_nws_request(url)
if not data or "features" not in data:
return "Unable to fetch alerts or no alerts found."
if not data["features"]:
return "No active alerts for this state."
alerts = [format_alert(feature) for feature in data["features"]]
return "\n---\n".join(alerts)
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
"""Get weather forecast for a location.
Args:
latitude: Latitude of the location
longitude: Longitude of the location
"""
# First get the forecast grid endpoint
points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
points_data = await make_nws_request(points_url)
if not points_data:
return "Unable to fetch forecast data for this location."
# Get the forecast URL from the points response
forecast_url = points_data["properties"]["forecast"]
forecast_data = await make_nws_request(forecast_url)
if not forecast_data:
return "Unable to fetch detailed forecast."
# Format the periods into a readable forecast
periods = forecast_data["properties"]["periods"]
forecasts = []
for period in periods[:5]: # Only show next 5 periods
forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
forecasts.append(forecast)
return "\n---\n".join(forecasts)
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport='stdio')
サーバーの実行
サーバーを確認するには、次のコマンドを実行します。
uv run weather.py
Claude for Desktop でサーバーをテストする
設定
- Claude for Desktop をインストール/更新します。 最新バージョンがインストールされていることを確認してください。
- MCP サーバーを設定します。
~/Library/Application Support/Claude/claude_desktop_config.jsonの設定ファイルを開くか、新規作成します。

-> 動作しない場合は、システムを再起動してください
-
サーバー設定を追加します。
{ "mcpServers": { "weather": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",# S:\\Dev\\weather "run", "weather.py" ] } } }/ABSOLUTE/PATH/TO/PARENT/FOLDER/weatherを、プロジェクトディレクトリの正しい絶対パスに置き換えてください。commandフィールドにはuv実行ファイルのフルパスを指定する必要がある場合があります(MacOS/Linux ではwhich uv、Windows ではwhere uvを使って確認してください)。 -
Claude for Desktop を再起動します。
コマンドでテストする
- ツールが検出されたことを確認します。 Claude for Desktop にハンマーのアイコンが表示されているか確認します。クリックすると、
get_alertsとget_forecastツールが一覧表示されます。
2. テスト用の質問を実行します。
- 「サクラメントの天気はどうですか?」
- 「テキサスで現在発令中の気象警報は何ですか?」
注:この質問は米国の場所でのみ機能します。米国国立気象局のデータを使用しているためです。
内部で行われていること
- クライアントが質問を Claude に送信します。
- Claude が利用可能なツールを分析し、使用するツールを決定します。
- クライアントが MCP サーバーを通じて、選択したツールを実行します。
- 結果が Claude に返されます。
- Claude が自然言語で回答を作成し、表示します。
トラブルシューティング
-
Claude for Desktop のログを取得する
mcp.log:一般的な MCP 接続と障害に関するログです。mcp-server-SERVERNAME.log:指定したサーバーのエラーログです。
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log -
Claude にサーバーが表示されない
claude_desktop_config.jsonファイルの構文を確認します。- プロジェクトのパスが絶対パスであることを確認します。
- Claude for Desktop を完全に終了してから再起動します。
-
ツール呼び出しが何も表示されずに失敗する
- Claude のログでエラーを確認します。
- サーバーがエラーなくビルドされ、実行されることを確認します。
- Claude for Desktop の再起動を試します。
-
どれもうまくいきません。どうすればよいですか?
- デバッグガイドを参照してください。
-
エラー:グリッドポイントデータの取得に失敗しました
- 米国内の座標ではない
- NWS API の問題
- レート制限
解決方法:
- 米国内の座標であることを確認します。
- リクエスト間に短い遅延を追加します。
- NWS API のステータスページを確認します。
-
エラー:[STATE] に有効なアラートがありません
- その州に現在の気象アラートはありません。別の州を試してください。
より高度なトラブルシューティングについては、MCP デバッグガイドをご覧ください。
MCP Inspector
npx @modelcontextprotocol/inspector uv run weather.py


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