weather_mcp_server

天気情報を提供する MCP(Model Context Protocol)サーバー実装。

このモジュールは以下の機能を提供します。

  • wttr.in API を利用した天気情報取得

  • 日次キャッシュによる API 呼び出し最適化

  • MCP ツールとしての天気取得・キャッシュ操作

  • MCP 標準プロンプト(getPrompts)対応

主な構成要素

  • WeatherMCPServer MCP サーバー本体。ツール登録・プロンプト登録・起動制御を行います。

  • MCP ツール - get_weather : 都市名から天気情報を取得 - clear_cache : キャッシュ全削除 - get_cache_stats : キャッシュ統計取得

  • MCP プロンプト - Weather : 天気予報生成用システムプロンプト

天気情報を提供するMCPサーバー (MCP標準プロンプト形式対応版)

このサーバーは以下の機能を提供します: 1. 都市名から天気情報を取得(wttr.in APIを使用) 2. 天気情報のキャッシュ管理(日次更新) 3. キャッシュの統計情報取得とクリア 4. MCP標準形式のプロンプト提供(getPrompts)

主要コンポーネント: - WeatherCache: 天気情報のキャッシュを管理するクラス - get_weather: 天気情報を取得するツール - clear_cache: キャッシュをクリアするツール - get_cache_stats: キャッシュ統計を取得するツール - weather_forecaster: 天気予報用のシステムプロンプト(MCP標準形式) - detailed_weather_report: 詳細レポート用プロンプト(MCP標準形式)

キャッシュ戦略: - 同じ都市の情報は1日1回のみAPIから取得 - 前日以前のデータは自動的に削除 - JSONファイルに永続化

class weather_mcp_server.WeatherMCPServer(config_file)

Bases: object

天気情報を提供するMCPサーバー。

wttr.in APIから天気情報を取得し、MCPツールとして提供します。 キャッシュ機能により、同じ都市への複数回リクエストは効率的に処理されます。

clear_cache() dict

全てのキャッシュをクリアします。

Returns:

クリア結果を含む辞書

Return type:

dict

戻り値の構造(成功時):

{
    "status": "success",
    "cleared_count": int  # クリアされたエントリ数
}

戻り値の構造(エラー時):

{
    "status": "error",
    "message": str  # エラーメッセージ
}
get_cache_stats() dict

キャッシュの統計情報を取得します。

Returns:

統計情報を含む辞書

Return type:

dict

戻り値の構造(成功時):

{
    "status": "success",
    "total_entries": int,    # 総エントリ数
    "today_entries": int,    # 本日のエントリ数
    "cities": list,          # キャッシュされている都市のリスト
    "date": str              # 現在の日付
}

戻り値の構造(エラー時):

{
    "status": "error",
    "message": str  # エラーメッセージ
}
get_weather(city: str) dict

指定された都市の天気予報を取得します。

wttr.in APIから天気情報を取得します。 キャッシュがある場合はキャッシュを優先的に返します。

【FastMCP2.0による自動変換】 - 関数名 → name: get_weather - 説明 → description:指定された都市の天気予報を取得します - 引数 → inputSchema:{‘type’: ‘object’,’properties’: {‘city’: {‘type’: ‘string’}}, ‘required’: [‘city’] } - 戻値 → outputSchema: {‘additionalProperties’: True, ‘type’: ‘object’}

Parameters:

city (str) – 天気情報を取得したい都市名(英語表記: “Tokyo”, “London”など、または日本語: “東京”, “大阪”)

Returns:

天気情報を含む辞書

Return type:

dict

戻り値の構造(成功時):

{
    "city": str,       # 都市名
    "temp_C": str,     # 摂氏温度
    "desc": str,       # 天気の説明(英語)
    "cached": bool     # キャッシュから取得したかどうか
}

戻り値の構造(エラー時):

{
    "city": str,       # 都市名
    "error": str,      # エラーメッセージ
    "cached": bool     # False
}

【使用例】:

>>> get_weather("Tokyo")
{
    "city": "Tokyo",
    "temp_C": "15",
    "desc": "Partly cloudy",
    "cached": False
}

【注意事項】 - APIタイムアウト: 10秒 - キャッシュは日次で管理(前日のデータは使用されない) - 例外は発生させず、すべてのエラーは辞書形式で返される

main()

MCPサーバーを起動します。

設定のTRANSPORT設定に基づいて、適切なモードでサーバーを起動します。

weather_prompt(city: str = '東京') str

天気予報AIエージェント用のシステムプロンプトを生成します。

Parameters:

city (str) – 対象の都市名(デフォルト: 東京)

Returns:

生成されたプロンプト

Return type:

str