Skip to content

feat(goose): add MCP extensions adapter (global config.yaml) - #1842

Merged
dyoshikawa merged 2 commits into
mainfrom
resolve-scrap-issue-1823-goose-mcp
Jun 11, 2026
Merged

feat(goose): add MCP extensions adapter (global config.yaml)#1842
dyoshikawa merged 2 commits into
mainfrom
resolve-scrap-issue-1823-goose-mcp

Conversation

@dyoshikawa

Copy link
Copy Markdown
Owner

Summary

Adds an MCP adapter for the goose target. Goose configures MCP servers as extensions in the shared global user config ~/.config/goose/config.yaml (global only — Goose has no project-scoped MCP location), which rulesync previously did not emit.

This is the slice of #1823 the maintainer chose to implement now. Goose Skills and recipes→commands/subagents remain tracked in #1823.

Mapping

Goose's extension schema is non-standard, so canonical MCP fields are mapped:

  • commandcmd (an array command folds its tail into args)
  • envenvs, url/httpUrluri, headersheaders, timeout/networkTimeouttimeout
  • disabled: trueenabled: false
  • type is derived: commandstdio; remote urlstreamable_http (or sse when canonical type is sse)
  • each extension carries its own name

toRulesyncMcp reverses the mapping for import. Generation merges the extensions: block into the existing config.yaml, preserving other Goose settings (model, provider, ...), and the file is never deleted (isDeletable() === false).

Changes

  • New src/features/mcp/goose-mcp.ts (GooseMcp) + unit tests.
  • Registered goose in mcp-processor.ts (supportsProject: false, supportsGlobal: true).
  • README / docs/reference/supported-tools.md mcp column → supported (global); docs/reference/file-formats.md Goose MCP note (skill docs synced).
  • E2E: added goose to the global-mode mcp matrix.

Verification

  • pnpm cicheck:code passes (252 files, 6272 tests); goose global E2E passes.

Part of #1823

🤖 Generated with Claude Code

cm-dyoshikawa and others added 2 commits June 10, 2026 19:09
Goose configures MCP servers as 'extensions' in the shared global user config ~/.config/goose/config.yaml; rulesync emitted nothing for Goose MCP. Add a global-only GooseMcp adapter that maps canonical MCP fields to Goose's non-standard schema (command->cmd with array tail folded into args, env->envs, url/httpUrl->uri, disabled->enabled:false) and derives the extension type (stdio / streamable_http / sse). Generation merges the extensions: block into the existing config.yaml, preserving other Goose settings, and never deletes the file.

Registers goose in the mcp processor (project: false, global: true), flips the README/docs mcp column, adds unit + global E2E tests.

Part of #1823 (Skills and recipes->commands/subagents are left to the maintainer).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…import normalization

Address review: clarify that Goose MCP lives only in the global ~/.config/goose/config.yaml (mirrors Cline's global-only MCP, so no project gitignore entry), and document the intentional import normalization (uri->url, streamable_http->http).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@dyoshikawa
dyoshikawa merged commit 9ab9e63 into main Jun 11, 2026
8 checks passed
@dyoshikawa

Copy link
Copy Markdown
Owner Author

@dyoshikawa Thank you!

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.

2 participants