mirror of
https://github.com/block/buzz.git
synced 2026-10-28 04:51:40 +00:00
## Summary Goose 1.52 starts MCP connections with `server/discover`. `buzz-dev-mcp` rejects that request with `ExpectedInitializeRequest`, preventing Goose from loading its Buzz tools. Upgrade the tool server to rmcp 3.4.1 and adopt the renamed SDK types. Subprocess tests exercise discovery and legacy initialization, tool listing, file reads/edits, invalid arguments, connection survival, and EOF shutdown. Include the server in both Rust unit-test runners and make the cancellation regression approve its shell call before testing cancellation. The native agent retains its independent rmcp 1.x client. Cargo also unifies the existing 3.x dependency used by the mesh smoke harness. ## Validation - Normal `git push` passed all hooks, including Rust tests, Tauri checks, and repository policy checks. - `just ci` passed on the final stack: repository checks, Rust and Tauri tests/lint, desktop tests/build, web build, and mobile checks/tests. - MCP: 78 existing tests and two subprocess lifecycle tests passed; the discovery regression fails with the old SDK. - All 54 native-agent regressions passed on the final stack, including cancellation of a real MCP shell process. - Previously exercised unmodified Goose 1.52 and 1.47 with Sandpit and the real tool server. Allowed workspace operations and permitted network traffic succeeded; disallowed file and network operations were denied. - Live staging desktop check with Goose 1.52: the reply appeared in Buzz, an allowed request returned HTTP 200, and a disallowed request returned CONNECT 403. ## Stack 1. **#8042 → `main`**: deterministic handoff regression. 2. **This PR → #8042**: Goose MCP discovery compatibility. Merge the lower PR first, then retarget this PR to `main`. This diff contains only the compatibility change and its tests; the relay build repair is already on `main` in #8036. --------- Signed-off-by: Alex Rosenzweig <arosenzweig@squareup.com>
53 lines
2.1 KiB
TOML
53 lines
2.1 KiB
TOML
[package]
|
|
name = "buzz-dev-mcp"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
|
|
[lib]
|
|
name = "buzz_dev_mcp"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "buzz-dev-mcp"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
buzz-cli = { path = "../buzz-cli" }
|
|
nostr = { workspace = true }
|
|
tokio = { workspace = true }
|
|
tokio-util = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
# Discovery-based clients (including Goose 1.52) require the modern lifecycle.
|
|
# Keep the native agent's independent MCP client dependency unchanged.
|
|
rmcp = { version = "3.4.1", features = ["server", "transport-io", "macros"] }
|
|
schemars = { workspace = true }
|
|
similar = "3"
|
|
tempfile = "3"
|
|
ignore = "0.4.25"
|
|
tracing = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
# wss:// tool calls use rustls via tokio-tungstenite/reqwest. The workspace
|
|
# pulls both ring and aws-lc-rs transitively, so install ring explicitly.
|
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
|
|
# view_image tool: HTTP fetch (workspace reqwest is already used by buzz-cli;
|
|
# adding it here is essentially free), base64 encoding, and decode/resize.
|
|
reqwest = { workspace = true }
|
|
base64 = "0.22"
|
|
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
|
|
buzz-core = { workspace = true }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
nix = { version = "0.31", default-features = false, features = ["signal", "process"] }
|
|
|
|
# Windows Job Object APIs for the shell tool's timeout kill path: terminating a
|
|
# job kills the bash child AND every MSYS grandchild it forked, the Windows
|
|
# analogue of the Unix killpg above. windows-sys 0.61 is already workspace-
|
|
# resident (pulled transitively), so this adds no new crate. Win32_Security is
|
|
# required because CreateJobObjectW takes a SECURITY_ATTRIBUTES parameter;
|
|
# Win32_System_Threading supplies IO_COUNTERS inside the extended-limit struct.
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_Security", "Win32_System_JobObjects", "Win32_System_Registry", "Win32_System_Threading"] }
|