Three-month batch sync from internal repo (~80 commits) covering Tracks F.5a, F.7e, F.8, F.17, F.18, F.X. WordPress media pipeline - Pillow-based optimization, AI image generation (OpenAI / Stability / Replicate / Google Nano Banana / OpenRouter), chunked + resumable uploads, bulk delete/reassign, idempotent retries. Capability discovery (F.7e) - Per-site credential probe + adapters for WordPress / WooCommerce / Gitea, tier-fit unions granted ∪ roles, capability badge UI with HTMX partial re-check, install hint in every companion-unreachable error. Companion plugin overhaul - Renamed wordpress-plugin/airano-mcp-seo-bridge → wordpress-plugin/airano-mcp-bridge. - Eight new endpoints: /capabilities, /bulk-meta, /export, /cache-purge, /transient-flush, /site-health, /audit-hook, /upload-and-attach. - wp.org Plugin Check pass: i18n, WP_Filesystem, scheme allowlist on audit-hook URL. Other - Gitea ergonomics (F.17): batch files, tree, search, compare, releases, fork. - Opportunistic bcrypt upgrade for legacy SHA-256 admin keys (F.8). - n8n refactor: structured errors, capability probe, missing tools backfilled. - Idempotency-Key dedup for AI media upload retries; WP client fast-fails on unreachable sites. Docs - README + CLAUDE.md drop the fixed "633 tools" claim. The total grows with each release; per-plugin approximations + dashboard-surfaced counts replace it. - Tools/Tests badges removed in favour of "Plugins: 10". Deployment - PyPI mirror chain, optional BUILD_HTTP_PROXY, Alpine→Yandex apk mirror, Debian-slim Plan-B Dockerfile, mirror.gcr.io variant. CI - Black + Ruff clean on Python 3.12; pytest tests/ green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
87 lines
2.7 KiB
YAML
87 lines
2.7 KiB
YAML
# ===================================
|
|
# MCP Hub — Docker Compose (Coolify)
|
|
# ===================================
|
|
#
|
|
# Coolify auto-reads the 'environment' block below and shows
|
|
# each variable in the UI for editing. Just deploy and fill values.
|
|
#
|
|
# Setup:
|
|
# 1. New Resource → Docker Compose → point to this file
|
|
# 2. Fill environment variables in Coolify UI
|
|
# 3. Set domain (e.g., mcp.yourdomain.com)
|
|
# 4. Deploy
|
|
#
|
|
# Source mirror note (2026-04-16):
|
|
# Primary repo: github.com/airano-ir/coolify-mcp-hub (public)
|
|
# Gitea mirror: gitea.palebluedot.live/atlatl/mcphub-internal (private)
|
|
#
|
|
# If Coolify cannot reach api.github.com (e.g. cURL error 28 on the
|
|
# api.github.com/zen health probe), point the Coolify Source at the
|
|
# Gitea mirror instead. Revert the source back to GitHub once the
|
|
# GitHub App connection is restored.
|
|
# ===================================
|
|
|
|
services:
|
|
mcp-server:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: mcphub
|
|
restart: unless-stopped
|
|
|
|
# No 'ports' — Coolify reverse proxy routes traffic via EXPOSE 8000
|
|
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
|
|
# === REQUIRED ===
|
|
- MASTER_API_KEY=${MASTER_API_KEY}
|
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
|
- DASHBOARD_SESSION_SECRET=${DASHBOARD_SESSION_SECRET}
|
|
|
|
# === OAUTH SOCIAL LOGIN (for user registration) ===
|
|
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
|
|
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
|
|
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
|
|
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
|
|
- PUBLIC_URL=${PUBLIC_URL:-}
|
|
- SESSION_EXPIRY_HOURS=${SESSION_EXPIRY_HOURS:-168}
|
|
|
|
# === ADMIN SYSTEM (F.4) ===
|
|
- ADMIN_EMAILS=${ADMIN_EMAILS:-}
|
|
- DISABLE_MASTER_KEY_LOGIN=${DISABLE_MASTER_KEY_LOGIN:-false}
|
|
|
|
# === LOGGING ===
|
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
|
|
|
# === SITE MANAGEMENT (E.3) ===
|
|
- MAX_SITES_PER_USER=${MAX_SITES_PER_USER:-10}
|
|
- USER_RATE_LIMIT_PER_MIN=${USER_RATE_LIMIT_PER_MIN:-30}
|
|
- USER_RATE_LIMIT_PER_HR=${USER_RATE_LIMIT_PER_HR:-500}
|
|
|
|
# === SITES ===
|
|
# Sites are managed via the web dashboard (DB-based).
|
|
# After deployment, open the dashboard to add sites.
|
|
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-qO-", "http://localhost:8000/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
|
|
volumes:
|
|
- mcp-data:/app/data # SQLite DB, API keys, OAuth data
|
|
- mcp-logs:/app/logs # Audit logs, health reports
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
|
|
# Coolify uses GID 988 for Docker socket
|
|
group_add:
|
|
- "988"
|
|
|
|
volumes:
|
|
mcp-data:
|
|
driver: local
|
|
mcp-logs:
|
|
driver: local
|