AccuWeather MCP について
AccuWeather MCPは、AccuWeatherのデータを使って天気ツールを提供するサーバーです。ClaudeやCursorなどのMCPクライアント向けで、AccuWeather APIキーが必要です。
主な機能
- 01AccuWeatherデータを使う天気ツール
- 02AccuWeather APIキーの設定
- 03Dockerイメージのビルド
- 04ユニット・統合テスト
活用シーン
- 01地域の現在の天気を調べる
- 02ClaudeやCursorから天気ツールを使う
MCP 対応
MCPクライアントに天気ツールを提供します。CursorやClaude Desktopなどにサーバーを登録できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
accuweather-mcp
セットアップ
- システムに以下の環境変数を定義します。
export ACCUWEATHER_API_KEY=replace-with-your-api-key
- 以下の内容で
src/main/resources/application.yamlにapplication-local.yamlを定義します。
logging:
console:
enabled: true
- Cursor を使用する場合は、以下のドキュメントソースを追加します。
- Spring AI documentation
- [Wiremock documentation][https://wiremock.org/docs/]
- [Lombok documentation][https://projectlombok.org/features/]
- PIT documentation
- gradle-pitest-plugin documentation
実行
SPRING_PROFILES_ACTIVE=local ./gradlew bootRunで実行します。
テスト
注記:Java デバッガーを有効にすると、標準出力に出力が生成され、stdio MCP プロトコルでエラーが発生します。
単体テストと統合テスト
単体テストと統合テストでは、mockito と wiremock を使用します。テストを実行するには、次のコマンドを使用します。
./gradlew build
ミューテーションテスト
このプロジェクトでは、gradle-pitest-plugin を介して PIT によるミューテーションテストを実施し、JaCoCo の行カバレッジを補完する形で、テストが注入された障害を検出できることを確認します。
./gradlew pitest— DTO とブートストラップクラスを除くcom.jonjam.accuweathermcp.*に対してミューテーションテストを実行します。build/reports/pitest/index.htmlを開いて結果を確認します。生存したミュータントは、テストで実行されているものの、障害が検出されないコードを示します。
MCP Inspector
MCP Inspector でテストするには、リポジトリのルートから次のコマンドを実行します。
npx @modelcontextprotocol/inspector -e 'JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005' java -jar "build/libs/accuweather-mcp-local-snapshot.jar"
これは、こちらのブログを参照しています。
AI チャット(Claude、Cursor)
- MCP 設定に以下の構成を追加します。
{
"mcpServers": {
"accuweather-mcp": {
"command": "PATH_TO_JAVA",
"args": ["-jar", "ABSOLUTE_PATH_TO_REPO/build/libs/accuweather-mcp-local-snapshot.jar"],
"env": {
"ACCUWEATHER_API_KEY": "API_KEY"
}
}
}
}
SDKMAN を使用している場合、command は ~/.sdkman/candidates/java/current/bin/java にする必要があります。
これは MCP docs を参照しています。
ユーザープロンプトの例:
Use the accuweather-mcp to look up the current weather in Manchester, UK.
Docker
このプロジェクトでは、Docker イメージのビルドに Jib Gradle plugin を使用します。
- イメージをビルドし、ローカルの Docker デーモンに読み込みます。
./gradlew jibDockerBuild
デフォルトのイメージ名は jonjam/accuweather-mcp です。
MCP Inspector で Docker イメージを使用する場合、コマンドは次のようになります。
npx @modelcontextprotocol/inspector docker run --rm -i --env "ACCUWEATHER_API_KEY=$ACCUWEATHER_API_KEY" jonjam/accuweather-mcp:latest
パターンとプラクティス
このプロジェクトのパターンとプラクティスについて詳しくは、AGENTS.md を参照してください。
Git
このプロジェクトでは、バージョン管理、変更履歴の生成、公開を自動化するために semantic-release を使用します。
重要: リリースをトリガーするコミットメッセージには、Conventional Commits 標準に従った接頭辞を付ける必要があります。例:
feat: add new forecast endpointfix: correct hourly forecast time calculation
Spotless
このプロジェクトでは、一貫した Java スタイルを適用するために Spotless Gradle プラグインを使用します。
./gradlew spotlessApply— ソースをフォーマットし、スタイルの問題を修正します。./gradlew spotlessCheck— ファイルを変更せずにフォーマットを検証します。
Checkstyle
静的解析と、より広範なコード品質チェックには、Google スタイルベースの設定を使用した Checkstyle を使用します(フォーマットは Spotless に委任しています)。
./gradlew checkstyleMain— メインソースに対して Checkstyle を実行します。./gradlew checkstyleTest— テストソースに対して Checkstyle を実行します。
MCP
- ツール 仕様に従って、エラー(バリデーションなど)を必ず適切に処理してください。
MCP Registry
このサーバーは MCP Registry に公開されています。
レジストリに対応した MCP クライアント(Cursor、Claude Desktop など)を使用する場合は、レジストリから io.github.jonjam/accuweather-mcp を追加し、ACCUWEATHER_API_KEY 環境変数として AccuWeather API キーを設定できます。
今後の改善
- AccuWeather のステータスコードに基づいて、ゲートウェイクラスのエラー処理を改善する
- expires ヘッダーに従ってデータをキャッシュする、AccuWeather API 呼び出し向けのインメモリキャッシュを追加する
- ツールで希望する単位(摂氏または華氏など)を指定できる機能を追加する
- Spring AI Examplesに基づくエンドツーエンドの統合テストを追加する
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。