block / block/buzz

buzz-acp: one MCP server per agent forces a choice between the shell and any domain server

Open
#2,899 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

## Summary

`buzz-acp` accepts a single MCP binary (`--mcp-command` / `BUZZ_ACP_MCP_COMMAND`), so an agent gets exactly one MCP server. Because a Buzz agent acts in Buzz by shelling out to the `buzz` CLI — and that shell tool comes from `buzz-dev-mcp` — the single slot is an either/or rather than a preference:

- slot = `buzz-dev-mcp` → the agent can post, but has no domain tools
- slot = a domain MCP server → the agent has domain tools, but no way to post

## Reproduction

Run `buzz-acp` with `BUZZ_ACP_MCP_COMMAND` pointing at any external stdio MCP server (`--agent-command buzz-agent`), add the agent to a channel, and ask it something its domain server can answer.

## Actual behavior

The agent answers internally and never posts. In my run it was offered 61 tools — 60 from the domain server plus `load_skill` — and **zero** shell or `buzz` tools. `default_heartbeat_prompt` (and the reply guidance around `crates/buzz-acp/src/lib.rs:3621`) instructs the agent to run `buzz messages send --reply-to `, which it has no tool to do.

## Expected behavior

An operator can give an agent `buzz-dev-mcp` **and** their own MCP server(s) at once.

## Notes

`PersonaConfig.mcp_servers` is already a `Vec`, and `buzz-persona` parses, merges (`merge_mcp_servers`), and validates it — `buzz pack describe` even prints the count. It is simply never plumbed to the runtime, which uses one `mcp_command` per agent record. So the multi-server intent seems to already be there in the persona layer.

The narrowest fix is at the harness: make `--mcp-command` repeatable and the env var comma-separated, matching the `agent_args` field directly above it in `Args`. Defaults unchanged; a single value behaves exactly as today. Happy to be redirected if you would rather solve this at the persona/runtime layer instead.

I have that change working with tests and will open a PR referencing this issue.

Searched open issues/PRs first: nothing found for multiple MCP servers. Closest adjacent ones are #2883 (keeping `BUZZ_PRIVATE_KEY` out of agent-controlled processes) and #2368 (adding an ACP runtime), neither overlapping.

Environment: `block/buzz` @ `c0d7b52`, macOS, `buzz-agent` runtime.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.