Model Context Protocol
Model Context Protocol (MCP) は、AIエージェントが一定のインターフェースを通じて外部のツールやサービスとやり取りできるようにするための標準化されたプロトコルです。
MCPは、AIエージェントが呼び出し可能なAPIエンドポイントとして、ツールやプロンプトを公開します。各ツールには特定の名前があり、JSON Schema形式を使用して入出力を記述する入力スキーマ(input schema)を持っています。
KoogフレームワークはMCPサーバーとの統合を提供しており、MCPツールをKoogエージェントに組み込むことができます。
プロトコルの詳細については、Model Context Protocol のドキュメントを参照してください。
MCPサーバー
MCPサーバーはModel Context Protocolを実装し、AIエージェントがツールやサービスとやり取りするための標準化された方法を提供します。
すぐに利用可能なMCPサーバーは、MCP Marketplace または MCP DockerHub で見つけることができます。
MCPサーバーは、エージェントと通信するために以下のトランスポートプロトコルをサポートしています:
- 標準入出力 (stdio) トランスポートプロトコル: 別個のプロセスとして実行されているMCPサーバー(例:DockerコンテナやCLIツール)と通信するために使用されます。
- Server-sent events (SSE) トランスポートプロトコル (オプション): HTTP経由でMCPサーバーと通信するために使用されます。
Koogとの統合
Koogフレームワークは、agent-mcp モジュールで提供される追加のAPI拡張機能とともに、MCP SDK を使用してMCPと統合します。
この統合により、Koogエージェントは以下を行うことができます:
- 様々なトランスポートメカニズム(stdio、SSE)を通じてMCPサーバーに接続する。
- MCPサーバーから利用可能なツールを取得する。
- MCPツールをKoogのツールインターフェースに変換する。
- 変換されたツールをツールレジストリに登録する。
- LLMから提供された引数を使用してMCPツールを呼び出す。
主要コンポーネント
KoogにおけるMCP統合の主なコンポーネントは以下の通りです:
| コンポーネント | 説明 |
|---|---|
McpTool | KoogのツールインターフェースとMCP SDKの間のブリッジとして機能します。 |
McpToolDescriptorParser | MCPツールの定義をKoogのツール記述子フォーマットにパースします。 |
McpToolRegistryProvider | 様々なトランスポートメカニズム(stdio、SSE)を通じてMCPサーバーに接続するMCPツールレジストリを作成します。 |
はじめに
1. MCP接続をセットアップする
KoogでMCPを使用するには、接続をセットアップする必要があります:
- MCPサーバーを起動します(プロセス、Dockerコンテナ、またはWebサービスとして)。
- サーバーと通信するためのトランスポートメカニズムを作成します。
MCPサーバーは、エージェントと通信するためにstdioおよびSSEトランスポートメカニズムをサポートしているため、そのいずれかを使用して接続できます。
stdioによる接続
このプロトコルは、MCPサーバーが別個のプロセスとして実行されている場合に使用されます。以下は、stdioトランスポートを使用してMCP接続をセットアップする例です:
// MCPサーバーを起動する(例:プロセスとして)
val process = ProcessBuilder("path/to/mcp/server").start()
// stdioトランスポートを作成する
val transport = McpToolRegistryProvider.defaultStdioTransport(process)SSEによる接続
このプロトコルは、MCPサーバーがWebサービスとして実行されている場合に使用されます。以下は、SSEトランスポートを使用してMCP接続をセットアップする例です:
// SSEトランスポートを作成する
val transport = McpToolRegistryProvider.defaultSseTransport("http://localhost:8931")2. ツールレジストリを作成する
MCP接続ができたら、以下のいずれかの方法でMCPサーバーのツールを含むツールレジストリを作成できます:
- 通信用のトランスポートメカニズムを使用する場合。例:
// MCPサーバーのツールを使用してツールレジストリを作成する
val toolRegistry = McpToolRegistryProvider.fromTransport(
transport = transport,
serverInfo = McpServerInfo(url = "http://localhost:8931", command = "path/to/mcp/server"),
name = "my-client",
version = "1.0.0"
)- MCPサーバーに接続されたMCPクライアントを使用する場合。例:
// 既存のMCPクライアントからツールレジストリを作成する
val toolRegistry = McpToolRegistryProvider.fromClient(
mcpClient = existingMcpClient,
serverInfo = McpServerInfo(url = "http://localhost:8931")
)3. エージェントに統合する
KoogエージェントでMCPツールを使用するには、ツールレジストリをエージェントに登録する必要があります:
// ツールを備えたエージェントを作成する
val agent = AIAgent(
promptExecutor = executor,
strategy = strategy,
llmModel = OpenAIModels.Chat.GPT4o,
toolRegistry = toolRegistry
)
// MCPツールを使用するタスクでエージェントを実行する
val result = agent.run("MCPツールを使用してタスクを実行してください")利用例
Google Maps MCPの統合
この例では、MCPを使用して地理データ用の Google Maps サーバーに接続する方法を示します:
// Google Maps MCPサーバーを含むDockerコンテナを起動する
val process = ProcessBuilder(
"docker", "run", "-i",
"-e", "GOOGLE_MAPS_API_KEY=$googleMapsApiKey",
"mcp/google-maps"
).start()
// MCPサーバーのツールを使用してToolRegistryを作成する
val toolRegistry = McpToolRegistryProvider.fromProcess(process = process)
// エージェントを作成して実行する
val agent = AIAgent(
promptExecutor = simpleOpenAIExecutor(openAIApiToken),
llmModel = OpenAIModels.Chat.GPT4o,
toolRegistry = toolRegistry,
)
agent.run("ドイツ、ミュンヘンにあるJetBrainsオフィスの標高を教えてください。")Playwright MCPの統合
この例では、MCPを使用してWebオートメーション用の Playwright サーバーに接続する方法を示します:
// Playwright MCPサーバーを起動する
val process = ProcessBuilder(
"npx", "@playwright/mcp@latest", "--port", "8931"
).start()
// MCPサーバーのツールを使用してToolRegistryを作成する
val toolRegistry = McpToolRegistryProvider.fromSseUrl("http://localhost:8931")
// エージェントを作成して実行する
val agent = AIAgent(
promptExecutor = simpleOpenAIExecutor(openAIApiToken),
llmModel = OpenAIModels.Chat.GPT4o,
toolRegistry = toolRegistry,
)
agent.run("ブラウザを開き、jetbrains.comに移動し、すべてのクッキーを承認して、ツールバーのAIをクリックしてください。")