
This guide is part of our MCP setup guides, within The MCP Guide. Paths are checked against each app's documentation on the date shown.
In goose, every MCP server is an "extension." To add one in goose Desktop, open the sidebar, click Extensions, then Add custom extension. In the CLI, run goose configure, choose Add Extension and follow the prompts. Advanced users can edit ~/.config/goose/config.yaml directly.
goose is the open-source AI agent from Block. Anthropic's AAIF announcement names "goose by Block" as a founding project of the Agentic AI Foundation (AAIF), alongside MCP. Its GitHub repository now sits under the aaif-goose organization. This guide covers all three setup routes, plus the permission setting you should change first.
Checked against: goose's Using Extensions documentation and the goose GitHub repository on 2 November 2026. eSEOspace did not test goose.
Key Takeaways
- goose extensions are MCP servers; you can add any MCP server, listed or not.
- goose Desktop and
goose configureboth support local commands and remote Streamable HTTP servers. - The config file is
~/.config/goose/config.yaml, in YAML, with anextensionskey. - goose "operates autonomously by default," so set a permission mode before adding servers that can write.
- goose checks external extensions for known malware before activating them.
Before you start: permissions
goose's docs are direct about this: "goose operates autonomously by default." Combined with its built-in Developer extension, that means goose "can execute commands and modify files without your approval." Before connecting business tools, set goose's permission mode and tool permissions so writes need approval. Our permissions and approvals lesson explains what to aim for.
Option 1: goose Desktop
- Click the button in the top-left to open the sidebar.
- Click Extensions.
- Click Add custom extension.
- Fill in the form. goose's example for the Knowledge Graph Memory server:
- Type: Standard IO
- ID:
kgm-mcp(any name you like) - Name: Knowledge Graph Memory
- Command:
npx -y @modelcontextprotocol/server-memory - Add environment variables with the Add button beside each one.
- Set a Timeout for tool calls, then click Add.
Use the toggles on the same screen to turn extensions on or off for new sessions.
Option 2: goose CLI
Run:
goose configure
Then choose Add Extension and pick a type:
- Built-In Extension: one that ships with goose.
- Command-Line Extension: a local command, such as
npx -y @modelcontextprotocol/server-memoryoruvx mcp-wiki. - Remote Extension (Streamable HTTP): a hosted server URL.
The CLI asks for a name, the command or URL, a timeout and any environment variables. goose's docs note that Java and Kotlin extensions are only supported on Linux and macOS.
To add an extension for one session only, use flags:
goose session --with-extension "uvx mcp-server-fetch"
goose session --with-streamable-http-extension "https://example.com/streamable"
Inside a running session, /extension npx -y @modelcontextprotocol/server-memory adds a stdio extension on the fly.
Option 3: Edit config.yaml
goose's docs show this entry for the GitHub server in ~/.config/goose/config.yaml:
extensions:
github:
name: GitHub
cmd: npx
args: [-y, @modelcontextprotocol/server-github]
enabled: true
envs: { "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>" }
type: stdio
timeout: 300
Note the differences from the JSON most clients use: cmd instead of command, envs instead of env, and an explicit type. Checked against goose's docs on 2 November 2026.
A remote server that needs a pre-registered OAuth app looks like this:
extensions:
remote-example:
name: Remote Example
type: streamable_http
uri: https://example.com/mcp
client_id: <YOUR_REGISTERED_CLIENT_ID>
client_secret_key: REMOTE_EXAMPLE_OAUTH_SECRET
scopes:
- example.readonly
enabled: true
timeout: 300
goose's docs explain that remote extensions normally get a client ID automatically through Client ID Metadata Documents or Dynamic Client Registration. You only set client_id when a server supports neither. client_secret_key names a secret stored in goose, and "the secret value itself never goes in the config file." If you leave out scopes, goose uses the server's advertised scopes, "which may be broader than the extension needs."
Built-in extensions you already have
goose ships with several extensions that are MCP servers in their own right. Its docs list Developer (on by default), Computer Controller, Memory, Tutorial and Auto Visualiser, plus platform extensions such as Analyze, Extension Manager, Skills and Summon. In the CLI, enable one with goose configure > Add Extension > Built-In Extension, or start a session with goose session --with-builtin developer.
goose's docs add that you are "free to" use these built-in MCP servers with other agents too. Check what is already on before adding outside servers, so you do not install a second tool that does the same job.
Install links
Server publishers can offer goose deeplinks:
goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol/server-github&timeout=<timeout>&id=<id>&name=<name>&description=<description>
For stdio links, goose's docs say cmd must be one of jbang, npx, uvx, goosed or docker. Remote links use url= and type=streamable_http. Every parameter must be URL-encoded.
Check it worked
Start a session and ask for something only the new extension can do. In Desktop, the button at the bottom of the app shows which extensions are on in the current chat. goose also suggests and enables extensions it thinks a task needs, but those stay on only for that session.
If an extension fails to activate in a locked-down corporate network, goose's docs point to their airgapped and offline setup page.
Common mistakes
- Leaving goose fully autonomous. Set permissions first.
- Writing
commandandenvin YAML. goose usescmdandenvs. - Putting secrets in config.yaml. Use goose's secret store via
goose configure. - Removing an enabled extension. goose's docs say you must disable it first.
Next step
Read Block and MCP for goose's background, and who owns MCP for how the AAIF works. To choose servers, try the MCP server finder.
More in the MCP Guide
Free tools: MCP Config Generator · Client Support Matrix
Latest research: State of MCP: October 2026
Frequently asked questions
Is a goose extension the same as an MCP server?
Yes. goose's docs say extensions "are based on the Model Context Protocol," and you can add any MCP server as an extension even if it is not in goose's directory.
Where is the goose config file?
At ~/.config/goose/config.yaml on macOS (the docs give this path as the example). Extensions are listed under the extensions key.
Does goose support remote MCP servers?
Yes, over Streamable HTTP. Add them as a Remote Extension in goose configure, or with type: streamable_http and a uri in config.yaml.
Does goose ask before running tools?
Not by default. goose's docs say it "operates autonomously by default." Configure the permission mode and tool permissions to require approval.











