【Android 15 タブレット 初登場】Bmax I10 Plus アンドロイド 15 タブレット 10インチ、12GB+128GB+1TB拡張、WidevineL1 Netflix対応、8コアCPU T606 タブレット、6000mAh+Type-C充電+5GWiFi+BT5.0、OTG+顔認識+無線投影+画面分割+FMラジオ、Android 15 タブレット 10インチ wi-fiモデル
¥16,900 (2025年4月25日 13:07 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)USB-C HDMI 変換ケーブル 1M|4K@30Hz 映像出力|Thunderbolt 3/4 完全対応|設定不要/在宅勤務|Type C HDMI 接続ケーブル MacBook Pro/Air(M1/M2/M3)、iPad Pro/Air(M1/M2)、iPhone 15/16 シリーズ、Galaxy S/Note シリーズ 多機種対応
¥849 (2025年4月25日 13:08 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)iPadペンシル2018-2025対応, 13分急速充電アップルペンシル, 手のひら誤操作防止, 傾き感知, 磁気吸着, 5分自動スリープ 長時間使用, iPad タッチペン第11 (A16)/10/9/8/7/6世代、Air 11"/13" M2/M3 2025 /Pro 11"/13" M4 2024 、Mini 第7/6 Gen、Air 3/4/5 Gen に対応
¥1,599 (2025年4月25日 13:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
こんにちは、ふくちです。
最近MCPが激バズワードとして語られていますね。
私も例に漏れず触れ始めており、ついでにMastraで簡単なアプリケーション開発に挑戦しています。
そんな中で上手くBraveSearch MCPが使えない、という事象に遭遇したのでメモとして残しておきます。
原因はあまりにも初歩的なミスだったのですが、原因特定に時間がかかったのでどなたかの助けになればと思います。
- 上手くいかない時は @mastra/core と @mastra/mcp のバージョンを確認しましょう
- 2025/04/10時点では、以下が最新です
- @mastra/core: 0.8.1
- @mastra/mcp: 0.3.8
Mastraでエージェントを構築し、Brave Search MCPを使えるように設定していました。
実装はMastraの公式ドキュメントと以下ブログを参考に行いました。
src/mastra/index.ts
import { Mastra } from "@mastra/core/mastra";
import { createLogger } from "@mastra/core/logger";
import { blogIdeaAgent } from "./agents";
export const mastra = new Mastra({
agents: { blogIdeaAgent },
logger: createLogger({
name: "Mastra",
level: "debug",
}),
telemetry: {
// 省略
},
});
src/mastra/agents/index.ts
import { initializeBedrockClient } from "@/lib/bedrock-client";
import { Agent } from "@mastra/core/agent";
import { MCPConfiguration } from "@mastra/mcp";
const bedrock = initializeBedrockClient();
const mcp = new MCPConfiguration({
id: "brave-search-mcp",
servers: {
// stdio example
github: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-brave-search"],
env: {
BRAVE_API_KEY: process.env.BRAVE_API_KEY ?? "",
},
},
},
});
export const blogIdeaAgent = new Agent({
name: "Blog Idea Agent",
instructions: `
あなたはブログ執筆をサポートするエージェントです。toolsを駆使して情報を検索し、その情報を元にしてブログのネタや構成を考えてください。
返答は日本語でしてください。
1. 情報収集フェーズ
- github_brave_web_searchツールを使用して最新情報を検索してください。
- ユーザーの入力から具体的な検索キーワードや質問文を抽出し、それをquery引数としてgithub_brave_web_searchツールへ渡してください。
- 検索パラメータ:
* query: 検索クエリ(必須)
* country: 検索結果の国コード(例: JP, US)(オプション)
* count: 返される検索結果の最大数(オプション)
* search_lang: 検索言語(例: ja, en)(オプション)
2. ブログ方針決定フェーズ
- 検索結果を分析し、以下の要素を考慮してブログの方針を決定:
* 対象読者層:
- 初心者向け: ハンズオン形式、専門用語の平易な説明
- 中級者向け: 実践的なTips、ベストプラクティス、パフォーマンス最適化
- 上級者向け: アーキテクチャ設計、高度な技術解説、最新トレンドの深堀り
- マネージャー向け: チーム開発の効率化、プロジェクト管理の視点
* コンテンツの目的:
- 教育・学習
- 問題解決
- 最新情報の共有
- ベストプラクティスの提示
3. ブログ構成作成フェーズ
- 決定した方針に基づき、以下の要素を含むブログ構成を作成:
* タイトル案(3-5個)
* 導入部分の構成
* メインコンテンツの章立て
* 結論・まとめの方向性
* 参考資料・リソースの提示方法
`,
model: bedrock("us.anthropic.claude-3-haiku-20240307-v1:0"),
tools: await mcp.getTools(),
});
これでいざ質問…すると、以下のようにクエリが存在しない状態になってしまいました。
BraveSearch MCPにはqueryが必要パラメータであると記載されているのですが、これが存在しないため、検索できないという状態です。
- brave_web_search
- Execute web searches with pagination and filtering
- Inputs:
- query (string): Search terms
- count (number, optional): Results per page (max 20)
- offset (number, optional): Pagination offset (max 9)
Langfuseでトレースを確認すると、確かにどこにも設定されていません。
ログを参照してデバッグしていると、args配下にqueryが設定されるとわかりました。
// ターミナルで確認
DEBUG (github_brave_web_search): Executing tool github_brave_web_search
runId: ""
description: "Performs a web search using the Brave Search API, ideal for general queries, news, articles, and online content. Use this for broad information gathering, recent events, or when you need diverse web sources. Supports pagination, content filtering, and freshness controls. Maximum 20 results per request, with offset for pagination. "
args: {
"query": "",
"count":
}
Claudeに聞くとバージョン確認してみて、と言われたので確認すると…
$ npm view @mastra/mcp
@mastra/mcp@0.3.8 | ISC | deps: 5 | versions: 113
Model Context Protocol (MCP) client implementation for Mastra, providing seamless integration with MCP-compatible AI models and tools.
dependencies:
@mastra/core: ^0.8.1 date-fns: ^4.1.0 uuid: ^11.1.0
@modelcontextprotocol/sdk: ^1.7.0 exit-hook: ^4.0.0
dist-tags:
alpha: 0.3.9-alpha.0 latest: 0.3.8
beta: 0.1.0 storage: 0.0.0-storage-20250225005900
commonjs: 0.0.0-commonjs-20250227130920
$ npm list @mastra/core
nextjs-mastra-agent@0.1.0 /project/path
├── @mastra/core@0.7.0
└─┬ @mastra/mcp@0.3.8
└── @mastra/core@0.8.1
なんかバージョンミスってそうですね…(@mastra/core@0.7.0がある)
ということでこれを最新の0.8.1にしてあげたところ、上手く動作するようになりました。
package.json
"dependencies": {
"@mastra/core": "^0.8.1",
"@mastra/mcp": "^0.3.8",
}
↓
Langfuseで確認すると、argsの中にqueryが存在していました。
ということで、バージョン管理が原因でした。ちゃんちゃん♪
最初に npx mastra@latest init
でプロジェクトを作成したのですが、
その時のデフォルト設定が@mastra/core@0.7.0でした。
その一方で、@mastra/mcpは上記コマンドではインストールされないため、npm install @mastra/mcp@latest
を実行する必要がありました。
これが原因でそれぞれのバージョンがズレてしまっていた、ということでした。いやこんなん気づかんて…
原因だけ見るとなんでこんなところでミスったんや…という感じですが、正直かなり詰まりました。
というのも、これはAgentとMCPの連携部分で問題が起こっており、自身のコードをどうこうするという次元ではないからです。
AgentがBraveSearch MCPを使用する際に必要なqueryを出力してほしいのですが、実装で特に設定できるわけではなく、Agentへのinstruction内で指定するしかないため、かなり八方塞がり感がありました。
今回はバージョン管理が間違えていただけですが、もしも他の原因だった場合、原因の特定が難しそうです。
LLMアプリ開発において、フレームワーク側のバグなのか、LLM側の挙動コントロールができていないのか、というところでかなり悩みそうだなぁということを痛感する経験となりました。
これからもLLMアプリを作って、そこの経験値を溜めていければ良いなと思います!