MCP服务器

Bab是一个基于Bun的TypeScript MCP服务器,专注于委托CLI插件、薄Vercel AI SDK提供层和可重用的MCP工具。

  • by zaherg
  • TypeScript
  • 本地部署
  • 更新于

使用说明

[!重要] 这个项目已经日落,因为大多数工具都可以作为技能文件实现,您可以将其添加到代理中。我将专注于此。新代码将位于 @zaherg/技能.

巴布

巴布展示

[!重要] 这个项目正在大力开发中。预计会有频繁的突破性更改、新功能和返工的内部。如果您在生产中依赖特定版本,请锁定该版本。

Bab是一个基于Bun构建的TypeScript MCP服务器。它的灵感来自 PAL MCP服务器 并专注于委托CLI插件、精简的Vercel AI SDK提供者层和可重用的MCP工具。

为什么叫“巴布”?

Bab 来源于阿拉伯语单词 باب,这意味着 door 或 gateway.

这个名字很适合这个项目,因为Bab充当MCP客户端和它们背后的系统之间的网关:

  • CLI代理工具
  • 人工智能提供商
  • 当地项目背景
  • 未来插件集成

特性

  • MCP服务器通过stdio使用 @modelcontextprotocol/sdk
  • 具有清单发现和可选功能的代理插件系统 adapter.ts
  • 内置代理角色: default, planner, codereviewer, coding
  • 由Vercel AI SDK支持的提供商注册表,具有每个提供商的思维模式映射
  • 用于统一模型路由的ModelGateway:通过ID/别名或插件模型 pluginId/modelName
  • 并行执行的多模型共识、每个模型的温度和思维模式
  • 通过MCP提示协议执行Slash命令(/bab:chat, /bab:review, /bab:think等等)
  • 具有连续支持和20圈限制的内存对话存储
  • 完整的核心和专门的工作流工具套件
  • 默认情况下延迟加载工具(启动时5个工具,启动时17个工具),按需自动加载
  • CLI入口点 serve, add, remove, list, config, selfupdate,以及 test-plugin 命令
  • 插件SDK导出界面通过 @zaherg/bab/sdk
  • 委托环境强化:API密钥和 BAB_* 内部变量永远不会泄露给子进程
  • 专用错误日志位于 ~/.config/bab/logs/error.log 用于快速调试

安装

安装脚本(macOS/Linux)

curl -fsSL https://raw.githubusercontent.com/zaherg/bab/main/scripts/install.sh | bash

选项:

# custom install directory
curl -fsSL https://raw.githubusercontent.com/zaherg/bab/main/scripts/install.sh | bash -s -- --prefix /usr/local/bin

# skip checksum verification (not recommended)
curl -fsSL https://raw.githubusercontent.com/zaherg/bab/main/scripts/install.sh | bash -s -- --no-verify

# install the latest pre-release (beta, rc, or dated builds)
curl -fsSL https://raw.githubusercontent.com/zaherg/bab/main/scripts/install.sh | bash -s -- --prerelease

该脚本将二进制文件下载到临时目录,验证其SHA-256是否符合 checksums.sha256,删除最终安装路径上的macOS隔离xattr,然后 mv是吗 --prefix (默认值 ~/.local/bin).

二进制下载

从获取适用于您平台的最新二进制文件 发布页面:

平台 架构 资产
macOS 苹果硅 bab-darwin-arm64
macOS 英特尔 bab-darwin-x64
Linux x64 bab-linux-x64
Linux ARM64 bab-linux-arm64
chmod +x bab-*
mv bab-* /usr/local/bin/bab

在macOS上,下载的二进制文件带有 com.apple.quarantine xattr和Gatekeeper将阻止执行。通过安装脚本(剥离xatr)重新下载或运行 xattr -d com.apple.quarantine /usr/local/bin/bab 一次。

来源

需要 包子 1.3.9或更新版本。

git clone https://github.com/zaherg/bab.git && cd bab
bun install
bun run build:binary   # compiled binary at dist/bab

自我更新

安装后,更新到最新版本:

bab selfupdate

快速开始

启动MCP服务器:

bab serve

安装第一方插件:

bab add https://github.com/zaherg/bab-plugins

# OR

bab add zaherg/bab-plugins

运行测试套件:

bun test

将Bab连接到MCP客户端

使用已安装的 bab 二进制文件作为本地stdio MCP服务器。替换 /absolute/path/to/bab 输出为:

which bab

法典

把这个加到 ~/.codex/config.toml:

[mcp_servers.bab]
command = "/absolute/path/to/bab"
args = ["serve"]
startup_timeout_sec = 300.0
tool_timeout_sec = 1200.0

然后重新启动Codex或重新加载MCP服务器。

克劳德代码

将Bab添加为用户范围的stdio MCP服务器:

claude mcp add-json --scope user bab \
  '{"type":"stdio","command":"/absolute/path/to/bab","args":["serve"]}'

通过以下方式进行验证:

claude mcp get bab

GitHub Copilot 命令行界面

把这个加到 ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "bab": {
      "type": "local",
      "command": "/absolute/path/to/bab",
      "args": ["serve"],
      "tools": ["*"]
    }
  }
}

您还可以通过Copilot CLI以交互方式添加它 /mcp add.

配置

Bab创造并使用 ~/.config/bab/ 首次运行时:

  • ~/.config/bab/env dotenv样式的环境文件
  • ~/.config/bab/plugins/ 委托插件,每个插件一个目录
  • ~/.config/bab/plugins/<plugin-id>/env 可选的每插件env覆盖合并到全局env文件上
  • ~/.config/bab/prompts/ 即时覆盖或额外的即时资产

注: MCP客户端配置中设置的环境变量优先于 这 ~/.config/bab/env 文件。例如,如果您设置 OPENAI_API_KEY 两者都 MCP配置值获胜。

{
  "mcpServers": {
    "bab": {
      "command": "/absolute/path/to/bab",
      "args": ["serve"],
      "env": {
        "OPENAI_API_KEY": "sk-mcp-value"
      }
    }
  }
}
# ~/.config/bab/env
OPENAI_API_KEY=sk-file-value   # overridden by the MCP config above

支持的提供程序环境变量:

  • GOOGLE_API_KEY
  • OPENAI_API_KEY
  • ANTHROPIC_API_KEY
  • OPENROUTER_API_KEY
  • CUSTOM_API_KEY
  • CUSTOM_API_URL

环境变量

全部 BAB_* 变量在启动时通过Zod模式进行验证。无效值会产生清晰的错误消息。

变量 类型 描述
BAB_DISABLED_TOOLS 逗号分隔 要排除的工具名称 tools/list 不区分大小写
BAB_ENABLED_TOOLS 逗号分隔 如果设置,则仅注册这些工具
BAB_EAGER_TOOLS boolean 设置为 1 在启动时注册所有工具,而不是延迟加载
BAB_PERSIST boolean 设置为 false 禁用报表持久性(默认值: true)
BAB_PERSIST_TOOLS 逗号分隔 仅保留这些工具的报告
BAB_DISABLED_PERSIST_TOOLS 逗号分隔 禁用这些工具的持久性
BAB_CLI_TIMEOUT_MS integer 覆盖代理CLI超时(默认值:5分钟)
BAB_PROVIDER_TIMEOUT_MS integer 覆盖模型调用和发现的提供程序API超时(默认值:60秒)
BAB_MAX_CONCURRENT_PROCESSES integer 最大并发委托进程数(默认值:5)
BAB_LOG_LEVEL string 日志记录级别: debug, info, warn, error (默认值: info). debug 可以在MCP工具错误响应中包括堆栈轨迹;不要在不受信任的MCP客户端上启用它。

例子:

# ~/.config/bab/env
BAB_DISABLED_TOOLS=delegate,tracer
BAB_LOG_LEVEL=debug

或者通过您的MCP客户端配置:

{
  "mcpServers": {
    "bab": {
      "command": "/absolute/path/to/bab",
      "args": ["serve"],
      "env": {
        "BAB_DISABLED_TOOLS": "delegate,tracer"
      }
    }
  }
}

日志记录

日志文件存储在 ~/.config/bab/logs/:

文件 内容
mcp.log 服务器生命周期、工具调用、协议事件(所有级别)
error.log 仅警告和错误——快速调试
<pluginId>.log 每个插件委派 I/O(例如 copilot.log, opencode.log)

集 BAB_LOG_LEVEL=debug 仅用于本地故障排除。调试模式将堆栈跟踪添加到MCP工具错误响应中,因此连接的MCP客户端可以看到文件路径和堆栈帧。

安全

委托子流程将收到一个经过净化的环境:

  • API密钥已剥离: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, GEMINI_API_KEY, OPENROUTER_API_KEY, GITHUB_TOKEN, GH_TOKEN
  • 内部清漆已剥离:全部 BAB_*, CLAUDE_*,以及 CLAUDECODE* 前缀变量
  • 运行时注入变量已剥离: LD_PRELOAD, NODE_OPTIONS, DYLD_INSERT_LIBRARIES等等。
  • 堆栈复写:仅在以下情况下包含在MCP工具错误响应中 BAB_LOG_LEVEL=debug;关闭不受信任的MCP客户端的调试模式
  • 工作目录:已验证位于项目根目录、主目录或tmp中

需要API密钥的插件必须在自己的密钥中声明 env 文件(~/.config/bab/plugins/<id>/env).

代理插件

每个插件都位于 ~/.config/bab/plugins/<plugin-id>/ 并被发现 manifest.yaml.

巴布保持 opencode 捆绑为内置参考插件。安装外部第一方插件:

# Install all first-party plugins (claude, codex, copilot)
bab add zaherg/bab-plugins

# List installed plugins
bab list

# Remove a specific plugin
bab remove <plugin-id>

最小清单形状:

id: echo
name: Echo Plugin
version: 1.0.0
command: echo
roles:
  - default
delegate_api_version: 1

插件还可以通过以下方式为工作流工具提供自定义系统提示 tool_prompts:

tool_prompts:
  codereview: prompts/codereview.txt
  secaudit: prompts/secaudit.txt

当工具通过插件模型路由时,bab使用插件的提示而不是内置的默认值。看 插件创作 了解详情。

可选的 adapter.ts 文件可以实现CLI解析、验证和取消的运行时行为。没有适配器的插件仍然可以被发现,但 delegate 该工具需要一个适配器来执行它们。

内置工具

  • delegate 通过配置的CLI插件运行提示
  • chat, thinkdeep, codereview, planner, consensus 核心工作流工具
  • debug, analyze, tracer, refactor, testgen, docgen, secaudit, precommit, challenge 专用工作流工具
  • list_models 列出配置的提供程序中可用的模型
  • version 返回Bab和运行时版本详细信息

文档

完整文档可在 zaherg.github.io/bab 或在 docs/:

项目布局

src/
  config.ts           # BAB_* env validation, config loading
  server.ts           # MCP server setup, tool registration
  version.ts          # Centralized version constant
  bootstrap.ts        # Core tool names, startup wiring
  delegate/           # Plugin discovery, loading, caching, process runner
  memory/             # Conversation store, report persistence
  prompts/            # Built-in tool and role prompts
  providers/          # Vercel AI SDK registry, model gateway
  tools/              # 17 built-in tools (lazy-loaded by default)
  sdk/                # Plugin author SDK (@zaherg/bab/sdk)
  commands/           # CLI commands (serve, add, remove, list, selfupdate)
  types/              # Shared type definitions
  utils/              # Env sanitization, path containment, logging, tokens
plugins/              # Bundled plugins (opencode)
tests/                # bun:test test suite
docs/                 # GitHub Pages documentation

发展

有用的命令:

bun test
bun run build
bun run build:binary
bunx tsc -p tsconfig.json --noEmit
bun run src/cli.ts serve
bun run src/cli.ts add git@github.com:zaherg/bab-plugins.git --yes
bun run src/cli.ts list
bun run src/cli.ts config
bun run src/cli.ts test-plugin ../bab-plugins/claude

回购目前使用:

  • Bun用于运行时和包管理
  • 带有ES模块的TypeScript
  • Zod v4用于验证
  • 植绒和格式化的生物特征

免责声明

看 免责声明.md.