MCP 概要
Model Context Protocol (MCP) は、AIモデルが外部ツールやリソースを発見し、相互作用できるように設計されたオープンスタンダードです。これはAIエージェント向けの汎用プラグインシステムと考えることができ、エージェントがツールの記述言語やホスティング場所に関係なくツールを使用できるようにします。
Mastraは、エージェントを外部ツールサーバーに接続するためにMCPを使用しています。
MCPクライアントでサードパーティツールを使用する
Mastraは、1つまたは複数のMCPサーバーへの接続を管理し、そのツールにアクセスするためのMCPClient
クラスを提供しています。
インストール
まだインストールしていない場合は、Mastra MCPパッケージをインストールしてください:
npm install @mastra/mcp@latest
MCPClient
の設定
MCPClient
は、接続したいサーバーのマップで設定します。サブプロセス(Stdio)またはHTTP(SSEフォールバック付きのストリーム可能なHTTP)を介した接続をサポートしています。
import { MCPClient } from "@mastra/mcp";
const mcp = new MCPClient({
servers: {
// Stdioの例
sequential: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-sequential-thinking"],
},
// HTTPの例
weather: {
url: new URL("http://localhost:8080/mcp"),
requestInit: {
headers: {
Authorization: "Bearer your-token",
},
},
},
},
});
詳細な設定オプションについては、MCPClient
リファレンスドキュメントを参照してください。
静的vs動的ツール設定
MCPClient
は、接続されたサーバーからツールを取得するための2つのアプローチを提供し、異なるアプリケーションアーキテクチャに適しています:
機能 | 静的設定 (await mcp.getTools() ) | 動的設定 (await mcp.getToolsets() ) |
---|---|---|
ユースケース | 単一ユーザー、静的設定(CLIツールなど) | 複数ユーザー、動的設定(SaaSアプリなど) |
設定 | エージェント初期化時に固定 | リクエストごとに動的 |
認証情報 | すべての使用で共有 | ユーザー/リクエストごとに変更可能 |
エージェント設定 | Agent コンストラクタでツールを追加 | generate() またはstream() オプションでツールを渡す |
-
静的設定(
getTools()
): 設定されたすべてのサーバーからすべてのツールを取得します。ツール設定(APIキーなど)が静的で、すべてのユーザーまたはリクエスト間で共有される場合に最適です。通常、これを一度呼び出し、結果をAgent
を定義する際のtools
プロパティに渡します。 リファレンス:getTools()
import { Agent } from "@mastra/core/agent"; // ... mcpクライアントの設定 const agent = new Agent({ // ... その他のエージェント設定 tools: await mcp.getTools(), });
-
動的設定(
getToolsets()
): 設定がリクエストごとまたはユーザーごとに変更される可能性があるシナリオ(例:マルチユーザーアプリケーションの異なるテナントに対する異なるAPIキー)向けに設計されています。getToolsets()
の結果をエージェントのgenerate()
またはstream()
メソッドのtoolsets
オプションに渡します。 リファレンス:getToolsets()
import { Agent } from "@mastra/core/agent"; // ... 最初はツールなしでエージェントを設定 async function handleRequest(userPrompt: string, userApiKey: string) { const userMcp = new MCPClient({ /* userApiKeyを含む設定 */ }); const toolsets = await userMcp.getToolsets(); const response = await agent.stream(userPrompt, { toolsets, // 動的ツールセットを渡す }); // ... レスポンスを処理 await userMcp.disconnect(); }
MCPレジストリへの接続
MCPサーバーはレジストリを通じて発見できます。以下は、MCPClient
を使用して人気のあるレジストリに接続する方法です:
mcp.run
mcp.run は事前認証済みの管理されたMCPサーバーを提供しています。ツールはプロファイルにグループ化され、それぞれに固有の署名付きURLがあります。
import { MCPClient } from "@mastra/mcp";
const mcp = new MCPClient({
servers: {
marketing: { // プロファイル名の例
url: new URL(process.env.MCP_RUN_SSE_URL!), // mcp.runプロファイルからURLを取得
},
},
});
重要: mcp.run SSE URLはパスワードのように扱ってください。環境変数などに安全に保存してください。
.envMCP_RUN_SSE_URL=https://www.mcp.run/api/mcp/sse?nonce=...
MCPサーバーでツールを共有する
独自のMastraツールを作成した場合、MastraのMCPServer
クラスを使用して、MCP互換のクライアントにそれらを公開することができます。
これにより、他のユーザーはあなたのコードベースに直接アクセスすることなく、あなたのツールを使用できるようになります。
MCPServer
の使用方法
MCPServer
は、名前、バージョン、共有したいMastraツールで初期化します。
import { MCPServer } from "@mastra/mcp";
import { weatherTool } from "./tools"; // Your Mastra tool
const server = new MCPServer({
name: "My Weather Server",
version: "1.0.0",
tools: { weatherTool }, // Provide your tool(s) here
});
// Start the server (e.g., using stdio for a CLI tool)
// await server.startStdio();
// Or integrate with an HTTP server using startSSE()
// See MCPServer reference for details
詳細な使用方法と例については、MCPServer
リファレンスドキュメントを参照してください。