1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

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推奨。

インストールコマンド:

pip install mcp jsonrpcserver

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

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

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. サーバーを起動:
    python email_server.py
    
  2. Claude Desktopで設定:
    {
      "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の構築にワクワクしている方は、ぜひお楽しみに!


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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?