批量执行工具

MCP BatchIt是一个在Model Context Protocol (MCP)生态系统中的聚合服务器,通过单个批量执行请求减少AI代理的令牌使用和网络开销。

  • by ryanjoachim
  • JavaScript
  • 本地部署
  • 60 星标
  • 更新于
在 GitHub 查看 ryanjoachim/mcp-batchit

使用说明

MCP批次

将多个MCP工具调用批处理到一个“Batch_excute”请求中,从而减少AI代理的开销和令牌使用。


目录

  1. 引言
  2. 为什么使用BatchIt
  3. 主要功能和限制
  4. 安装与启动
  5. 多阶段使用
  6. 常见问题解答
  7. 许可证

引言

⚠️ 注意:工作正在进行中

该项目正在积极开发中,以应对几个复杂的挑战:

  • 保持与现有MCP服务器的向后兼容性
  • 使用多连接客户端解决传输复杂性(Cline、Roo、Claude Desktop)
  • 创建适合初学者的实现

虽然功能正常,但随着我们完善解决方案,预计会不断改进和变化。

MCP批次 是一个简单的聚合服务器 模型上下文协议(MCP) 生态系统。它只是暴露了 一 工具: batch_execute。而不是调用多个MCP工具(如 fetch, read_file, create_directory, write_file等等) 分开 消息,你可以 批次 将它们放在一个聚合器请求中。

这大大减少了令牌使用、网络开销和AI代理或LLM对话中的重复上下文。


为什么使用BatchIt

  • 每条消息一个操作 问题: 通常,LLM或AI代理一次只能调用一个MCP工具,这迫使多步任务需要多次调用。

  • 往返次数过多: 10个单独的文件操作可能需要10条消息→ 10 响应。

  • BatchIt的方法:

    1. 只需一个 batch_execute 请求。
    2. 在幕后生成(或连接到)实际的目标MCP服务器(如文件系统服务器)。
    3. 并行运行每个子操作(工具调用),最多可达 maxConcurrent.
    4. 如果一个子操作失败 stopOnError 确实如此,它会阻止新的潜艇行动。
    5. 返回一个合并的JSON结果。

主要功能和限制

特性

  1. 单个“批处理执行”工具

    • 您只需指定一个引用现有MCP服务器工具的子操作列表。
  2. 并行执行

    • 一次运行多个子操作,由以下人员控制 maxConcurrent.
  3. 超时&出错时停止

    • 每个小组赛一个 timeoutMs,如果一个操作失败,您可以跳过剩余的操作。
  4. 连接缓存

    • 重复调用与下游MCP服务器的相同连接,在空闲超时后关闭。

局限性

  1. 中间批次无数据通过
    • 如果子操作#2依赖于#1的输出,则执行多个聚合器调用。
  2. 无部分进展
    • 在每个“batch_excute”的末尾,您将获得所有子操作的结果
  3. 必须使用真正的MCP服务器
    • 如果你生成或连接到聚合器本身,你会看到“找不到工具”。聚合器只有“batch_excute”
  4. 每次呼叫一个目标服务器
    • 每个聚合器调用都引用一个目标MCP服务器。如果你想要多台服务器,你会做更高级的逻辑或单独的调用。

安装与启动

git clone https://github.com/ryanjoachim/mcp-batchit.git
cd mcp-batchit
npm install
npm run build
npm start

BatchIt开始于 标准输入输出 默认情况下,您的AI代理(或任何MCP客户端)都可以生成它。例如:

mcp-batchit is running on stdio. Ready to batch-execute!

您现在可以发送JSON-RPC请求(tools/call 方法, name= "batch_execute")到它。


存储体

使用Cline/Roo Code,您可以通过利用Nick Baumann开发的强大的“记忆库”自定义指令来构建一个上下文项目文档框架。

查看内存库文档

传统方法(19+个电话):

  1. 阅读package.json
  2. 等待响应
  3. 阅读README.md
  4. 等待响应
  5. 列出代码定义
  6. 等待响应
  7. 创建内存库目录
  8. 等待响应
  9. 编写productContext.md
  10. 写入系统Patterns.md
  11. 编写techContext.md
  12. 写入进度.md
  13. 编写activeContext.md
  14. 等待响应(另外5个电话)

总共:约19个单独的API调用(13个操作+6个响应等待)

BatchIt方法(1-3次调用)

多阶段使用

当处理依赖于实时输出的复杂多步任务(如读取文件和生成文档)时,您需要在不同的阶段处理该过程。这是必要的,因为 BatchIt 不支持在同一请求内的子操作之间传递数据。

实施阶段

信息收集

在这个初始阶段,我们通过读取必要的文件(例如。, package.json, README.md).这是通过 批处理执行器 调用文件系统MCP服务器:

{
  "targetServer": {
    "name": "filesystem",
    "serverType": {
      "type": "filesystem",
      "config": {
        "rootDirectory": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit"
      }
    },
    "transport": {
      "type": "stdio",
      "command": "cmd.exe",
      "args": [
        "/c",
        "npx",
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit"
      ]
    }
  },
  "operations": [
    {
      "tool": "read_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/package.json"
      }
    },
    {
      "tool": "read_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/README.md"
      }
    }
  ],
  "options": {
    "maxConcurrent": 2,
    "stopOnError": true,
    "timeoutMs": 30000
  }
}

备注:聚合器生成 @modelcontextprotocol/server-filesystem (通过 npx)并行执行 read_file 操作。

LLM-Only Step(列出代码定义)

此阶段涉及聚合器之外的处理,通常使用LLM或AI代理功能:

<list_code_definition_names>
<path>src</path>
</list_code_definition_names>

此步骤使用Roo Code的 list_code_definition_names 该工具仅供LLM使用。但是,请注意,许多MCP服务器可以提供类似的功能,从而可以在没有LLM请求的情况下完成此过程。

文档创建

最后一个阶段将来自前面步骤的数据(文件内容和代码定义)组合在一起,在 memory-bank 目录:

{
  "targetServer": {
    "name": "filesystem",
    "serverType": {
      "type": "filesystem",
      "config": {
        "rootDirectory": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit"
      }
    },
    "transport": {
      "type": "stdio",
      "command": "cmd.exe",
      "args": [
        "/c",
        "npx",
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit"
      ]
    }
  },
  "operations": [
    {
      "tool": "create_directory",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank"
      }
    },
    {
      "tool": "write_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank/productContext.md",
        "content": "# MCP BatchIt Product Context\\n\\n## Purpose\\n..."
      }
    },
    {
      "tool": "write_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank/systemPatterns.md",
        "content": "# MCP BatchIt System Patterns\\n\\n## Architecture Overview\\n..."
      }
    },
    {
      "tool": "write_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank/techContext.md",
        "content": "# MCP BatchIt Technical Context\\n\\n## Technology Stack\\n..."
      }
    },
    {
      "tool": "write_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank/progress.md",
        "content": "# MCP BatchIt Progress Status\\n\\n## Completed Features\\n..."
      }
    },
    {
      "tool": "write_file",
      "arguments": {
        "path": "C:/Users/Chewy/Documents/GitHub/ryanjoachim/mcp-batchit/memory-bank/activeContext.md",
        "content": "# MCP BatchIt Active Context\\n\\n## Current Status\\n..."
      }
    }
  ],
  "options": {
    "maxConcurrent": 1,
    "stopOnError": true,
    "timeoutMs": 30000
  }
}

聚合器按顺序处理这些操作(maxConcurrent=1),创建目录并编写多个文档文件。结果数组指示每个操作的成功/失败状态。


常见问题解答

Q1:如果子操作#2依赖于子操作#1的结果,我是否需要多个聚合器调用? 对。 BatchIt不会在同一请求中的子操作之间传递数据。您执行多阶段呼叫(如上面的示例)。

Q2:为什么我有时会得到“未找到工具create_directory”? 因为你 transport 可能指向聚合器脚本本身,而不是真正的MCP服务器。确保你引用了以下内容 @modelcontextprotocol/server-filesystem.

问题3:我可以执行并发加stopOnError吗? 当然。如果一个子操作失败,我们将跳过启动新的子操作。已经运行的两个并行完成。

Q4:BatchIt每次都会重新生成目标服务器吗? 它 能 如果您指定 keepAlive: false。但如果你用同样的精确方法 targetServer.name + transport,它会缓存连接,直到空闲超时过去。

问题5:如果中间出现错误,会返回部分结果吗? 对。在错误发生之前完成的每个子操作都包含在最终的聚合器响应中,以及失败的子操作。如果发生以下情况,则跳过剩余的子操作 stopOnError 这是真的。


许可证

麻省理工学院