🌦️ MCP Weather Scraper について
MCP Weather Scraperは、LLMとMCPツールの連携を試す開発者向けのFastAPI製天気情報取得プロトタイプです。公開ウェブ情報を解析し、OpenAIで天気データを構造化します。
主な機能
- 01ウェブ上の天気情報の取得と解析
- 02OpenAIによるデータの構造化
- 03MCPツールとしての天気照会
- 04重複リクエストを避けるキャッシュ
- 05結果と指標を表示するStreamlit画面
活用シーン
- 01場所を指定した最新天気の照会
- 02ウェブ上の天気情報の構造化
- 03リクエスト時間とOpenAIのトークン使用量の確認
MCP 対応
MCPサーバーは、天気を照会するツールをMCPクライアントに公開します。公開ウェブ情報を取得し、構造化した天気データを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🌦️ MCP Weather Scraper
このプロジェクトは、Model Context Protocol (MCP) の実験的な実装です。** OpenAI** 経由の軽量な LLM と FastAPI を使用して、公開されているウェブソースからリアルタイムの天気情報を取得し、構造化します。LLM がツールとどのように連携し、構造化されていないウェブデータの取得や推論を行うインテリジェントなエージェントとして機能できるかを探ることを目的としています。
🚀 主な機能
- ✅ ブラウザー検索による天気情報のスクレイピングに対応した、MCP 準拠のサーバー
- ✅ OpenAI LLM(例:gpt-3.5-turbo)との連携
- ✅ FastAPI サーバーが、呼び出し可能な MCP ツールとして天気情報を提供
- ✅ パフォーマンスに優れた
selectolaxによる HTML の自動解析 - ✅ LLM が構造化されていないウェブコンテンツを、構造化スキーマに抽出
- ✅ ユーザー操作用の Streamlit アプリのフロントエンド
- ✅
functools.lru_cacheを使ったレスポンスのキャッシュ
🧠 始める前に復習しましょう
このリポジトリで押さえておきたい 5 つの概念
| 🧩 概念 | 🔍 概要 | ⚙️ 重要な理由 |
|---|---|---|
| Model Context Protocol (MCP) | LLM のツール呼び出し用の新しいプロトコル | 構造化された AI エージェント間の通信を実現します |
| Uvicorn | Python ウェブアプリ向けの高速 ASGI サーバー | FastAPI ベースの MCP サーバーをホストします |
| Selectolax | 高速な HTML パーサー | 天気データを効率よくスクレイピングし、抽出します |
functools.lru_cache | 関数呼び出しをキャッシュする Python 組み込みデコレーター | データの再取得を避けてパフォーマンスを向上させます |
| Token Usage Metrics (OpenAI) | LLM の呼び出しで使用されたトークン数に関する情報 | コストの追跡やプロンプト設計の最適化に役立ちます |
💡 Python や API に詳しい方でも、これらのツールは最先端の AI スタックエンジニアリングを支えるものなので、ぜひ簡単に確認してみてください!
📊 トークン使用量とパフォーマンス指標
Streamlit UI には、次の情報が表示されるようになりました。
-
⏱️ 応答時間
天気情報の取得と処理にかかった時間 -
🧠 プロンプトトークン
LLM のプロンプトで使用されたトークン数 -
💬 完了トークン
LLM のレスポンスで生成されたトークン数 -
🔢 合計トークン数
リクエストあたりのトークン総数。コストの追跡に役立ちます
これらは各結果カードの下に、見やすく表示されます。
🖥️ Streamlit アプリのプレビュー
必要条件
- Python 3.9 以上
requirements.txtに記載された依存関係
🛠️ セットアップ
- リポジトリをクローンする
git clone https://github.com/your-username/mcp_weather_scraper.git cd mcp_weather_scraper - 仮想環境を作成して有効化する
python -m venv .venv .venv\Scripts\activate # On Windows - 依存関係をインストールする
pip install -r requirements.txt - 環境変数を設定する
ルートディレクトリに .env ファイルを作成し、OpenAI API キーを追加します
OPENAI_API_KEY=your_openai_api_key - サーバーを起動する
サーバーは http://localhost:8000 で利用できます。 API ドキュメントには、次の URL からアクセスできます。uvicorn server:app --reload- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- リクエストを送信する
またはpython client.py
このスクリプトは、次のペイロードで POST リクエストを送信します。curl -X POST http://localhost:8000/weather -H "Content-Type: application/json" -d '{"location": "Seattle"}'
サーバーは、次のような天気データを JSON 形式で返します。{ "location": "Seattle" }{ "location": "Seattle", "temperature": "15°C", "humidity": "80%", "air_quality": "Good", "condition": "Cloudy" }
📦 フォルダー構成
.
📁 mcp_weather_scraper/
│
├── assets/
│ └── streamlit_screenshot.png
├── server.py # MCP-compatible tool server
├── client.py # MCP client that interacts with model + tools
├── data_models.py # Pydantic schemas for request/response
├── utils.py # HTML cleaning, scraping, etc.
├── requirements.txt
└── .env
📄 ライセンス
This project is licensed under the MIT License.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。