Model Context Protocol (MCP)について聞いたことはあるけれど、実際にどうやって構築するのか分からないという方へ向けたガイドです。
この記事はMCPシリーズの一部です。トピックが初めての場合は、以前の記事から始めてください:Model Context Protocol (MCP) Servers Explained: A Complete Beginner’s Guide。
概念を理解することは一つのことですが、実際にMCPを使用するAIエージェントを構築することは別のことです。
このガイドでは、MCPサーバーと通信し、外部ツールを使用し、有用な応答を返すシンプルなAIエージェントを構築します。さらに重要なのは、各コンポーネントがなぜ存在し、どのように連携するかを理解することです。
最後には、より高度なAIアプリケーションに拡張できる確かな基盤が得られるでしょう。
構築するもの
AIアシスタントにこう尋ねることを想像してみてください:
「今日のトロントの天気は?」
答えを推測する代わりに、AIは天気ツールに連絡して実際の情報を取得し、自然に応答します。
この一連のインタラクションは、Model Context Protocolを通じて実現されます。
私たちのシンプルなAIエージェントは以下を行います:
- ユーザーの質問を受け取る
- ツールが必要かどうかを判断する
- MCPサーバーを呼び出す
- 構造化データを受け取る
- 最終応答を生成する
天気の例を使用しますが、同じアーキテクチャは以下にも使用されます:
- AIコーディングアシスタント
- カスタマーサポートエージェント
- ドキュメント検索アプリケーション
- データベースアシスタント
- 社内チャットボット
前提条件
始める前に、以下を準備してください:
- Python 3.11以降
- Claude Desktop
- Visual Studio Code(推奨)
- 基本的なPythonの知識
また、公式のMCP Python SDKも使用します。
アーキテクチャの理解
コードを書く前に、MCPアプリケーションを通じてリクエストがどのように流れるかを理解することが役立ちます。
┌──────────┐
│ User │
└────┬─────┘
│
▼
┌───────────────┐
│ Claude Desktop│
└────┬──────────┘
│
▼
┌───────────────┐
│ MCP Client │
└────┬──────────┘
│
▼
┌───────────────┐
│ MCP Server │
└────┬──────────┘
│
▼
┌───────────────┐
│ Custom Tool │
└────┬──────────┘
│
▼
Structured Data
│
▼
Claude generates
natural response
│
▼
User
Enter fullscreen mode Exit fullscreen mode
各コンポーネントには特定の責任があります。
| Component | Responsibility |
|---|---|
| User | Asks a question |
| Claude | Understands the request |
| MCP Client | Sends tool requests |
| MCP Server | Exposes available tools |
| Tool | Performs the requested task |
| Claude | Generates the final response |
ステップ1:プロジェクトの作成
新しいプロジェクトフォルダを作成します。
mkdir weather-agent
cd weather-agent
Enter fullscreen mode Exit fullscreen mode
仮想環境を作成します。
python -m venv .venv
Enter fullscreen mode Exit fullscreen mode
有効化します。
Windows
.venv\Scripts\activate
Enter fullscreen mode Exit fullscreen mode
macOS/Linux
source .venv/bin/activate
Enter fullscreen mode Exit fullscreen mode
MCP SDKをインストールします。
pip install mcp
Enter fullscreen mode Exit fullscreen mode
ステップ2:初めてのMCPサーバーの構築
すべてのMCPサーバーは1つ以上のツールを公開します。
ツールとは、AIモデルが情報が必要なときやアクションを実行する必要があるときに呼び出すことができる単なる関数です。
例には以下が含まれます:
- 天気検索
- 電卓
- ファイルリーダー
- SQLデータベースクエリ
- メール送信
天気ツールを構築してみましょう。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Weather Server")
@mcp.tool()
def get_weather(city: str):
return f"The weather in {city} is sunny and 24°C."
if __name__ == "__main__":
mcp.run()
Enter fullscreen mode Exit fullscreen mode
この例ではハードコードされたデータを返しますが、同じ構造は実際のAPIでも機能します。
ステップ3:コードの理解
何が起こったかを分解してみましょう。
mcp = FastMCP("Weather Server")
Enter fullscreen mode Exit fullscreen mode
MCPサーバーを作成します。
@mcp.tool()
Enter fullscreen mode Exit fullscreen mode
Python関数をMCPツールとして登録します。
def get_weather(city: str):
Enter fullscreen mode Exit fullscreen mode
Claudeが呼び出せるツールを定義します。
mcp.run()
Enter fullscreen mode Exit fullscreen mode
MCPサーバーを起動します。
サーバーが起動すると、Claudeは登録されたすべてのツールを自動的に検出します。
ツールをいつ使用するかを明示的にClaudeに伝える必要はありません。
Claudeはユーザーのリクエストに基づいて判断します。
ステップ4:Claude Desktopとの接続
Claude DesktopはMCPサーバーがどこで実行されているかを知る必要があります。
MCP設定を更新します。
{
"mcpServers": {
"weather": {
"command": "python",
"args": [
"/path/to/weather_server.py"
]
}
}
}
Enter fullscreen mode Exit fullscreen mode
Claude Desktopを再起動します。
すべてが正しく設定されている場合、Claudeは新しい天気ツールを自動的に検出します。
ステップ5:エージェントのテスト
Claudeに尋ねてみましょう:
今日のトロントの天気は?
舞台裏では、このワークフローが実行されます。
User asks question
│
▼
Claude understands request
│
▼
Needs external data?
│
Yes
│
▼
Calls Weather Tool
│
▼
Receives result
│
▼
Writes natural response
│
▼
Returns answer
Enter fullscreen mode Exit fullscreen mode
重要な点に注意してください。
ClaudeはPythonコードを書いているわけではありません。
ツールを使用するタイミングを判断しています。
この判断プロセスこそが、AIエージェントを非常に強力なものにしています。
MCPが重要な理由
MCPがない場合:
Question
↓
LLM guesses
↓
Possible hallucination
Enter fullscreen mode Exit fullscreen mode
MCPを使用する場合:
Question
↓
LLM calls tool
↓
Gets real data
↓
Returns reliable answer
Enter fullscreen mode Exit fullscreen mode
トレーニングデータのみに依存するのではなく、必要に応じて外部システムと対話することができます。
エージェントの拡張
1つのツールを構築したら、追加するのは簡単です。
例:
電卓
calculate(expression)
Enter fullscreen mode Exit fullscreen mode
ファイルリーダー
read_file(filename)
Enter fullscreen mode Exit fullscreen mode
SQLデータベース
query_database(sql_query)
Enter fullscreen mode Exit fullscreen mode
メール送信
send_email()
Enter fullscreen mode Exit fullscreen mode
ドキュメント検索
search_documents(question)
Enter fullscreen mode Exit fullscreen mode
AIはユーザーのリクエストに基づいてどのツールを呼び出すかを選択します。
初心者が犯しがちなミス
1. すべてのプロンプトがツールを使用すると期待する
AIモデルは、ツールが必要だと判断した場合にのみツールを呼び出します。
2. 非構造化テキストを返す
可能な限り、JSONなどの構造化データを返します。
構造化された応答は、言語モデルが理解しやすくなります。
3. 大きなツールを構築する
1つのツールは1つの明確なタスクを実行するべきです。
小さなツールの方がメンテナンスしやすく、AIモデルが正しく使用しやすくなります。
4. エラーハンドリングを無視する
入力を検証し、意味のあるエラーメッセージを返します。
信頼性の高いツールは、信頼性の高いAIアプリケーションにつながります。
次のステップ
シンプルなMCPサーバーを構築したら、実世界の統合で拡張してみてください。
いくつかのアイデア:
- 実際の天気APIに接続する
- ローカルドキュメントを検索する
- PostgreSQLデータベースをクエリする
- GitHubアシスタントを構築する
- Google Calendarに接続する
- ファイル管理アシスタントを構築する
- LangGraphでマルチエージェントシステムを作成する
各プロジェクトは、ここで学んだ同じMCP基盤の上に構築されます。
最後に
初めてのMCPサーバーを構築することは、単なる別のPythonプロジェクトではありません。
言語モデルを実際のツールや実際のデータと接続するための実用的なパターンを紹介します。
AIモデルがすべてを知っていることを期待するのではなく、必要に応じて専門的なツールを発見して使用できるようにします。
AIアプリケーションが進化し続けるにつれ、MCPのようなプロトコルは現代のソフトウェア開発の重要な一部になるでしょう。今これらの概念を学ぶことは、ドキュメントを検索し、APIと対話し、データベースをクエリし、ワークフローを自動化し、現実世界の問題を解決できるアシスタントを構築する準備になります。
1つのツールから始めましょう。
そして、もう1つ追加しましょう。
やがて、単純な会話を超えたタスクを処理できるAIエージェントが完成するでしょう。
読んでいただきありがとうございます
このガイドが役に立った場合は、AIエンジニアリング、MCP、LangGraph、RAG、FastAPI、フルスタック開発に関する記事をフォローしてみてください。
🔗 LinkedIn: https://www.linkedin.com/in/sushyamnagallapati/
Happy building!
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.