前書き
皆様はTavilyを使ってますでしょうか?
最新情報の検索が可能で、LLMとの連携も容易に実現できるツールです。
私は個人的にAmazon Bedrock Agentを構築する際、アクショングループにTavily APIを利用可能なLambda関数をツールとして登録し、最新情報検索を実行させることが多いです。
最近、Mastraの検索ツールとしてTavilyを導入したいと考えていましたが、APIスキーマを毎回記述するのは煩雑であるため、代替手段としてMCPを使って呼び出し方法を検証しました。
MastraとTavily MCPとの連携
プロジェクト初期化
npx create-mastra@latest
選択肢はいくつかありますが、基本的にはAgentsのコンポーネントをチェックする必要があるだけで、他は任意の設定で問題ありません。
Need to install the following packages:
create-mastra@0.2.3
Ok to proceed? (y) y
┌ Mastra Create
│
◇ What do you want to name your project?
│ mastra-mcp
│
◇ Project created
│
◇ npm dependencies installed
│
◇ mastra installed
│
◇ @mastra/core installed
│
◇ .gitignore added
│
└ Project created successfully
┌ Mastra Init
│
◇ Where should we create the Mastra files? (default: src/)
│ src/
│
◇ Choose components to install:
│ Agents, Workflows
│
◇ Add tools?
│ Yes
│
◇ Select default provider:
│ OpenAI
│
◇ Enter your openai API key?
│ Skip for now
│
◇ Add example
│ Yes
│
◇ Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)
│ Cursor
Amazon Bedrockプロバイダーを追加する(任意)
cd mastra-mcp
npm install @ai-sdk/amazon-bedrock
Mastraのmcpライブラリをインストール
npm install @mastra/mcp@latest
MCP用Agentの作成
Tavily公式が以下のMCPリポジトリを公開しています。基本的にはこのリポジトリから呼び出し設定をコピーして使用します。
Agentの説明はTavilyのAPIドキュメントからパラメーターを引用しました。基本的にquery
パラメータがあれば動作します。
import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock";
import { Agent } from "@mastra/core/agent";
import { MCPConfiguration } from "@mastra/mcp";
const bedrock = createAmazonBedrock({
region: "ap-northeast-1",
accessKeyId: "xxxx",
secretAccessKey: "xxxx",
sessionToken: "xxxx",
});
const mcp = new MCPConfiguration({
servers: {
tavily: {
command: "npx",
args: ["-y", "tavily-mcp@0.1.4"],
env: {
TAVILY_API_KEY: "tvly-xxx-xxxx", // Tavilyにログイン後に取得可能です
},
},
},
});
export const mcpAgent = new Agent({
name: "MCP Agent",
instructions: `
あなたはウェブ検索ができるエージェントです。
【情報を求められた場合】
webSearchToolを使用してウェブ検索を実行してください。webSearchToolは以下のパラメータを受け付けます:
- query: 検索クエリ(必須)
- topic: 検索カテゴリ (オプション) generalとnewsを使用できる
回答は常に簡潔ですが情報量を保つようにしてください。ユーザーの質問に直接関連する情報を優先して提供してください。
`,
model: bedrock("anthropic.claude-3-5-sonnet-20240620-v1:0"),
tools: await mcp.getTools(),
});
MCP AgentをMastraに登録
import { Mastra } from "@mastra/core/mastra";
import { createLogger } from "@mastra/core/logger";
import { weatherWorkflow } from "./workflows";
import { weatherAgent } from "./agents";
+ import { mcpAgent } from "./agents/mcpAgent";
export const mastra = new Mastra({
workflows: { weatherWorkflow },
+ agents: { weatherAgent, mcpAgent },
logger: createLogger({
name: "Mastra",
level: "info",
}),
});
これで設定は完了です。サーバーを起動して実際に使用してみましょう。
npm run dev
http://localhost:4111/
にアクセスすると、MCP Agentが追加されていることが確認できます。
このエージェントを選択した状態で、最近発生したタイの地震について質問したところ、最新情報を適切に回答してくれました。
トレースを確認すると、ユーザー入力を適切に変換し、パラメータも正しく使用していることがわかります。