Skip to content

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

Description

@ArgussLabs

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 <event-id>, 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<McpServerConfig>, 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions