Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates the MCP replay-based integration test suite to exercise compatibility against a FastMCP server instead of the previous goosed -- mcp developer replay.
Changes:
- Replaced the
goosed -- mcp developerreplay test case with a FastMCP-based replay (uv run --with fastmcp==2.14.4 ...). - Added a minimal FastMCP Python test server (
dividetool) plus new replay and expected results fixtures. - Updated
Cargo.lockto reflect the current workspace version (1.20.0) forgoose-acp.
Reviewed changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| crates/goose/tests/mcp_integration_test.rs | Swaps the replayed MCP test case from goosed to FastMCP and updates tool calls accordingly. |
| crates/goose/tests/fastmcp_test_server.py | Adds a small FastMCP server used when recording the replay. |
| crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py | Adds the recorded stdio replay log for the FastMCP server. |
| crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py.results.json | Adds expected tool-call results for the FastMCP replay. |
| crates/goose/tests/mcp_replays/cargorun--quiet-pgoose-server--bingoosed--mcpdeveloper | Removes the prior goosed developer replay log. |
| crates/goose/tests/mcp_replays/cargorun--quiet-pgoose-server--bingoosed--mcpdeveloper.results.json | Removes the prior expected results for the goosed developer replay. |
| Cargo.lock | Updates lockfile entries to match workspace versioning. |
| vec!["uv", "run", "--with", "fastmcp==2.14.4", "fastmcp", "run", "tests/fastmcp_test_server.py"], | ||
| vec![ | ||
| CallToolRequestParam { name: "text_editor".into(), arguments: Some(object!({ | ||
| "command": "view", | ||
| "path": "/tmp/goose_test/goose.txt" | ||
| }))}, | ||
| CallToolRequestParam { name: "text_editor".into(), arguments: Some(object!({ | ||
| "command": "str_replace", | ||
| "path": "/tmp/goose_test/goose.txt", | ||
| "old_str": "# goose", | ||
| "new_str": "# goose (modified by test)" | ||
| }))}, | ||
| // Test shell command to verify file was modified | ||
| CallToolRequestParam { name: "shell".into(), arguments: Some(object!({ | ||
| "command": "cat /tmp/goose_test/goose.txt" | ||
| })) }, | ||
| // Test text_editor tool to restore original content | ||
| CallToolRequestParam { name: "text_editor".into(), arguments: Some(object!({ | ||
| "command": "str_replace", | ||
| "path": "/tmp/goose_test/goose.txt", | ||
| "old_str": "# goose (modified by test)", | ||
| "new_str": "# goose" | ||
| }))}, | ||
| CallToolRequestParam { name: "list_windows".into(), arguments: Some(object!({})) }, | ||
| CallToolRequestParam { name: "divide".into(), arguments: Some(object!({ | ||
| "dividend": 10, | ||
| "divisor": 2 | ||
| })) } |
There was a problem hiding this comment.
The FastMCP test uses a relative script path ("tests/fastmcp_test_server.py"), but extensions are launched with the test process current_dir (often the workspace root or ./crates in CI), so recording replays will fail to find the script; use an absolute path derived from env!("CARGO_MANIFEST_DIR") (e.g., via concat!) so it works regardless of where cargo test is run from.
| @@ -0,0 +1,29 @@ | |||
| STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"sampling":{},"elicitation":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} | |||
There was a problem hiding this comment.
leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers (in Python 3).
* origin/main: fix: dispatch ADD_ACTIVE_SESSION event before navigating from "View All" (#6679) Speed up Databricks provider init by removing fetch of supported models (#6616) fix: correct typos in documentation and Justfile (#6686) docs: frameDomains and baseUriDomains for mcp apps (#6684) docs: add Remotion video creation tutorial (#6675) docs: export recipe and copy yaml (#6680) Test against fastmcp (#6666) docs: mid-session changes (#6672) Fix MCP elicitation deadlock and improve UX (#6650) chore: upgrade to rmcp 0.14.0 (#6674) [docs] add MCP-UI to MCP Apps blog (#6664) ACP get working dir from args.cwd (#6653) Optimise load config in UI (#6662) # Conflicts: # ui/desktop/src/components/Layout/AppLayout.tsx
…o dkatz/canonical-context * 'dkatz/canonical-provider' of github.com:block/goose: (27 commits) docs: add Remotion video creation tutorial (#6675) docs: export recipe and copy yaml (#6680) Test against fastmcp (#6666) docs: mid-session changes (#6672) Fix MCP elicitation deadlock and improve UX (#6650) chore: upgrade to rmcp 0.14.0 (#6674) [docs] add MCP-UI to MCP Apps blog (#6664) ACP get working dir from args.cwd (#6653) Optimise load config in UI (#6662) Fix GCP Vertex AI global endpoint support for Gemini 3 models (#6187) fix: macOS keychain infinite prompt loop (#6620) chore: reduce duplicate or unused cargo deps (#6630) feat: codex subscription support (#6600) smoke test allow pass for flaky providers (#6638) feat: Add built-in skill for goose documentation reference (#6534) Native images (#6619) docs: ml-based prompt injection detection (#6627) Strip the audience for compacting (#6646) chore(release): release version 1.21.0 (minor) (#6634) add collapsable chat nav (#6649) ...
I also removed the developer extension test from here because we've switched transport types to run that in-process