feat(mcp): add project-scoped Goose MCP via open plugins#2086
Merged
Conversation
Goose v1.39.0 (2026-06-25, PR aaif-goose/goose#9471) discovers MCP extensions in open plugins at project scope (.agents/plugins/<name>/.mcp.json) and user scope (~/.agents/plugins/<name>/.mcp.json), using the Claude-style { mcpServers: { <name>: { command, args, env, cwd } } } manifest shape. Previously GooseMcp threw unless --global and only wrote ~/.config/goose/config.yaml, so project-mode MCP emitted nothing. Now project mode emits .agents/plugins/rulesync/.mcp.json, reusing the same .agents/plugins/rulesync/ tree already used for Goose hooks, so 'goose' gains a project 'mcp' label. The open-plugins manifest is stdio-only (no url/headers), so remote (http/sse) servers are skipped with a warning in project mode and stay global-config-only. Global behavior (config.yaml extensions, both stdio and remote) is unchanged. Updated getSettablePaths for project scope, flipped the processor meta to supportsProject: true, threaded the logger through fromRulesyncMcp, extended unit/e2e tests (incl. a Goose project-mcp happy path), and documented the stdio-only project limitation. Regenerated supported-tools tables and the derived .gitignore entry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… warning assertion Add goose project-scoped manifest to the orphan-deletion E2E matrix (it became deletable when project scope was added), and assert on the resolved Goose server type instead of the sample server name in the remote-skip warning test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up for Goose upstream updates (#2078). Goose v1.39.0 (2026-06-25, aaif-goose/goose#9471) added MCP extensions in open plugins at project/user scope. rulesync previously treated Goose MCP as global-only, so
--targets goose --features mcpin project mode emitted nothing.Changes
src/features/mcp/goose-mcp.ts: project-scope emission to.agents/plugins/rulesync/.mcp.jsonusing the Claude-stylemcpServersshape (command/args/env/cwd), reusing the.agents/plugins/rulesync/tree already used for Goose hooks. Global behavior (~/.config/goose/config.yamlmerge) is unchanged.file-formats.md.src/features/mcp/mcp-processor.ts: GoosesupportsProjectnow true; threadsloggerintofromRulesyncMcp.src/constants/goose-paths.ts.Tests & docs
goose-mcp.test.ts: project-mode unit tests (remote-skip warning, array-command fold, env sanitization, round-trip).e2e-mcp.spec.ts: added Goose to the project happy-path matrix.file-formats.mdGoose MCP section (stdio-only project limitation); regenerated supported-tools tables and.gitignore(**/.agents/plugins/rulesync/.mcp.json).Verification
pnpm cicheckfully green: 292 test files, 6570 tests passing; sync-skill-docs, gitignore, supported-tools, cspell, secretlint all pass.References
Closes #2078