外部APIをAIに教える!天気予報取得MCPサーバーの作り方実践

AIチャットボットを利用していて、「現在の東京の天気はどうですか?」と質問した際に、「リアルタイムの情報にはアクセスできません」という回答が返ってきて、もどかしい思いをしたことはないでしょうか。大規模言語モデル(LLM)は膨大な知識を持っていますが、外部の最新データや特定のシステムと連携するには、適切なインターフェースが必要です。

そこで今、技術者の間で急速に注目を集めているのが「Model Context Protocol(MCP)」です。この新しい標準規格を活用することで、AIと外部APIやデータベースを安全かつ効率的に接続し、AIアシスタントの能力を劇的に拡張することが可能になります。

本記事では、初心者の方でも実践できるように、外部の天気予報APIと連携する「MCPサーバー」の作り方をゼロから解説します。開発環境のセットアップから実際のコーディング、そしてClaude Desktopでの動作確認まで、ステップバイステップでご紹介します。この記事を読み終える頃には、あなたのAIはリアルタイムの気象情報を取得し、より賢いパートナーへと進化しているはずです。それでは、次世代のAI開発の世界へ一緒に踏み出しましょう。

目次

1. AI活用が劇的に進化する!Model Context Protocol(MCP)の基本概念と導入メリット

生成AIの能力を最大限に引き出すためには、AIモデル単体の性能だけでなく、いかに外部のデータやツールとスムーズに連携させるかが重要です。そこで現在、エンジニアや開発者の間で急速に注目を集めているのが、Anthropicによってオープンソース化された「Model Context Protocol(MCP)」です。本セクションでは、これから天気予報取得サーバーを作成する前に知っておくべき、MCPの革新的な仕組みとその導入メリットについて解説します。

MCPとは何か?「AIのためのUSBポート」

Model Context Protocol(MCP)を一言で表現するなら、「AIアシスタントと外部システムを接続するためのユニバーサル規格」です。これまでのAI開発では、Google Drive内のドキュメントを読ませたり、Slackのログを解析させたりする場合、それぞれのAIモデルやプラットフォームごとに専用のコネクタを開発する必要がありました。これは、新しい周辺機器を買うたびにパソコンの端子を改造しなければならないようなもので、非常に非効率でした。

MCPはこの問題を解決するために設計されました。これを採用することで、開発者は標準化されたプロトコルに従って一度サーバー(接続機能)を作成するだけで、Claude DesktopアプリやIDE(統合開発環境)など、MCPに対応したあらゆるAIクライアントからその機能を利用できるようになります。まさに、コンピュータにおけるUSBポートのように、差し込むだけで様々なリソースへアクセス可能になる仕組みが実現したのです。

MCPを導入する3つの大きなメリット

MCPサーバーを構築し、AI開発に取り入れることには、主に以下の3つのメリットがあります。

1. 実装コストの大幅な削減と再利用性の向上**
従来のAPI連携では、特定のAIアプリケーション向けに書いたコードは他の環境では使えないことが一般的でした。しかし、MCP標準に準拠して「天気予報取得機能」や「データベース検索機能」を作れば、それをClaude Desktopで使いつつ、同時にCursorやZedといったMCP対応のエディタでも同じように呼び出すことが可能です。「一度書けば、どこでも動く」に近い体験が得られ、開発リソースを本質的なロジック構築に集中させることができます。

2. リアルタイム情報とAIのシームレスな統合**
LLM(大規模言語モデル)は学習時点までの知識しか持っていませんが、MCPを使えば「今現在の天気」や「最新の株価」、「社内の最新ドキュメント」といったリアルタイム情報に安全にアクセスさせることができます。RAG(検索拡張生成)のような複雑なパイプラインを独自に構築しなくても、MCPサーバー経由で必要なコンテキストを動的にAIへ供給できるため、回答の精度と実用性が飛躍的に向上します。

3. ローカルリソースへの安全なアクセス**
クラウド上のAPIだけでなく、ローカル環境にあるファイルやSQLiteデータベースなどを、AIに直接操作させることもMCPの得意分野です。ユーザーは自身のPC内にあるデータを外部にアップロードすることなく、ローカルで動作するMCPサーバーを通じてAIに分析させることができるため、セキュリティとプライバシーの観点からも優れたソリューションとなります。

このように、Model Context Protocolは単なる接続ツールではなく、AIがあらゆるデータソースと対話するための標準言語となりつつあります。次章からは、実際にこの強力なプロトコルを使って、外部の天気予報APIからデータを取得し、AIに「今日の天気」を教えるサーバーの実装に入っていきます。

2. 開発環境の準備からAPIキー取得まで:天気予報MCPサーバー構築のための完全ガイド

AIアシスタントにリアルタイムの外部データを提供するMCP(Model Context Protocol)サーバーを構築するには、堅牢で再現性の高い開発環境が不可欠です。ここでは、Pythonを使用したMCPサーバー開発の基礎となる環境構築から、実際に天気予報データを取得するためのAPIキー発行手順までを詳細に解説します。

まず、開発言語としてPythonを選択します。Pythonは豊富なライブラリを持ち、API通信やデータ処理の実装が容易であるため、MCPサーバーの開発に最適です。環境構築には、Astral社が開発した高速なPythonパッケージインストーラー兼リゾルバーである「uv」の使用を推奨します。uvを使用することで、依存関係の解決が瞬時に完了し、開発体験が劇的に向上します。公式ウェブサイトの手順に従ってuvをインストールした後、ターミナルで以下のコマンドを実行し、新しいプロジェクトディレクトリと仮想環境を作成してください。

“`bash
mkdir weather-mcp-server
cd weather-mcp-server
uv init
uv venv
“`

次に、天気予報データを取得するための外部APIプロバイダーを選定します。今回は、開発者向けドキュメントが充実しており、無料プランでも十分な機能が利用できる「OpenWeatherMap」を採用します。OpenWeatherMapは世界中の気象データを提供しており、多くの開発現場で標準的に利用されています。

APIキーの取得手順は以下の通りです。

1. アカウント作成: OpenWeatherMapの公式サイトにアクセスし、「Sign In」または「Create Account」からユーザー登録を行います。メールアドレスの認証を完了させてください。
2. APIキーの発行: ログイン後、ダッシュボードの「API keys」タブに移動します。デフォルトで作成されているキーを使用するか、プロジェクト用に新しいキーを生成します。
3. キーのコピー: 表示された英数字の文字列がAPIキーです。このキーは外部に漏洩しないよう厳重に管理する必要があります。

APIキーを取得したら、プロジェクトに環境変数を設定するためのライブラリと、MCPサーバー構築に必要なSDKをインストールします。ここでは、HTTP通信を行うための`requests`や環境変数を読み込む`python-dotenv`、そしてMCP公式SDKである`mcp`を追加します。

“`bash
uv add mcp requests python-dotenv
“`

セキュリティを確保するため、APIキーはソースコードに直接記述せず、`.env`ファイルで管理するのが鉄則です。プロジェクトルートに`.env`という名前のファイルを作成し、先ほど取得したキーを以下のように記述します。

“`text
OPENWEATHER_API_KEY=あなたのAPIキーをここに貼り付け
“`

これで、AIが天気予報を取得するための下準備が整いました。適切なツールセットとセキュリティを意識した構成を行うことで、後の実装フェーズがスムーズに進み、実用的なMCPサーバーを効率よく構築することが可能になります。次は、いよいよサーバーのコード実装へと進みます。

3. 実践コーディング解説:外部APIと連携してリアルタイム情報を取得する仕組みの作り方

生成AIが学習データに含まれない「現在の情報」を扱うために、Model Context Protocol(MCP)を用いたサーバー構築は非常に強力な手段となります。ここでは、実際に外部の天気予報APIと連携し、AIがリアルタイムで天気情報を取得・回答できるようにするMCPサーバーのコーディング手順を詳細に解説します。

今回は、開発者が利用しやすく、ドキュメントも充実している実在の気象データプロバイダー「OpenWeatherMap」のAPIを利用します。Node.jsとTypeScriptを用いた実装例をベースに、MCPの核心部分である「Tool(ツール)」の定義とAPIリクエスト処理の実装を見ていきましょう。

プロジェクトの準備と依存関係のインストール

まず、TypeScriptベースのMCPサーバーを構築するために必要なSDKと、HTTPリクエストを行うためのライブラリ(axiosなど)、および環境変数を管理するdotenvをインストールします。また、入力パラメータのバリデーションにはZodを使用するのが一般的です。

“`bash
npm install @modelcontextprotocol/sdk axios dotenv zod
npm install -D typescript @types/node @types/axios
“`

サーバーの初期化とToolの定義

MCPサーバーにおいて最も重要なのが、AIに対して「自分は何ができるのか」を伝えるToolの定義です。以下のコードは、都市名を引数に取り、その都市の現在の天気を返す機能を定義する主要部分です。

“`typescript
import { McpServer } from “@modelcontextprotocol/sdk/server/mcp.js”;
import { StdioServerTransport } from “@modelcontextprotocol/sdk/server/stdio.js”;
import { z } from “zod”;
import axios from “axios”;
import dotenv from “dotenv”;

dotenv.config();

// サーバーインスタンスの作成
const server = new McpServer({
name: “weather-mcp-server”,
version: “1.0.0”,
});

const API_KEY = process.env.OPENWEATHER_API_KEY;
const BASE_URL = “https://api.openweathermap.org/data/2.5/weather”;

// ツールの登録
server.tool(
“get_weather”, // ツール名
“指定された都市の現在の天気を取得します。”, // AI向けの説明
{
city: z.string().describe(“天気を知りたい都市の名前(例: Tokyo, London)”),
}, // 入力スキーマ
async ({ city }) => {
try {
// 外部APIへのリクエスト
const response = await axios.get(BASE_URL, {
params: {
q: city,
appid: API_KEY,
units: “metric”, // 摂氏で取得
lang: “ja”, // 日本語で取得
},
});

const data = response.data;
const weatherDescription = data.weather[0].description;
const temp = data.main.temp;
const humidity = data.main.humidity;

// AIに返すテキスト形式を整形
const resultText = `${city}の天気: ${weatherDescription}, 気温: ${temp}°C, 湿度: ${humidity}%`;

return {
content: [
{
type: “text”,
text: resultText,
},
],
};
} catch (error) {
// エラーハンドリング
return {
content: [
{
type: “text”,
text: `天気情報の取得に失敗しました。都市名を確認してください。エラー: ${error instanceof Error ? error.message : String(error)}`,
},
],
isError: true,
};
}
}
);

// サーバーの起動
const transport = new StdioServerTransport();
await server.connect(transport);
“`

コードの重要ポイント解説

1. 入力スキーマの定義 (Zod):
`z.string().describe(…)` の部分は非常に重要です。AI(Claudeなど)は、この `describe` の内容を読み取って、「どのような引数を渡すべきか」を判断します。ここに「都市の名前(例: Tokyo)」と具体的に書くことで、AIのパラメータ抽出精度が向上します。

2. 外部APIとの通信:
`axios.get` を使用して OpenWeatherMap API を叩いています。ここでは `units: “metric”` を指定して摂氏温度を取得し、`lang: “ja”` で日本語の天気概況を取得するように設定しています。MCPサーバーは単なる中継役なので、通常のWeb開発と同じようにAPI連携を記述できます。

3. レスポンスの整形:
AIへの返り値は、人間が読むための文章ではなく、構造化されたデータ(JSONオブジェクトなど)でも構いませんが、最終的にLLMが解釈しやすいように必要な情報(天気、気温、湿度)を抽出してテキスト化しています。`content` 配列の中に `type: “text”` として結果を含めるのがMCPのプロトコル仕様です。

接続と動作確認

このスクリプトをビルドし、Claude DesktopアプリなどのMCPクライアント設定ファイルに追加することで、AIはチャット中に「東京の天気はどう?」と聞かれた際、自動的にこの `get_weather` ツールを呼び出し、最新のAPIデータを元に回答を生成するようになります。

このように、MCPサーバーの実装は「Tool定義」「APIリクエスト」「レスポンス整形」の3ステップが基本です。これを応用すれば、株価情報の取得やデータベース検索など、あらゆる外部リソースとAIを接続することが可能になります。

4. Claude Desktop等での動作確認:AIが最新の天気予報を回答できるようになるまでの手順

自作したMCP(Model Context Protocol)サーバーの実装が完了したら、いよいよClaude Desktopアプリと連携させて実際の動作確認を行います。ここが開発における最も重要なフェーズです。手元のローカル環境で動作しているMCPサーバーをClaudeが認識し、ユーザーの質問に応じて自律的に外部APIを叩き、最新の気象情報を取得する一連の流れを確立しましょう。

設定ファイルへのサーバー登録

Claude Desktopに自作のMCPサーバーを認識させるには、設定ファイルである `claude_desktop_config.json` を編集する必要があります。このファイルはOSによって格納場所が異なるため、以下のパスを確認してください。

* macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
* Windows: `%APPDATA%\Claude\claude_desktop_config.json`

このJSONファイルを開き(存在しない場合は作成し)、`mcpServers` オブジェクト内に今回作成した天気予報サーバーの設定を追記します。Pythonで実装した場合とNode.jsで実装した場合でコマンドが異なるため、環境に合わせて記述してください。

以下は、典型的な設定記述例です。

“`json
{
“mcpServers”: {
“weather-server”: {
“command”: “python”,
“args”: [
“/absolute/path/to/your/weather-server/main.py”
],
“env”: {
“OPENWEATHER_API_KEY”: “取得したAPIキーをここに記述”
}
}
}
}
“`

ポイントは、スクリプトのパスを必ず「絶対パス」で指定することです。また、APIキーなどの環境変数は、この設定ファイル内の `env` キーで渡すことで、コードに直接書き込むことなく安全に管理できます。

Claude Desktopでの接続テスト

設定ファイルを保存したら、Claude Desktopアプリを一度完全に終了し、再起動します。アプリが立ち上がると、バックグラウンドでMCPサーバーへの接続が試行されます。

入力欄の右側にあるアタッチメントアイコン(クリップマーク)や、MCPツールを示すアイコン(コンセントやスパナのマークとして表示される場合があります)を確認してください。ここに作成した `get_weather` などのツール定義が表示されていれば、連携は成功です。

実際に天気を聞いてみる

準備が整ったら、AIに対して実際に質問を投げかけます。ここでは単に「天気」と言うだけでなく、引数が正しく渡るかを確認するために具体的な場所を指定しましょう。

プロンプト例:**
「現在の東京の天気を教えてください。」

期待される挙動:**
1. Claudeが質問の意図を理解し、登録されたツールの中から「天気取得ツール」の使用を選択します。
2. 「東京」というパラメータを引数として、ローカルのMCPサーバーへリクエストを送信します。
3. MCPサーバーが外部の天気API(OpenWeatherMapなど)へアクセスし、JSONデータを取得します。
4. その結果がClaudeに返され、Claudeがデータを自然言語に要約して回答します。

画面上では「Running weather-server…」といったツール実行のインジケーターが表示され、その直後に「現在の東京の天気は晴れ、気温は24度です」といった回答が生成されるはずです。

もし「インターネットに接続できません」や「情報を持っていません」と返される場合は、設定ファイルのパス指定ミスや、APIキーの権限エラー、あるいはMCPサーバー側のログ(標準エラー出力)を確認してください。

この動作確認が成功すれば、あなたのClaudeは単なるテキスト生成AIから、リアルタイムの外部データにアクセスできる強力なAIアシスタントへと進化しました。この仕組みを応用すれば、株価情報の取得や社内データベースへの検索など、あらゆる外部リソースをAIに接続することが可能になります。

5. 応用と発展:自作MCPサーバーをカスタマイズして自分だけのAIアシスタントを育てる方法

ここまでOpenWeatherMapなどの外部APIを利用して、AIに現在の天気を教える基本的なMCPサーバーの実装を行いました。しかし、Model Context Protocol(MCP)の真価は、単にデータを取得して表示するだけにとどまりません。ここからは、作成したサーバーをベースに機能を拡張し、あなたの生活や業務フローに完全にフィットした「最強のAIアシスタント」へと進化させるための具体的なアイデアとカスタマイズ手法を解説します。

まず挑戦したいのが、複数のAPIを組み合わせた「マッシュアップ」です。例えば、Google Calendar APIと連携させることで、AIの回答能力は飛躍的に向上します。「明日の午後の予定に合わせて服装を提案して」とClaudeに指示した際、カレンダーから外出予定の有無や場所を読み取り、その地域の天気予報と照らし合わせて「明日は14時から渋谷で会議ですね。雨予報が出ているので、撥水加工のジャケットがおすすめです」といった具体的で文脈を理解したアドバイスが可能になります。これは、単一のツールでは実現できない、MCPサーバーならではの高度な連携です。

次に、独自のビジネスロジックをサーバー側に実装するアプローチも有効です。天気データをそのままAIに渡すだけでなく、Python側で「不快指数」や「洗濯乾燥指数」を計算してから渡すように改良してみましょう。AIモデルに計算を丸投げするよりも、確実な計算式に基づいた数値をコンテキストとして提供することで、ハルシネーション(もっともらしい嘘)を防ぎ、回答の信頼性を高めることができます。例えば、建設現場向けのAIを作るなら、「風速10m以上」というデータを検知した時点で「クレーン作業中止の警告」というフラグをAIに渡すようプログラムしておけば、安全管理アシスタントとして即戦力になります。

また、エラーハンドリングとフィードバックループの強化も忘れてはいけません。外部APIは時にタイムアウトしたり、レート制限にかかったりします。そのような場合に、単にエラーを返すのではなく、「現在の詳細な天気は取得できませんでしたが、過去の統計データに基づくとこの時期は晴れが多いです」といった代替案をAIが提示できるように、例外処理のレスポンスを工夫します。これにより、ユーザー体験(UX)を損なわない堅牢なエージェントシステムを構築できます。

さらに発展的なカスタマイズとして、MCPの「Resources」機能の活用が挙げられます。APIからの動的な情報だけでなく、社内マニュアルや個人のメモ(ローカルのMarkdownファイルなど)をリソースとしてサーバーに読み込ませることで、天気予報と社内規定を組み合わせた回答も可能になります。「台風接近時の出社ルール」をリソースとして持たせておけば、天気予報で暴風警報が予測された際に、自動的にリモートワークを推奨するような自律的な挙動も実現できるでしょう。

このように自作MCPサーバーは、一度動くものを作って終わりではなく、機能を追加すればするほどAIが賢くなるプラットフォームです。APIの追加、ロジックの精緻化、そして独自データの統合。これらを繰り返すことで、汎用的なAIモデルが、あなただけの専属パートナーへと育っていきます。ぜひ、今回の天気予報サーバーを足がかりに、世界に一つだけのAI環境を構築してみてください。

お問い合わせ

Webから業務システム、AI・IoTまで。
まずは以下より無料相談ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次