Skip to content

feat(mcp): add project-scoped Goose MCP via open plugins#2086

Merged
dyoshikawa merged 2 commits into
mainfrom
resolve-issue-2078-goose-project-mcp
Jun 30, 2026
Merged

feat(mcp): add project-scoped Goose MCP via open plugins#2086
dyoshikawa merged 2 commits into
mainfrom
resolve-issue-2078-goose-project-mcp

Conversation

@dyoshikawa

Copy link
Copy Markdown
Owner

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 mcp in project mode emitted nothing.

Changes

  • src/features/mcp/goose-mcp.ts: project-scope emission to .agents/plugins/rulesync/.mcp.json using the Claude-style mcpServers shape (command/args/env/cwd), reusing the .agents/plugins/rulesync/ tree already used for Goose hooks. Global behavior (~/.config/goose/config.yaml merge) is unchanged.
  • Scope limit honored: the open-plugins manifest is stdio-only, so remote (http/sse/streamable_http/builtin) servers are skipped with a warning in project mode rather than silently dropped, and this is documented in file-formats.md.
  • src/features/mcp/mcp-processor.ts: Goose supportsProject now true; threads logger into fromRulesyncMcp.
  • New path constants in 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.
  • Updated file-formats.md Goose MCP section (stdio-only project limitation); regenerated supported-tools tables and .gitignore (**/.agents/plugins/rulesync/.mcp.json).

Verification

pnpm cicheck fully green: 292 test files, 6570 tests passing; sync-skill-docs, gitignore, supported-tools, cspell, secretlint all pass.

References

Closes #2078

cm-dyoshikawa and others added 2 commits June 29, 2026 22:31
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>
@dyoshikawa
dyoshikawa merged commit 6e8f147 into main Jun 30, 2026
8 checks passed
@dyoshikawa
dyoshikawa deleted the resolve-issue-2078-goose-project-mcp branch June 30, 2026 05:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Follow up Goose upstream updates: project-scoped MCP via open plugins (.agents/plugins/<name>/.mcp.json, v1.39.0)

2 participants