#24232·mastra

[BUG] @mastra/mcp: 一个函数 `requireToolApproval` 为每个工具设置了静态属性 `requireApproval: true`, 这会强制工具调用并发量为 1

作者: kassol创建于 2026年9月17日更新于 2026年9月17日
标签status: needs triage

软件包版本( V)

  • X-Mastra/mcp 1.1.8.
  • `马斯特拉/核心 ' 1.67.0
  • 示范文本protocol/sdk1.30.0
  • Node.js 24.14.0 (英语).

总结

" MCPClient " 接受 " 必要工具核准 " 作为布尔或功能。 当值是函数时,“建立工具从ListEntry”将函数存储在“需要核准”中,并在所建工具上设置“需要核准=真实”。 旗帜是无条件的. 它不取决于函数返回什么 。

@mastra/core " 读取该静态旗来选择工具调用货币。 如果一个被考虑的工具有需要批准',则该货币变为 1. 核心评价`需要核准' 稍后,在货币决定之后,在工具召唤步骤中。

结果:一概不批准(`()-----------------)的政策仍然使所有MCP工具的呼叫逐一运行。 默认的“可用”战略将效果扩展到运行中的每个工具,包括不属于MCP工具的工具。

复制步骤

安装 QQ-mastra/[email protected]', QQ-mastra/[email protected]', QQmodelcontextprotocol/[email protected]' 和 “zod” 空包, 并带有 “ “ “ 类型” : “ 模块” 。

`mcp-server.mjs':

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 从“ modelcontextprotocol/sdk/server/mcp.js” 导入 { McpServer } ; 从“ sdk/server/stdio.js” 导入{ StdioServer Transport} ; 从“ sod” 导入{ z } ;

Const 服务器 = 新的 McpServer({名:"probe",版本:"1.0"});

服务器. registerToole () "埃乔", {描述:'echo the involution', involutionSchema:{正文:z.string ()}}, aync ({ text}) ({内容: [{键入:‘text', text}}}), (三)

用于(缩写为 ['slow a','slow b']){ 服务器. registerToole () 名称, {描述:'睡眠300毫秒',输入Schema:}, aync () {{{{} 等待新的承诺(r QQ set Timeout(r, 300) ); 返回{内容: [{类型:'text', text: name}}}; {\fn华文楷体\fs16\1cHE0E0E0} (三) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

正在等待服务器. connection(新 StdioServer Transport ());


`repro.mjs':

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
从“ mastra/ core/ agent” 导入{代理} ;
从“ mastra/ mcp” 导入{ CPClient } ;
从 “ node: url” 导入 { file URL ToPath } ;

const 服务器Path = file URLTOPath(新 URL ('./mcp- server.mjs',导入.meta.url));

函数流( 部分) {
返回{
流: 新的可读结构 ({}
开始(c){
a. 用于(各部分的c.enqueue(p);
c. 接近( );
{\fn华文楷体\fs16\1cHE0E0E0}
~ , , ( ) ,
* ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

// Stub 模型:第1步调用两个慢工具,第2步以文字结束跑道.
函数 make Model( 工具名) {
让调用=0;
返回{
规格版本 : “ v2 ” ,
提供者: “ mock” ,
模型Id:"模拟模型",
支持的Urls: QQ,
async doGenerate () { 存档
丢出新错误( 未使用) ;
{\fn华文楷体\fs16\1cHE0E0E0}
async doStream () {
如果(调用++++=0) {
返回流( []
{类型:"流起",警告: []},
{类型:"reswer-metadata",id:"r1",模型Id:"mock",时间戳:新日期(0)},
...toolName.map ((toolName, i) ) ({
类型 : “ 调用工具” ,
工具CallId : ` call-${i},
工具Name
输入 : “% ” ,
·)),
{类型:"完成",完成Reason:
. . . . . . .

内容来源: mastra-ai/mastra