Manual Extend Integrations - HenriGrimm/Minnow GitHub Wiki
Ways to give Minnow capabilities it does not ship with, and to connect it to things outside itself. All of these live under Settings → Integrations.
The Model Context Protocol is a standard for exposing tools to an AI client. Any MCP server you add contributes its tools to Minnow, named mcp__<server>__<tool>.
Context7 ships enabled by default. It fetches up-to-date documentation for libraries, which is the fix for a model confidently using an API that changed two versions ago. It works without a key; adding one raises your rate limits.
Under Settings → Integrations → MCP servers, paste a standard JSON configuration and choose Add servers:
{
"mcpServers": {
"cloudflare-api": { "url": "https://mcp.cloudflare.com/mcp" },
"linear": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"]
}
}
}You can also give this configuration to an agent and ask it to add the servers. Agents can use the new tools in the same task. Configurations can be saved directly in ~/.minnow/mcp.json using the same mcpServers object; existing Minnow server configurations remain supported.
Adding a server approves its tools. MCP tools are available across modes and agents without per-tool permission prompts. Disable or remove the server to stop access.
Remote servers support Streamable HTTP and legacy SSE ("type": "sse"). Local servers accept command, args, env, and optional cwd; remote servers accept url and optional headers. Local commands must be installed and available on your PATH.
When a remote server requires OAuth, choose Sign in and complete the provider's login in your browser. Minnow handles discovery, dynamic client registration, PKCE, and token refresh, with tokens encrypted locally. Servers that need a registered client can include an oauth object with clientId, optional clientSecret, scope, or clientMetadataUrl. Service accounts can specify grantType: "client_credentials" in that object. Command-based bridges such as mcp-remote manage their own provider login and credential storage.
To let another agent use Minnow's Issues and Brain through MCP, see Connect other agents to Minnow.
Real language intelligence in the Code editor: diagnostics, hover, signature help, go to definition, workspace symbols.
Enabled by default and bundled: TypeScript/JavaScript, Pyright, HTML, CSS, GraphQL, YAML, Bash, Dockerfile.
Available but off until you enable them, because they need the toolchain installed: Rust Analyzer, gopls, clangd, Lua, Terraform, Zig.
Configure under Settings → Integrations → Language servers. The agent gets get_lsp_diagnostics, so "fix the type errors" can be grounded in what the language server actually reports rather than what the model guesses. On a board with worktree isolation, language servers are started per checkout so diagnostics match the code that task is editing.
Minnow has two browser surfaces. The visible preview uses the Electron Chromium view; the isolated Agent Browser uses a server-owned headless Chrome, Edge, Brave, or Chromium session. The browser_* tools cover navigation, snapshots, clicks, fills, screenshots, evaluation, and tab management on either surface.
Use surface: "agent" for private work: call browser_reserve_tab first, keep the returned tab_id, and pass it explicitly to every later action. Agent browser_list shows only tabs owned by that run. Use surface: "user" only when you intentionally want the visible preview; list or create a tab, then pass its explicit tab_id. A tab id does not grant control over another agent's tab, and an agent should not navigate or close tabs it does not own. Release a finished agent tab for inspection or reassignment, or close it to release its browser resources.
Agent Browser tabs use disposable session profiles, do not restore between sessions, allow up to 8 tabs per service, and close popup/page targets. The service does not download a browser; install Chrome, Edge, Brave, or Chromium, or set MINNOW_BROWSER_PATH. browser_screenshot can capture an Agent Browser tab even when its viewer is closed. Open the viewer from the browser sidebar button; Watch, Guide, and Take control are deliberate user controls. The viewer can assign or unassign a tab, close one tab, or clear all tabs. Closing the viewer leaves the service running; quitting Minnow shuts it down.
Both surfaces use the browser navigation allowlist. Localhost is allowed by default. For a new external origin, use the structured ask_question flow and then request_browser_origin_access before retrying navigation; unattended Agent Browser work cannot approve its own blocked origin. The preview tools require the Electron desktop app, while Agent Browser actions are server-dispatched and need Minnow's local server.
Settings → Integrations → Browser:
| Setting | Default |
|---|---|
| Allow navigation | On |
| Allowed origin patterns |
http://localhost:*, http://127.0.0.1:*, https://localhost:*
|
| Restore tabs | On |
| DevTools dock | Bottom |
The allowlist starts at localhost only. Anything else has to be added, or approved when the agent asks. The restoreBrowserTabs setting applies to the visible preview; Agent Browser sessions are disposable.
The /browser-automation skill has the recipes.
Settings → Integrations → Search sets the provider for web_search.
| Provider | Needs |
|---|---|
| Tavily (default) | API key from a free account at tavily.com |
| SearXNG | Optional local installation on port 8899, or an existing instance |
| DuckDuckGo | Nothing |
| Brave | API key |
Result count and API keys are set here. Tavily search accepts domain filters, relative date windows or explicit dates, result count (up to 20), topic, and search depth. Basic search is the default; advanced search uses more credits. These additional search arguments require Tavily as the selected provider.
With a saved Tavily key, agents also have web_map to discover documentation URLs and web_extract to read up to ten selected pages as Markdown. Map defaults to depth 1, a 50-link limit, and external links excluded. Extract accepts an optional query for relevant excerpts and basic or advanced extraction. Both tools use Tavily credits and have their own Off/Ask/Full permissions under Tools. They are available with any selected search provider while Minnow's local server is running.
The Tavily usage group shows the saved key's credit usage, account plan usage, pay-as-you-go usage when available, and a breakdown by endpoint. It loads on opening Search Settings; use Refresh for an updated reading. These totals can include activity outside Minnow. Unavailable values are labeled explicitly.
Settings → Integrations → Servers manages the local processes Minnow runs for you: optional SearXNG and llama-cpp. Enable, auto-start and port are configurable for each. SearXNG auto-start is off on new installations; selecting its install during setup turns it on.
Registered per project and managed from the Code app's dev-server screen: command, working directory, port, auto-start, and which git worktree to run in. Logs and listening ports in one view.
The manage_dev_servers tool gives the model the same controls — list, create, update, delete, start, stop, restart. See Code.
Settings → Integrations → External sends HTTP POSTs when things happen in Minnow.
Subscribable events:
| Event | Fires when |
|---|---|
chat.completed |
A chat turn finishes |
session.created |
A new session starts |
scheduler.job_completed |
A scheduled job finishes |
New subscriptions require an HMAC signing secret of at least 32 characters so your receiver can verify each delivery. API clients can explicitly opt into an unsigned subscription when integrating with a service that cannot verify custom signatures. The signature covers the timestamp and exact request body; receivers should reject stale timestamps and deduplicate the X-Minnow-Delivery identifier.
Destinations and signing secrets are encrypted at rest. Settings shows only the destination origin, not credential-bearing paths or query strings, and URLs containing user:password@host credentials are rejected. Deliveries time out after 10 seconds and retry three times with backoff. Outgoing URLs are resolved, checked against private and special-use networks, and pinned to the approved address for the connection.
Delivery is best effort. Minnow keeps up to 100 queued, running, and delayed-retry deliveries in memory. A full queue drops new deliveries, and stopping or restarting Minnow loses work still pending or retrying. There is no durable outbox or at-least-once delivery guarantee. The X-Minnow-Delivery identifier stays the same across retries of one delivery, so receivers can deduplicate attempts they do receive. The Recent deliveries list is a bounded log of final outcomes, not a view of pending sends or every retry.
Webhook payloads contain event identifiers and operational metadata only. They do not contain prompt text or absolute workspace paths.
Useful for wiring a scheduled job's result into Slack, or logging completions somewhere central.
Plugin packages contribute tools, connections, custom panels and skills. Manage them in Settings → Plugins, or ask Minnow to create one with /build-plugin. Tools register as plugin__<package>__<tool> and retain your permission settings. See Plugins for installation and the authoring API.
Reading and writing PDF, Word and Excel is built in rather than an integration, but it is worth knowing it exists:
-
read_documentextracts text from PDFs and office files, either from disk or from a composer attachment. -
create_pdf,create_spreadsheetandcreate_word_documentwrite real binary files. PDF text uses subsetted fonts covering Latin, Cyrillic, Greek, CJK and emoji. - The file viewer previews PDFs inline and renders spreadsheets and Word documents as sanitized HTML in a locked-down sandbox.