AIエージェントを作りたい人は全員これを読んだ方がいい。Mastra公式が、MCPの呼び出し成功率を12%から97%に改善したノウハウを公開していて、めっちゃ参考になる。リプ欄で解説しておくから30秒でも見てみて↓https://mastra.ai/blog/mcp-too...
1️⃣背景 MastraはTypeScriptベースの エージェントフレームワーク。 tool call時にZodスキーマやJSONスキーマを使用。 しかし、GPTやGeminiなどのモデルでは、 失敗が多発していました。 (↑Cline でもよくある) https://x.com/taiyo_ai_gakuse/...
2️⃣原因 Mastraチームは、 30種類のスキーマプロパティと制約を含む テストを作成し各モデルでの挙動を検証した結果、 OpenAI:サポートされていないプロパティがある Gemini:エラーは返さないが、プロパティを無視 Anthropic:大部分のモデルでエラーが発生しない。 下記画像はberfore after↓
3️⃣ 解決策 ① スキーマの変換 各モデルが「解釈しやすいスキーマ形式」に整えることで、呼び出し失敗を防ぐ。 nullable: true → type: ["string", "null"] に変換。 enumの単一要素 → const に置き換え。 minLength: 1 → pattern: ".+" に変換(Google GeminiがminLengthを無視するため)。 モデルによってサポートするJSON Schemaの仕様が異なるため、標準仕様通りでも動かない場合がある。仕様をモデルに最適化することで、エラー回避が可能になる。
② プロンプトへの制約注入 モデルがツールの仕様を完全に理解しないときに、追加で説明することで正しい呼び出しを促す。 やり方↓ スキーマに書かれている制約(例:min: 0, max: 100)を、プロンプト文中に明示的に追加する。 例:「ツールXを使うとき、rateは0〜100の間で指定してください」など。 なぜ必要か↓ 多くのLLMは、スキーマの形式だけでは制約を十分に理解できない。そのため自然言語での強化が必要になる。
③ ツール説明への制約追加 ツール全体の目的と仕様を、モデルが理解しやすいように補足。 やり方↓ ツール自体のdescriptionフィールドに制約を書く。 例:「このツールは郵便番号検索を行います。入力は7桁の数字でなければなりません」など。 補足すると、 モデルが「このツールは何をするのか」を誤解していると、パラメータの使い方も間違える。全体の役割説明と制約をセットで伝えることで成功率を上げられる。
④ プロパティの説明への制約追加(最も効果的) 各引数・フィールド単位でモデルに制約を理解させる。 やり方↓ 各プロパティのdescriptionに制約を明記。 例:「rate: 数値。必須。0〜100の間で指定してください。」 これが最も効果的だった理由は、モデルが個別の引数に対する理解を最も重視するため。
4️⃣ MCP Tool Compatibility Layerの導入 これらの知見を基に、Mastraは 「MCP Tool Compatibility Layer」を開発。 モデルごとのスキーマ解釈の違いを吸収し、 ツール呼び出しの成功率を向上。 OpenAI、Anthropic、Google Gemini、DeepSeek、Metaなどのモデルに対応。
LLMエージェントを運用していて 「ツール呼び出しが不安定」 「モデルごとに動作が違う」 と感じている人には特におすすめ。 Claudeじゃなくてもよくなるかも? 詳細はこちら↓ https://mastra.ai/blog/mcp-too...
Cursor v1.0のアプデ内容はこちら👇 https://x.com/sora19ai/status/...

