What is MCP?
MCP is an open protocol for connecting AI agents to external capabilities. Think of it as a plugin system for AI - MCP servers expose functionality that goose can discover and use dynamically.Tools
Functions the agent can call (e.g., file operations, API calls)
Resources
Data sources the agent can read (e.g., databases, files)
Prompts
Pre-defined prompt templates for common tasks
Built-in Extensions
Goose includes several built-in MCP servers:Developer Extension
Code editing and shell access:read_file: Read file contentswrite_file: Create or overwrite filesedit_file: Patch existing filesrun_command: Execute shell commandslist_directory: List directory contents
AutoVisualiser
Data visualization and charting:create_chart: Generate charts from data (line, bar, pie, scatter)create_dashboard: Multi-chart dashboardssave_visualization: Export to PNG/SVG
ComputerController
Web scraping and document processing:web_scrape: Extract content from web pagescache_page: Save pages for offline accessautomation_script: Browser automation workflowsread_pdf: Extract text from PDF filesread_docx: Parse Word documents
Memory
Persistent storage across sessions:store_memory: Save key-value pairsretrieve_memory: Fetch stored valueslist_memories: Browse all stored datadelete_memory: Remove entries
Adding External Extensions
Interactive Configuration
The easiest way to add extensions:- Extension name
- Transport type (stdio, SSE)
- Command and arguments
- Environment variables
Manual Configuration
Edit~/.config/goose/config.yaml:
MCP Server Examples
Filesystem Access
Provides file read/write operations:PostgreSQL Database
Query and manage PostgreSQL databases:GitHub Integration
Interact with GitHub repositories and issues:Slack Integration
Send messages and manage Slack workspaces:Custom Python Server
Run your own MCP server:Transport Types
stdio (Standard Input/Output)
Most common transport - communication via stdin/stdout:- Simple to implement
- Works with any language
- Portable across platforms
SSE (Server-Sent Events)
HTTP-based transport for remote servers:- Remote server deployment
- Can serve multiple clients
- Works through firewalls
SSE requires a server implementing the MCP SSE specification. See the MCP Protocol guide for details.
Extension Security
Goose includes several security features for extensions:Permission Prompts
By default, goose prompts before executing tools:- prompt: Ask each time (default)
- allow: Auto-approve all tool calls
- deny: Block all tool execution
Environment Variable Filtering
Goose filters sensitive environment variables before passing them to extensions. Variables likeAPI_KEY, TOKEN, SECRET, and PASSWORD are not exposed unless explicitly specified in the extension configuration.
Output Scanning
Extension outputs are scanned for:- Potential malware patterns
- Command injection attempts
- Path traversal attacks
Using Extensions in Sessions
CLI
Extensions from your config are automatically available in sessions:One-time Extension Use
Add an extension for a single session:Recipes
Specify required extensions in recipes:Discovering Extension Capabilities
List Available Tools
View tools provided by extensions:Programmatic Discovery
Using the server API:Troubleshooting
Extension won't start
Extension won't start
Check that:
- The command is in your PATH:
which npxorwhich python - Required dependencies are installed:
npm install -gorpip install - The extension has correct permissions to execute
- Review logs with
goose session --log-level debug
- Node.js extensions require
npx(comes with Node.js) - Python extensions may need
uvx(install withpip install uv)
Tools not available in session
Tools not available in session
Verify that:
- The extension is enabled in config:
enabled: true - The extension started successfully (check logs)
- Tools were properly registered (look for “Registered tool: …” in logs)
- No conflicting extensions with the same tool names
Permission denied errors
Permission denied errors
This usually means:
- The extension tried to access a file/resource it doesn’t have permission for
- The goose process doesn’t have necessary permissions
- Grant goose permission to the required resources
- Adjust the extension’s scope (e.g., filesystem path restrictions)
- Run goose with appropriate permissions (avoid
sudounless necessary)
Extension crashes during execution
Extension crashes during execution
Debug steps:
- Enable debug logging:
goose session --log-level debug - Test the extension standalone (without goose)
- Check the extension’s own logs (if it produces any)
- Verify all required environment variables are set
- Report bugs to the extension maintainer
Next Steps
Extension Development
Build your own MCP servers in Python, TypeScript, or Rust
MCP Protocol
Learn the Model Context Protocol specification
Built-in Extensions
Complete API reference for goose’s built-in extensions
Recipes
Use extensions in automated workflows