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!