📕

ゼロから作るMCPサーバー:クイックスタートで体感する開発の容易さと次の挑戦

に公開

はじめに

こんにちは。MCP(Model Context Protocol)の学習は、ついに「利用」から「開発」のフェーズへ進みました。
MCPサーバーの開発は難易度が高いと思っていましたが、公式ドキュメントのクイックスタートに沿って進めた結果、予想以上に簡単にMCPサーバーを作成し、Claude Desktopで利用可能にできました。

今回は、開発の核となるFastMCP SDKの容易さと、直面した環境設定の壁、そして次に目指す**「日本版Weatherサーバー」の構築**についてまとめます。

1. MCPサーバー開発の壁とFastMCPの威力

MCPサーバーは、AIエージェントの外部機能として動作します。サーバー開発の障壁は高そうに見えますが、Python SDKであるFastMCPのおかげで、その難易度は大きく下がります 。

🛠️ 開発を容易にする FastMCP の仕組み

FastMCPの最大の利点は、Pythonの型ヒントとドキュメント文字列(Docstrings)を使用してツール定義を自動生成することです 。

デコレーターの利用: 関数に @mcp.tool() デコレーターを付けるだけで、MCPの複雑な仕様を意識することなくツール定義が完了します 。

コードの簡素化: SDKを使わず自前で実装した場合、MCP仕様に準拠した複数のエンドポイントを作成する必要があり、開発の負担となります 。

🔨 クイックスタートの環境設定

開発を始める前に、以下の手順でプロジェクト環境を設定しました 。

プロジェクト作成(コマンドプロンプト / ターミナル): uv init weatherでプロジェクトを作成し、uv venvで仮想環境を構築 。

依存関係のインストール(コマンドプロンプト / ターミナル): uv add mcp[cli] httpxでMCP SDKとネットワークライブラリをインストール 。
※仮想環境のアクティベートスクリプト(.venv\Scripts\activate.ps1)を実行できるように、PowerShellの実行ポリシーを一時的に変更します。

サーバーの実行(Claude Desktop): weather.pyファイルにコードを記述し、JSON設定をClaude Desktopに追加 。

⚠️ セットアップの壁: サーバー起動時のJSONファイル編集(インデントやカンマの管理)で時間がかかりましたが、環境設定の厳密さが成功の鍵であることを改めて痛感しました 。

2. 実践デモ:米国版Weatherサーバーの動作検証

クイックスタートで作成したWeatherサーバーは、米国のNWS (National Weather Service) APIを利用して、get_alerts(警報取得)とget_forecast(予報取得)という2つのツールを提供します 。

動作の流れ(ラスベガスの天気の場合)

質問: ユーザーが「今日のラスベガスの天気は?」と質問 。

推論: Claudeは利用可能なツールを分析し、get_forecastツールを選択 。

ツール実行: クライアントがMCPサーバーを通じてget_forecastを実行(ラスベガスの座標を引数として渡す) 。

データ取得: サーバー内のヘルパー関数がNWS APIにリクエスト 。

回答: 取得結果に基づき、Claudeが自然言語で回答を生成 。

デモ結果: Claudeはラスベガスの最高気温、風速、天気、降水確率などを正確に回答しました 。これは、AIが外部のロジックとデータを完全に統合し、自律的に機能していることを示します。

3. 次の挑戦:日本版Weatherサーバーの構築

クイックスタートの成功で、サーバー開発の難易度が下がったことを実感しました。しかし、この米国版サーバーは日本の天気に対応していません 。

次の目標は、この成功体験を応用し、日本版のカスタムWeatherサーバーを作成することです。

目標: 気象庁の防災情報XMLフォーマット(PULL型)データを活用し、日本国内の天気予報を取得するツールを作成する。

課題: 気象庁のXMLパースは複雑なため、既存のPythonチュートリアル(例: aitc-api-tutorial-jma)を参照して、データ処理の課題を解決します。

MCPサーバー開発という一歩を踏み出したことで、AIエージェントの機能を自分のニーズに合わせてローカライズできるという大きな可能性が見えました。次回は、この挑戦の記録を共有したいと思います。

参考文献

https://www.shuwasystem.co.jp/book/9784798075730.html

https://modelcontextprotocol.io/docs/develop/build-server

Discussion