# Integrations

Crow connects to 20+ external services through MCP servers. The five built-in servers (Memory, Projects, Sharing, Storage, and Blog) work out of the box. External integrations need API keys added to your environment.

## Built-in Servers

These are always available — no API keys needed:

| Server | Tools | Description |
|---|---|---|
| **crow-memory** | 12 tools | Persistent memory (7 tools) + cross-platform context management (5 tools) |
| **crow-projects** | 12 tools | Project pipeline: projects, sources, notes, citations, bibliography, data backends |
| **crow-sharing** | 8 tools | P2P sharing: invite codes, contacts, encrypted sharing, Nostr messaging, inbox |
| **crow-storage** | 5 tools | S3-compatible file storage: upload, list, download (presigned URLs), delete, stats |
| **crow-blog** | 12 tools | Blogging platform: posts, publishing, themes, RSS/Atom feeds, export to Hugo/Jekyll |

## Keeping Your Keys Safe

Each API key only grants access to that one service — a leaked GitHub key can't access your Gmail, for example. But you should still treat every key with care:

- **Only add keys for services you actually use** — fewer keys means less to manage and less risk
- **Never share keys** in screenshots, messages, or public repositories
- **If a key leaks**, revoke it immediately at the service's website and create a new one

For a complete, beginner-friendly security guide, see [SECURITY.md](https://github.com/kh0pper/crow/blob/main/SECURITY.md).

## External Integrations

Add API keys to enable these. For cloud deployments, add keys in your [Render dashboard](https://dashboard.render.com) under Environment.

| Integration | Env Variables | Description | Get API Key |
|---|---|---|---|
| **GitHub** | `GITHUB_PERSONAL_ACCESS_TOKEN` | Repos, issues, PRs, code search | [GitHub Settings](https://github.com/settings/tokens) |
| **Brave Search** | `BRAVE_API_KEY` | Web search, local search | [Brave API](https://brave.com/search/api/) |
| **Slack** | `SLACK_BOT_TOKEN` | Messages, channels, threads | [Slack Apps](https://api.slack.com/apps) |
| **Notion** | `NOTION_TOKEN` | Pages, databases, comments | [Notion Integrations](https://www.notion.so/my-integrations) |
| **Trello** | `TRELLO_API_KEY`, `TRELLO_TOKEN` | Boards, cards, lists | [Trello Power-Ups](https://trello.com/power-ups/admin) |
| **Discord** | `DISCORD_BOT_TOKEN` | Servers, channels, messages | [Discord Developer Portal](https://discord.com/developers/applications) |
| **Google Workspace** | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Gmail, Calendar, Drive, Docs, Sheets, Slides, Chat | [Google Cloud Console](https://console.cloud.google.com/apis/credentials) |
| **Canvas LMS** | `CANVAS_API_TOKEN`, `CANVAS_BASE_URL` | Courses, assignments, grades | Canvas account settings |
| **Microsoft Teams** | `TEAMS_CLIENT_ID`, `TEAMS_CLIENT_SECRET`, `TEAMS_TENANT_ID` | Messages, channels, teams | [Azure Portal](https://portal.azure.com) |
| **Zotero** | `ZOTERO_API_KEY`, `ZOTERO_USER_ID` | Citations, library management | [Zotero Settings](https://www.zotero.org/settings/keys) |
| **arXiv** | *(none)* | Academic paper search, full text | Works out of the box |
| **Obsidian** | `OBSIDIAN_VAULT_PATH` | Vault search, note sync | Local path to vault |
| **Home Assistant** | `HA_URL`, `HA_TOKEN` | Smart home device control | [HA Long-Lived Tokens](https://www.home-assistant.io/docs/authentication/) |
| **Render** | `RENDER_API_KEY` | Deployment management | [Render API Keys](https://dashboard.render.com/account/api-keys) |

## Setup Guides

Detailed step-by-step setup instructions for each integration:

- [GitHub](./github) — Personal access tokens, required scopes
- [Brave Search](./brave-search) — Free API key signup
- [Slack](./slack) — Bot token, OAuth scopes, workspace installation
- [Notion](./notion) — Internal integration setup, page sharing
- [Trello](./trello) — Power-Up API key and token
- [Discord](./discord) — Bot token, message content intent
- [Google Workspace](./google-workspace) — OAuth credentials, API enablement
- [Canvas LMS](./canvas-lms) — Access token, institution URL
- [Microsoft Teams](./microsoft-teams) — Azure AD app registration
- [Zotero](./zotero) — API key and user ID
- [Home Assistant](./home-assistant) — Long-lived access token
- [Obsidian](./obsidian) — Vault path configuration
- [Render](./render) — API key for deployment management

## Self-Hosting Add-ons (Bundles)

These are installable add-ons with Docker Compose configurations. Install with `crow bundle install <id>` or ask your AI.

| Add-on | Type | Description |
|---|---|---|
| **Obsidian** | MCP Server | Vault search, note sync, and knowledge base integration |
| **Home Assistant** | MCP Server | Smart home device control with safety checkpoints |
| **Ollama** | Bundle (Docker) | Local AI models for embeddings, summarization, classification |
| **Nextcloud** | Bundle (Docker) | File sync via WebDAV mount (v1: files only) |
| **Immich** | Bundle (Docker + custom MCP) | Photo library search, album management |
| **Calibre Server** | Bundle (Docker) | OPDS ebook server — search, browse, download |
| **Calibre-Web** | Bundle (Docker) | Web-based ebook reader with shelves and reading progress |
| **Miniflux** | Bundle (Docker) | Minimalist RSS reader with feed management |
| **Audiobookshelf** | Bundle (Docker) | Audiobook and podcast server with progress tracking |
| **Kavita** | Bundle (Docker) | Manga, comics, and ebook reader |
| **Navidrome** | Bundle (Docker) | Music streaming server (Subsonic-compatible) |
| **Paperless-ngx** | Bundle (Docker) | Document management with OCR |
| **Wallabag** | Bundle (Docker) | Read-it-later article archiver |
| **Linkding** | Bundle (Docker) | Lightweight bookmark manager |
| **Shiori** | Bundle (Docker) | Bookmark manager with offline page caching |
| **BookStack** | Bundle (Docker) | Wiki platform (shelves, books, chapters, pages) |
| **Vikunja** | Bundle (Docker) | Task management with kanban boards |
| **Actual Budget** | Bundle (Docker) | Privacy-first personal budgeting |

## How Integration Proxy Works

When deployed via the gateway, external integrations are available through the `/tools/mcp` endpoint. The gateway:

1. Reads which API keys are set in the environment
2. Spawns only the configured MCP servers as child processes
3. Aggregates all their tools into a single `/tools/mcp` endpoint
4. Prefixes tool names to avoid conflicts

This means you add one MCP connection from your AI client (the `/tools/mcp` URL) and get access to all configured external services.

## Adding a New Integration

See the [Architecture > Gateway](../architecture/gateway) page for details on how the proxy system works and how to add new integrations.
