What are Extensions?
Extensions in Goose are MCP servers that provide:- Tools: Functions the agent can call (read files, run commands, query APIs)
- Resources: Context the agent can access (file contents, documentation)
- Prompts: Reusable prompt templates
Extension Types
Goose supports three types of extensions:1. Built-in Extensions
Bundled with Goose, run in-process for performance:developer
File operations, shell commands, and development tools
- Read/write files
- Execute shell commands
- Search codebases
memory
Persistent knowledge storage across sessions
- Store facts and learnings
- Retrieve relevant context
- Build knowledge graphs
computercontroller
Desktop automation (macOS)
- Control mouse and keyboard
- Take screenshots
- UI automation
autovisualiser
Chart and visualization generation
- Create charts from data
- Generate plots
- Data visualization
2. Stdio Extensions
External processes communicating via stdin/stdout:3. SSE Extensions
HTTP-based extensions using Server-Sent Events:- Remote MCP servers
- Cloud-hosted tools
- Internal enterprise services
Extension Configuration
Basic Configuration
Advanced Options
Extension Manager
The Extension Manager handles the lifecycle of all extensions:Creating Custom Extensions
MCP Server Basics
An MCP server exposes tools, resources, and prompts:Tool Definition
Tools are defined with JSON Schema parameters:Using the Extension
Built-in Extension: Developer
The most commonly used extension provides file and shell tools:Extension Security
Environment Variable Protection
Goose blocks dangerous environment variables:Permission System
Tools can require user confirmation:Malware Scanning
Goose scans downloaded extensions:Process Isolation
Each extension runs in a separate process:Resources (MCP)
Extensions can provide resources that the agent reads:Prompts (MCP)
Extensions can provide reusable prompts:Extension Discovery
Goose discovers extensions from:- Built-in: Bundled extensions
- Config file:
~/.config/goose/config.yaml - Recipe: Defined in recipe YAML
- Runtime: Dynamically added via API
Dynamic Extension Management
Extensions can be loaded/unloaded at runtime:OAuth Extensions
Extensions can use OAuth for authentication:- Opens browser for user authentication
- Exchanges code for tokens
- Stores tokens securely
- Refreshes tokens when expired
Best Practices
Keep tools focused and composable
Keep tools focused and composable
Each tool should do one thing well:
Provide clear descriptions
Provide clear descriptions
The AI uses descriptions to choose tools:
Handle errors gracefully
Handle errors gracefully
Return useful error messages:
Use resources for static context
Use resources for static context
Resources are more efficient than tools for static data:
Validate inputs thoroughly
Validate inputs thoroughly
Don’t trust AI-generated arguments:
Troubleshooting
Common Issues
“Extension failed to initialize”Next Steps
Recipes
Configure extensions in recipes
MCP Documentation
Learn the MCP specification
Example Extensions
Build your own MCP servers
Built-in Extensions
Reference for bundled extensions