7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MastraからTavily MCP Serverを呼び出す

Posted at

前書き

rectangle_large_type_2_7a9de768745d8342e5fa82e392966642.png

皆様は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パラメータがあれば動作します。

src/mastra/agents/mcpAgent.ts
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に登録

src/mastra/index.ts
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が追加されていることが確認できます。

03A51386-5B9C-43B7-BE57-F9DECD04DB3A_4_5005_c.jpeg

このエージェントを選択した状態で、最近発生したタイの地震について質問したところ、最新情報を適切に回答してくれました。

517F5BFB-D10D-4004-963B-EBC125B9A76C.jpeg

トレースを確認すると、ユーザー入力を適切に変換し、パラメータも正しく使用していることがわかります。

3BE39703-AF1B-43B9-870D-C986759C6544.jpeg

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?