📠
MastraでMCPサーバー利用時に使用しないツールを除外する
例えば、Supabase MCPサーバーを利用すると、以下のツールが使用できる。
-
supabase_list_tables
: 1つまたは複数のスキーマ内の全テーブルを一覧表示する。 -
supabase_list_extensions
: データベース内の全拡張機能を一覧表示する。 -
supabase_list_migrations
: データベース内の全マイグレーションを一覧表示する。 -
supabase_apply_migration
: データベースにマイグレーションを適用する(DDL操作時に使用)。 -
supabase_execute_sql
: Postgresデータベースで生のSQLを実行する(DDL操作以外で使用)。 -
supabase_list_edge_functions
: Supabaseプロジェクトの全Edge Functionsを一覧表示する。 -
supabase_deploy_edge_function
: SupabaseプロジェクトにEdge Functionをデプロイ(新規作成またはバージョン更新)する。 -
supabase_get_logs
: Supabaseプロジェクトのサービス毎のログを取得する(直近1分以内)。 -
supabase_get_project_url
: プロジェクトのAPI URLを取得する。 -
supabase_get_anon_key
: プロジェクトの匿名APIキーを取得する。 -
supabase_generate_typescript_types
: プロジェクト用のTypeScript型定義を生成する。 -
supabase_create_branch
: Supabaseプロジェクトに開発ブランチを作成する。 -
supabase_list_branches
: Supabaseプロジェクトの全開発ブランチを一覧表示する。 -
supabase_delete_branch
: 開発ブランチを削除する。 -
supabase_merge_branch
: 開発ブランチのマイグレーションとEdge Functionを本番環境にマージする。 -
supabase_reset_branch
: 開発ブランチのマイグレーションをリセットする。 -
supabase_rebase_branch
: 開発ブランチを本番環境の最新状態にリベースする。
何もしない場合、これらのツール情報が毎回LLMに送られる。
コンテキストも多くなるし、どのツールを利用すればよいかAIが混乱してしまう可能性もあるため、確実に使わないツールはできれば除外したい。
実装方法
というわけで、Mastra Agentでツールを取得する段階で、使うツールのみを選択する または 使わないツールを除外するようにフィルタリングする。
import { openai } from '@ai-sdk/openai';
import { Agent } from '@mastra/core/agent';
import { MCPClient } from "@mastra/mcp";
const mcp = new MCPClient({
servers: {
supabase: {
"command": "/Users/user/.volta/bin/npx",
"args": [
"-y",
"@supabase/mcp-server-supabase@latest",
"--access-token",
process.env.SUPABASE_ACCESS_TOKEN || "",
"--project-ref",
process.env.SUPABASE_PROJECT_REF || "",
"--read-only"
]
},
},
});
const allTools = await mcp.getTools();
// 必要なツールのみを選択する場合
const requiredToolNames = ['supabase_execute_sql'];
const filteredTools = Object.fromEntries(
Object.entries(allTools)
.filter(([toolName]) => requiredToolNames.includes(toolName))
);
// 除外するツールを選択する場合
// const toolsToExclude = ['supabase_list_tables'];
// const filteredTools = Object.fromEntries(
// Object.entries(allTools)
// .filter(([toolName]) => !toolsToExclude.includes(toolName))
// );
export const nikeAgent = new Agent({
name: 'Your Agent',
instructions: `You are a helpful assistant.`,
model: openai("gpt-4.1-mini"),
tools: filteredTools,
});
以下のように指定したツールのみが使えるようになっているのがわかる
公式ドキュメント: https://mastra.ai/ja/docs/agents/using-tools-and-mcp
Discussion