MCPとエージェントAI：自律型AIを構築する | 第1章：エージェントAI入門

## はじめに

AI技術は急速に進化していますが、従来の大規模言語モデル（LLM）は主にテキスト生成に特化していました。しかし、現代のニーズは、単なる回答を超えて、**タスクを自動化し、外部ツールと連携するAI**を求めています。ここで登場するのが**エージェントAI**です。エージェントAIは、ユーザーの指示に基づき、データにアクセスし、アクションを実行する自律型AIです。

**Model Context Protocol（MCP）**は、このエージェントAIの構築を容易にするオープンなプロトコルです。MCPを使えば、AIがGoogle Calendar、Slack、データベースなどの外部リソースにアクセスし、複雑なワークフローを自動化できます。このシリーズでは、MCPを活用してエージェントAIをゼロから構築する方法を学びます。

第1章では、エージェントAIの基本とMCPの役割を紹介します。簡単なMCPサーバーを構築し、エージェントAIの可能性を体感してみましょう！

## エージェントAIとは？

エージェントAIは、以下の特徴を持つAIです：
- **自律性**：ユーザーの指示を解釈し、適切なアクションを自ら選択。
- **コンテキスト認識**：外部データ（カレンダー、メール、データベース）を参照して正確な判断。
- **アクション実行**：ツールやAPIを通じてタスクを実行（例：メール送信、タスク作成）。

### LLMとの違い
従来のLLM（例：ChatGPT、Claude）は、ユーザーの質問に答えるだけでした。たとえば、「明日の予定を教えて」と聞くと、LLMは「カレンダーを見ていないのでわからない」と答えます。一方、エージェントAIは以下のように動作します：
1. Google Calendarにアクセス（MCP経由）。
2. 予定を解析し、ユーザーに要約を提示。
3. 必要なら新しい予定を追加。

この違いは、MCPが外部データやツールとの標準化された接続を提供することで実現します。

## MCPがエージェントAIをどう強化するか？

MCPは、エージェントAIの「神経システム」のような役割を果たします。主な機能は以下の通り：
- **リソース提供**：データ（ファイル、データベース）をAIに提供。
- **ツール統合**：APIやスクリプトをAIが実行可能に。
- **標準化**：異なるツールやAI間で一貫した接続を確保。

### 実際のシナリオ
あなたが「来週のミーティングを準備して」とエージェントAIに依頼したとします。MCPを介して、以下が実行されます：
1. Google Calendarからミーティング予定を取得。
2. Slackで関連する議論を検索。
3. Notionに議事録テンプレートを作成。
4. 必要な参加者にメール通知を送信。

このようなワークフローは、MCPの標準化がなければ、個別のカスタムインテグレーションが必要で、開発が複雑でした。

## なぜMCPでエージェントAIを構築するのか？

MCPを活用する利点は以下の通り：
- **柔軟性**：Google CalendarからQdrantまで、どんなツールとも統合可能。
- **スケーラビリティ**：単一のMCPサーバーで複数のエージェントをサポート。
- **コミュニティの力**：オープンソースのMCPサーバーを利用・拡張可能。
- **セキュリティ**：OAuth 2.1やユーザー同意で安全性を確保。

## 環境の準備

エージェントAIを試すために、以下の環境を準備します：
- **Python 3.8以降**：MCPサーバー構築用。
- **mcpライブラリ**：JSON-RPC通信を処理（仮定のライブラリ、実際は公式ドキュメントを確認）。
- **Claude Desktop**：MCP対応のAIクライアント。
- **テキストエディタ**：VS Code推奨。

インストールコマンド：
```bash
pip install mcp jsonrpcserver
```

## コード例：メールデータを取得するMCPサーバー

エージェントAIの第一歩として、メールデータをリソースとして提供するシンプルなMCPサーバーを構築します。この例では、ダミーのメールデータを返します（実際にはGmail APIなどを使用）。

```python
from mcp import MCPServer

class EmailServer(MCPServer):
    def __init__(self, host, port):
        super().__init__(host, port)
        self.register_resource("get_emails", self.get_emails)

    def get_emails(self, params):
        try:
            # ダミーデータ（実際はGmail APIなどを利用）
            emails = [
                {"from": "alice@example.com", "subject": "ミーティングの提案", "date": "2025-04-15"},
                {"from": "bob@example.com", "subject": "プロジェクト進捗", "date": "2025-04-14"}
            ]
            return {"status": "success", "emails": emails}
        except Exception as e:
            return {"status": "error", "message": str(e)}

if __name__ == "__main__":
    server = EmailServer(host="localhost", port=8087)
    print("メールMCPサーバーを起動中: http://localhost:8087")
    server.start()
```

### コードの説明
- **MCPServer**：JSON-RPC通信を処理するベースクラス。
- **get_emails**：ダミーのメールリストを返すリソース（実際はAPI統合）。
- **register_resource**：リソースを登録し、AIがアクセス可能に。
- **start()**：サーバーを起動。

### テスト方法
1. サーバーを起動：
   ```bash
   python email_server.py
   ```
2. Claude Desktopで設定：
   ```json
   {
     "mcp_servers": [
       {
         "name": "EmailServer",
         "url": "http://localhost:8087",
         "auth": "none"
       }
     ]
   }
   ```
3. Claudeにプロンプト：
   ```
   最近のメールを教えてください。
   ```
   レスポンス例：
   ```
   以下のメールが見つかりました：
   - 送信者: alice@example.com, 件名: ミーティングの提案, 日付: 2025-04-15
   - 送信者: bob@example.com, 件名: プロジェクト進捗, 日付: 2025-04-14
   ```

## 次のステップ

このサーバーは、エージェントAIの基礎です。次の章では、Google Calendarを統合して、実際にスケジュール管理を行うエージェントを構築します。以下のような質問をAIが処理できるようになります：
- 「来週の空き時間を教えて」
- 「新しいミーティングを追加して」

## まとめ

この第1章では、エージェントAIの概念と、MCPがその構築をどのように支援するかを学びました。MCPは、AIを自律的で実用的なアシスタントに変える鍵です。簡単なメールサーバーを構築することで、MCPの可能性を少しだけ体験できました。

次の第2章では、Google CalendarとMCPを統合し、スケジュール管理エージェントの第一歩を踏み出します。エージェントAIの構築にワクワクしている方は、ぜひお楽しみに！

---

役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです！次の章でまたお会いしましょう！