Skip to content

Self-Hosted Bundles

Bundles are pre-configured Docker Compose setups that package Crow with a curated set of integrations for a specific use case.

What is a Bundle?

A bundle is a docker-compose.yml file plus configuration that makes it easy to deploy Crow with specific integrations enabled. Instead of configuring each service individually, users deploy a bundle and get a working setup immediately.

Built-in Bundles

Crow ships with several self-hosting add-on bundles in bundles/:

BundleTypeDescription
obsidianMCP serverConnect Obsidian vault via mcp-obsidian npm package
home-assistantMCP serverSmart home control via hass-mcp npm package
ollamaDocker + skillLocal AI models for embeddings and summarization
nextcloudDocker + skillFile sync via WebDAV mount (v1: files only)
immichDocker + custom MCPPhoto library with custom createImmichServer()

Install with: crow bundle install <id>

Example Use Cases

  • Academic Bundle — Crow + arXiv + Zotero + Google Workspace + Canvas LMS
  • Business Bundle — Crow + Gmail + Calendar + Slack + Trello + Notion
  • Creative Bundle — Crow + Notion + filesystem + GitHub
  • Minimal Bundle — Crow core only (memory + research + sharing)

Creating a Bundle

1. Define the Integration Set

Choose which integrations to include. Each integration needs its environment variables documented.

2. Create docker-compose.yml

Start from the existing docker-compose.yml in the Crow repo and customize:

yaml
services:
  crow-gateway:
    build: .
    ports:
      - "3001:3001"
    environment:
      - NODE_ENV=production
      # Bundle-specific integrations
      - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
      - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
      - TRELLO_API_KEY=${TRELLO_API_KEY}
      - TRELLO_TOKEN=${TRELLO_TOKEN}

3. Create a .env.example

List all required environment variables with comments:

env
# Database: Local SQLite is used automatically — no config needed.

# Google Workspace
GOOGLE_CLIENT_ID=         # From https://console.cloud.google.com
GOOGLE_CLIENT_SECRET=

# Trello
TRELLO_API_KEY=           # From https://trello.com/power-ups/admin
TRELLO_TOKEN=

4. Write a README

Include:

  • What the bundle is for
  • Prerequisites (Docker, API keys)
  • Step-by-step setup instructions
  • Which integrations are included and what they enable

5. Add a manifest.json

json
{
  "id": "your-bundle",
  "name": "Your Bundle Name",
  "version": "1.0.0",
  "description": "What it does",
  "type": "bundle",
  "author": "Your Name",
  "docker": { "composefile": "docker-compose.yml" },
  "skills": ["skills/your-skill.md"],
  "requires": { "env": ["REQUIRED_VAR"] }
}

6. Structure

bundles/your-bundle/
├── manifest.json
├── docker-compose.yml
├── .env.example
├── skills/
│   └── your-skill.md
└── server/              (optional — for custom MCP servers)
    ├── server.js
    └── index.js

Publishing

  1. Create a bundles/your-bundle/ directory in your fork
  2. Submit a PR with the bundle
  3. Once merged, it will appear in the Community Directory

Users can then deploy with:

bash
cd bundles/your-bundle
cp .env.example .env
# Edit .env with API keys
docker compose up -d

Submit

Fork the repo, create your bundle, and submit a PR.

Released under the MIT License.