Weather MCP Server について
Weather MCP Serverは、Bunを使った天気情報提供用のMCPサーバー例です。郵便番号から現在の天気と時間別・日別予報を取得でき、ツールを構造化して追加する方法も示します。
主な機能
- 01郵便番号による現在の天気取得
- 02時間別・日別予報
- 03ツールの順次利用
- 04構造化されたツール拡張方式
活用シーン
- 01郵便番号に対応する現在の天気の確認
- 02週末の天気予報の取得
- 03MCPサーバーへの天気ツール追加
MCP 対応
現在の天気や予報を取得するツールをMCPクライアントに提供します。READMEでは基本的なMCPサーバーの例として説明し、Claude Desktopの設定方法も記載しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Weather MCP Server
これは、LLM で天気情報を提供するツール群を実現するために、Model Context Protocol(MCP)と Bun を活用したプロジェクトです。
背景
ツールリクエストを処理して実行できる基本的な MCP サーバーのセットアップ方法を紹介します。郵便番号を指定すると、現在の天気と今後の天気予報(時間別および日別)を取得できます。複数のツールが連携して動作し、LLM は設定に基づいてツールの使用を調整します。 この実装では、追加のツールを一元的かつ体系的な方法で追加するためのシンプルなフレームワークも提供しています。詳しくは、開発の新しいツールセクションをご覧ください。
前提条件
- Bun がインストールされている必要があります。
- Claude Desktop をインストールしてください。
プロジェクトのセットアップ
-
リポジトリをクローンします。
-
次を実行します。
bun install -
/env/sample.envをもとに、ルートに.envファイルを作成します。必要に応じて、説明に従って値を設定してください。注記: これは主に、
bun run startを使用して開発モードでサーバーを実行する場合に関係します。 -
(任意) プロジェクトの整合性を確認するには、次を実行します。
bun run verify
ビルド
-
次を実行します。
bun run build
これによりエントリーポイント build/main.js がバンドルされ、利用できるようになります。
Claude Desktop のセットアップ
このセクションは、一般的なガイドをもとに、このユースケースに合わせた内容になっています。
-
Claude Desktop を起動し、設定(アカウント設定ではありません)を開きます。
-
設定ペインの左側にある
Developerをクリックし、次にEdit Configをクリックします。 -
ファイル
claude_desktop_config.jsonを編集し、次を追加します。{ "mcpServers": { "weather-mcp-server": { "command": "bun", "args": ["run", "<path_to_project>/build/main.js"], "env": { "APP_NAME": "weather-mcp-server", "APP_EMAIL": "<app-email>" } } } }<path_to_project>をプロジェクトへのパスに置き換えます。例:/Users/username/Documents/projects/create-mcp-server-app-bun<app-email>を、一部の API リクエストの識別に使用するメールアドレスに置き換えます。例:[email protected]
-
Claude Desktop を再起動します。再起動しないと、Claude Desktop に
claude_desktop_config.jsonの変更が適用されないため、重要な手順です。 -
メイン画面で
Search and Toolsボタンをクリックし、次に MCP サーバー名をクリックします。有効になっていることを確認してください。
使い方
Claude とこの MCP サーバーを使う際のヒントをいくつか紹介します。
- まず、郵便番号を指定して現在の天気を Claude に尋ねてみましょう。例:
current weather for 90210。該当する結果が出力されます。Claude が複数のツールを順番に、動的かつ独立して使用し、求める結果を提供する様子を確認できます。 - 今後数日間のいずれかの日の天気予報を Claude に尋ねることもできます。例:
what's the weather this weekend?。以前の質問のコンテキストに郵便番号が含まれていない場合は、求める郵便番号を確認するための追加リクエストが発生します。郵便番号を指定すると、該当する結果が返されます。- 該当する場合、Claude が以前のツール呼び出しの結果を自動的に再利用して回答する点に注目してください。
開発
新しいツール
新しいツールを追加するには、./src/tools 内の各ツールモジュールが AbstractTool を継承し、ITool を実装したうえで、(テストカバレッジのために)明示的なコンストラクターを定義してください。
...
export class NewTool extends AbstractTool implements ITool {
// Explicit constructor definition to ensure test coverage in Bun tracks constructor.
constructor(fetch: typeof globalThis.fetch = globalThis.fetch) {
super(fetch);
}
...
さらに、以下のメソッドを実装する必要があります(詳細は対応する JSDoc を参照してください)。
getNamegetDescriptiongetInputSchemavalidateWithDefaultsprocessToolWorkflow
実装の際は既存のツールを参考にし、対応するテストも忘れずに実装してください。
追加のツールを登録するための設定は不要です。MCP サーバーを再起動すると、自動的に含まれます。
テストカバレッジ
lcov レポートを分析すると、カバレッジの不足箇所を把握しやすくなります。
注意:
- クラスのコンストラクターは、それぞれのクラス内で定義してください。Bun が追跡するのはクラスの関数(コンストラクターを含む)のみです。抽象クラスを継承すると、その抽象クラス独自のコンストラクターは追跡されないため、問題が発生します。そのため、クラス内で Abstract のコンストラクターを定義し、
superを呼び出してください。 - モジュールの先頭に一部のインポート(例:
import dedent from "dedent";)があると、Bun がその行をカバー済みとして正しく追跡できない場合があります。その場合は、他のインポートの後ろに移動すると正しく追跡されます。
前提条件(開発)
-
lcovをインストールします。brew install lcov -
VSCode 拡張機能
ryanluker.vscode-coverage-guttersをインストールします(settings.json で定義済みです)。
テストカバレッジの実行
-
ほとんどの場合、次のコマンドを実行すれば十分です。
bun run test:coverage注意: カバレッジが 100 未満でありながら
Uncovered Line #sが報告されない場合は、次の手順に従ってさらに調査し、上記の注意事項を確認してください。 -
詳細な調査を行う場合は、次のコマンドを実行します。
bun run test:coverage:lcovこれにより、VSCode 拡張機能
ryanluker.vscode-coverage-guttersがエディター内でカバー済みの行を可視化するために使用するlcovカバレッジレポートが生成されます。 -
HTML レポートが必要な場合は、ターミナルで次のコマンドを実行します。
genhtml --function-coverage --branch-coverage --output-directory coverage-report coverage/lcov.infoこれにより、任意のブラウザーで確認できる HTML カバレッジレポートが生成されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。