bb mcp
Babashka中的轻量级MCP(模型上下文协议)服务器,通过nREPL将Claude代码连接到Emacs。
为什么选择bb-mcp?
问题: 运行多个Claude Code实例(例如,swarm代理),每个实例都有自己的基于JVM的MCP服务器,这会消耗大量资源。
解决方案: bb-mcp是一种轻量级 多路复用器 -许多Babashka实例共享一个JVM。
| 场景 | 无bb-mcp | 有bb-mcp |
|---|---|---|
| 1个克劳德 | ~500MB | ~550MB(50MB bb+500MB JVM) |
| 3个条款 | ~1.5GB(3个JVM) | ~650MB (3个bb+1个JVM) |
| 5个条款 | ~2.5GB(5个JVM) | ~750MB (5 bb+1 JVM) |
| 10个条款 | ~5GB(10个JVM) | ~1GB (10 bb+1 JVM) |
主要绩效指标
| 度量 | JVM配置单元mcp | bb mcp |
|---|---|---|
| 启动 | ~2-3s | ~5ms |
| 内存 | ~500MB | ~50MB |
| 扩展到 | 1个实例 | 许多实例 |
用例:Claude Swarm
当运行群代理(多个Claude并行工作)时,每个代理都需要一个到Emacs的MCP连接。如果没有bb-mcp,您将需要单独的JVM进程。使用bb-mcp:
- 1个蜂窝mcp (JVM)处理Emacs集成
- N bb mcp 实例(Babashka)多路复用到它
- 所有代理通过单个JVM共享工具、内存、看板、git
建筑
bb-mcp Instances Shared JVM
┌──────────────┐
Claude 1 ───────▶ │ bb-mcp │──┐
└──────────────┘ │
┌──────────────┐ │ ┌─────────────────┐
Claude 2 ───────▶ │ bb-mcp │──┼────▶│ hive-mcp │
└──────────────┘ │ │ (nREPL:7910) │
┌──────────────┐ │ └────────┬────────┘
Claude 3 ───────▶ │ bb-mcp │──┘ │
└──────────────┘ ▼
~50MB each ┌─────────────┐
│ Emacs │
└─────────────┘数据流:
- Claude Code通过mcp协议(stdio)连接到bb-mcp
- bb-mcp直接处理本机工具(bash、grep、文件操作系统)
- Emacs相关工具通过端口7910上的nREPL委托给hive-mcp
- hive mcp通过emacsclient在Emacs中执行elisp
先决条件
- 巴巴什卡 v1.3+
- ripgrep (适用于grep工具)
- 蜂巢mcp 在端口7910上使用nREPL运行
- 蜂巢mcp 在端口7910上使用nREPL运行
安装
# Clone the repository
git clone https://github.com/BuddhiLW/bb-mcp.git
cd bb-mcp
# Add to Claude Code MCP config
claude mcp add bb-mcp bb -- -m bb-mcp.core配置
nREPL端口分辨率
bb mcp按以下顺序找到nREPL端口:
- 显式参数 -
port在工具调用中 - 环境变量 -
BB_MCP_NREPL_PORT - .nrepl端口文件 -In
BB_MCP_PROJECT_DIR或当前目录 - 默认 -端口7910(蜂窝mcp)
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
BB_MCP_NREPL_PORT | 用于连接到 | 7910的nREPL端口 |
BB_MCP_PROJECT_DIR | .nrepl端口查找目录 | 当前目录 |
HIVE_MCP_DIR | 用于自动生成的hive mcp目录 | ~/dotfiles/gitthings/hive mcp |
工具
bb mcp提供 114工具 (6个本地+108个来自hive mcp)。
原生工具(6)
无需JVM即可直接在Babashka中运行的快速工具:
| 工具 | 说明 |
|---|---|
bash | 执行shell命令 |
read_file | 读取文件内容 |
file_write | 将文件写入磁盘 |
glob_files | 按glob模式查找文件 |
grep | 使用ripgrep搜索内容 |
clojure_eval | 通过nREPL评估Clojure |
Emacs工具(108动态)
启动时从hive mcp动态加载的工具:
| 域 | 工具 | 描述 |
|---|---|---|
| 缓冲 | 19 | 缓冲区操作、elisp eval、文件导航 |
| 记忆 | 17 | 带TTL的项目内存CRUD,语义搜索 |
| 群集 | 14 | 克劳德群体编排,hivemind |
| 苹果酒 | 12 | Clojure REPL、文档、完成 |
| 可用 | 10 | 通过Magit进行Git操作 |
| 看板 | 8 | 任务/看板管理 |
| 抛射物 | 6 | 项目导航 |
| 组织 | 6 | 组织模式操作,原生看板 |
| 提示 | 5 | 快速捕获、搜索、分析 |
| 频道 | 4 | Emacs事件频道 |
| 天文 | 4 | 多代理通信 |
| 上下文 | 1 | 全上下文聚合 |
动态工具加载
在启动时,bb-mcp通过nREPL查询hive-mcp的所有可用工具,并自动创建转发处理程序。这确保了bb mcp始终具有 自动奇偶校验 使用hive mcp-不需要手动同步。
当hive mcp添加新工具时,bb mcp会在下次启动时自动拾取它们。
用法
作为MCP服务器
# Via bb task
bb mcp
# Directly
bb -m bb-mcp.core连接管理
bb mcp使用 基于状态的检测 要管理hive mcp连接,请执行以下操作:
| 状态 | 条件 | 行动 |
|---|---|---|
:ready | 端口侦听 | 立即连接(0延迟) |
:starting | 锁定文件或进程存在 | 等待指数回退 |
:not-running | 未找到进程 | 生成配置单元mcp并等待 |
这消除了竞争条件,即使在多个bb-mcp实例同时启动时,也能确保可靠的启动。
日志转到 ~/.config/hive-mcp/server.log.
项目结构
bb-mcp/
├── bb.edn # Babashka deps and tasks
├── src/bb_mcp/
│ ├── core.clj # Main entry, MCP message loop
│ ├── protocol.clj # JSON-RPC protocol handling
│ ├── nrepl_spawn.clj # Auto-spawn hive-mcp nREPL
│ ├── test_runner.clj # Test runner
│ └── tools/
│ ├── bash.clj # Native: shell execution
│ ├── file.clj # Native: file operations
│ ├── grep.clj # Native: ripgrep wrapper
│ ├── nrepl.clj # nREPL client (bencode)
│ ├── emacs.clj # Emacs tools facade
│ └── emacs/
│ └── dynamic.clj # Dynamic tool loading from hive-mcp
└── test/ # Tests这 emacs/ 目录很小——所有Emacs工具都是在运行时从hivemcp动态加载的,消除了代码重复。
发展
# Run tests
bb test
# Start REPL for development
bb nrepl添加新工具
本地工具 (不需要JVM):
- 添加到相应的文件
src/bb_mcp/tools/(bash、文件、grep) - 注册于
src/bb_mcp/core.clj原生工具向量
Emacs工具:改为添加到hive mcp-bb mcp通过动态加载自动拾取它们。
nREPL实施
nREPL客户端(tools/nrepl.clj)使用基于字节的bencode进行正确的UTF-8处理。主要功能:
eval-code-在远程nREPL上评估Clojurebencode-to-bytes/bdecode-from-stream-二进制安全bencode
许可证
麻省理工学院
