trackmcp
Back to directory

Our AI control plane for fast deployment. Talk to various models, MCP with agents, get a chat widget for support and many tools more. Use the smart DAG routing to save some tokens! We take plugins in Go, Rust, Python, NodeJS, etc.

121 stars PHPOthers Updated Sep 4, 2026
aichatphp

Documentation


Why Synaplan?

  • We open-source artificial intelligence. The complete platform — backend, frontend, widgets, plugins — is Apache-2.0, Dockerized, and starts with one command. No core/enterprise split, no functional downgrade: self-hosted is the same software as our cloud.
  • Hundreds of models, one platform. OpenAI, Anthropic, Google Gemini, Groq, Mistral, xAI, HuggingFace, sovereign EU providers, and any local model via Ollama — swap providers per task in the UI, without touching a config file. No vendor lock-in, ever.
  • DAG task routing that saves tokens. An AI planner decomposes complex requests into a directed task graph (extract → summarize → generate → reply) and routes every step to the model that fits it — a cheap fast model for extraction, a strong one only where reasoning is needed. Live task cards stream while the graph executes, and every answer shows what it cost.
  • Sovereign by design. Run on-prem, in the EU cloud, or fully air-gapped: chat, RAG knowledge search, document processing, transcription and speech run with zero internet connection. No training on your data, no forced telemetry — proven in production up to 5,000-workplace offline deployments.
  • Everywhere you work. Web app, iPhone app, Outlook add-in, embeddable chat widget, WhatsApp, email — plus the tools you already run: Microsoft 365, Dropbox, Nextcloud / ownCloud, calendars, Jira and Confluence, and OpenCloud.
  • Extensible without forking. A non-invasive plugin system, an OpenAPI-documented REST API, an MCP server *and* client, and an Anthropic-compatible endpoint for Claude Code and friends.

Your first answer in three steps

One line — the installer checks Docker, fetches Synaplan, and starts the stack:

bash
curl -fsSL https://raw.githubusercontent.com/metadist/synaplan/main/install.sh | bash

Or do exactly the same by hand:

bash
git clone https://github.com/metadist/synaplan.git
cd synaplan
docker compose up -d

1. Open immediately. A live status screen appears within seconds and shows every boot step — database, backend, AI model download, interface — then switches to the app automatically the moment it is ready (first start: 5–15 minutes; every later start: seconds). It also lists which optional building blocks (Qdrant, Centrifugo, Collabora, …) this install is running and how to switch each on or off. The same notes print in `docker compose logs -f startup-notes`.

2. Log in as `admin@synaplan.com` / `admin123` — the status screen shows these too.

3. Connect an AI provider — the app takes you there. Until a key is in place, chat answers in demo mode and points you to the setup. Open AI provider setup, paste one key (free: Groq), and you are chatting. You never touch a config file.

That is the whole local-hosting onboarding. After chat works, open Channels → Connections to hook up Outlook, Nextcloud, Dropbox, a calendar, or Jira / Confluence — then you can say *"summarize the latest mail from X"* or *"create a picture and put it in nextcloud"*.

Key management, the short version

  • The first-run screen is the setup. You do not have to hunt through Admin: an empty install blocks chat with a single Go to AI provider setup button. The same wizard lives at Admin → AI Providers (`/admin/setup`) later.
  • Tested before it's saved. The key is validated against the live provider API, so a typo fails immediately instead of at your first chat.
  • Encrypted at rest. It lives encrypted in your own database, not in a plaintext file on disk.
  • Active instantly. No restart and no rebuild — the next message already uses it.
  • Defaults repair themselves. If the default chat model points at a provider you have no key for, Synaplan repoints it to one that works, so chat is never dead on a fresh install.
  • Local-model progress is visible. A download card in the setup wizard (and in `docker compose logs -f backend`) shows how far the optional Ollama pull has got; cloud chat works while it runs.
  • `.env` still works. Keys already in `backend/.env` are imported into the encrypted store on first use, and a key you later save in the UI wins permanently.

No cloud key at all? Start with `ENABLE_LOCAL_GPT_OSS=true docker compose up -d` to pull a local chat model (`gpt-oss:20b`, ~14 GB, GPU or a strong CPU recommended). Chat begins working when the download finishes.

Host it on your own server

The commands above start the development stack (source build, Vite, MailHog, phpMyAdmin). For a production install on a Linux box, the same installer drives the published image and the `deploy/` contract — it writes `deploy/.env` for you (the step most installs stumble over), pins the latest release, creates the first administrator, and runs the full lifecycle (prepare → pull → validate → start → smoke-test). Secrets are generated on first start and recorded in `deploy/data/secrets.env`:

bash
curl -fsSL https://raw.githubusercontent.com/metadist/synaplan/main/install.sh | \
  bash -s -- --mode server --domain https://ai.example.com

Prefer manual control? The identical steps by hand:

bash
cp deploy/selfhost.env.example deploy/.env
# Set SYNAPLAN_VERSION, public URL, and BOOTSTRAP_ADMIN_* (or leave both admin vars empty and sign up later)
deploy/scripts/prepare.sh
docker compose --env-file deploy/.env -f deploy/compose.yaml pull
deploy/scripts/validate-release.sh
docker compose --env-file deploy/.env -f deploy/compose.yaml up -d

After login, the same first-run provider screen applies. Full walkthrough: Installation · deploy/README.md.


Take the tour

A tour through Synaplan: chat with live cost tracking, one-key provider setup, per-task model choice, document search, media generation, the embeddable chat widget and white-label branding

Click any screenshot to see it full size.

ChatEvery answer shows what it cost

Provider setupOne key, tested and encrypted

Model choiceA different model per task

RAG searchSemantic search over your files

Media generationImages, video and audio in chat

Chat widgetOne snippet, any website

AI instructionsYour own system prompts

FilesUploads become knowledge

PluginsExtend without forking

AdminUsers, usage and health

BrandingWhite-label the whole app

Regenerate these assets after a UI change with scripts/build-readme-tour.sh.


One AI, everywhere you work

The same assistant, the same knowledge base, the same model policy — on every channel your team already uses. Connect a system once under Channels; the planner can then read from it and deliver results into it.

Conversation surfaces

SurfaceWhat it doesGet it
Web appFull chat + admin UI, light/dark, four languagesThis repo — `docker compose up -d`
iPhone appChat, documents and voice on iOS — pointed at web.synaplan.com or your own serverApp Store
Outlook add-inBring Synaplan into Outlook (Web, new & classic, Mac) — find and process mail without sending it anywheremetadist/Synamail
Chat widgetEmbed your assistant on any website with one snippet — cross-origin ready, human takeover includedWidget guide
WhatsApp & EmailThe AI answers on the channel the question came in onWhatsApp · Email
MCP & Claude CodeYour RAG and memories as MCP tools; Anthropic-compatible `POST /v1/messages` endpointMCP guide · guide

Connected systems

Set these up under Channels → Connections (or Channels → MCP servers / Channels → Email). In chat, use the channel word shown as a pill on the Connections page — for example *nextcloud*, *dropbox*, *outlook*.

ChannelWhat it unlocksSetup
Microsoft 365Live Outlook mail search, calendar events (`outlook`), send from your own mailboxChannels → Connections — OAuth, no password stored
DropboxSave generated files into a Dropbox folder (`dropbox`)Channels → Connections — OAuth
Nextcloud / ownCloud / WebDAVFile results into a folder you own (`nextcloud` / `folder`)Channels → Connections — app password, never your account password
CalDAV calendarPut generated meetings into a calendar you own (`calendar`)Same Nextcloud preset can create folder + calendar in one step
IMAP mailboxLive search of any IMAP inbox, merged with Microsoft 365 resultsChannels → Email
Jira & ConfluenceSearch and summarize; create tickets or pages when you allow writesChannels → MCP servers — Atlassian quick-start presets
Saved TasksPin a plan and run it on demand or on a schedule (hourly / daily / weekdays)Channels → Saved Tasks
Nextcloud / OpenCloud appsUse files from those clouds as AI knowledge — the file store stays in chargesynaplan-nextcloud · synaplan-opencloud

Details and channel words: docs/CONNECTIONS.md.


The Synaplan ecosystem

Everything below is the same platform, packaged for different homes. Pick what fits — nothing else is required.

ProjectWhat it is
**synaplan**The platform itself (this repo): backend, frontend, widget, plugins, dev stack, and the `deploy/` production contract with Elestio, AWS Marketplace, and Umbrel adapters
**synaplan-charts**Helm charts for Kubernetes — for partners and enterprises running K8s clusters
**iPhone app**Native iOS app — point it at web.synaplan.com or any server you host
**Synamail**Outlook add-in (Web, new & classic, Mac) — Synaplan inside your mailbox
**synaplan-nextcloud / synaplan-opencloud**Apps for Nextcloud / OpenCloud — use those files as AI knowledge while the file store stays in charge (ownCloud works via the built-in WebDAV connection)
**synaplan-tts**Optional self-hosted text-to-speech service for voice output
**synaplan-base-php**The base Docker image (FrankenPHP + gRPC + whisper.cpp) the platform builds on

Prerequisites

  • Docker + Docker Compose v2 (Docker Desktop on macOS/Windows, or Docker Engine + the Compose plugin on Linux)
  • Git
  • 8 GB RAM minimum (16 GB recommended for the local-AI standard install)
  • ~9 GB free disk for the standard install (~5 GB for minimal, +~14 GB if you enable the local chat model)
  • Free TCP ports `5173`, `8000`, `8082`, `8025`, `3307`, `6333`, `11435`

> Apple Silicon (M1–M4) Macs — build the backend image, don't pull it. The three-step start above already does this: `docker compose up -d` builds the backend and worker locally from a multi-arch base image, so PHP/FrankenPHP runs natively on `arm64` with no emulation tax. That is by far the fastest setup, and it is the default — you don't have to do anything special. The pre-built `ghcr.io/metadist/synaplan` image published for production deployments is `linux/amd64` only, so pulling it instead means running the whole backend under emulation. The first local build takes a few minutes; every later start is a cache hit. Two optional dev tools (phpMyAdmin, MailHog) are still amd64-only upstream images — if you keep them, enable Docker Desktop → Settings → General → "Use Rosetta for x86/amd64 emulation on Apple Silicon" (macOS 13+) so those two emulate quickly.


Install Options

ModeCommandSizeBest For
One-liner`curl -fsSL https://raw.githubusercontent.com/metadist/synaplan/main/install.sh \bash`~9 GBEasiest start — checks prerequisites, fetches, and starts the standard stack (`--minimal` and `--mode server` available)
Standard`docker compose up -d`~9 GBLocal try-out: full features, local embeddings (local chat model optional, +~14 GB)
Minimal`docker compose -f docker-compose-minimal.yml up -d`~5 GBFastest first boot — cloud AI only (Groq/OpenAI)
Production`install.sh --mode server` or `deploy/` compose + scriptspublished imageSelf-host on a Linux server — see Installation
Kubernetessynaplan-chartspublished imageHelm-based cluster deployments for partners and enterprises

The standard install downloads the local embedding model (`bge-m3`, ~1 GB) in the background for RAG and semantic search; progress is shown in the app.

Prefer the shell to the UI for provider keys? Keys in `backend/.env` still work — the backend reads that file when the container starts and imports the key into the encrypted store on first use. Write the key before starting, or restart the containers afterwards:

bash
echo "GROQ_API_KEY=your_key" >> backend/.env
docker compose -f docker-compose-minimal.yml up -d
# already running? pick up the new key with:
# docker compose restart backend worker

Access

ServiceURL
Apphttp://localhost:5173
APIhttp://localhost:8000
API Docshttp://localhost:8000/api/doc
phpMyAdminhttp://localhost:8082
MailHoghttp://localhost:8025

Default Login Credentials:

EmailPasswordLevel
admin@synaplan.comadmin123ADMIN
demo@synaplan.comdemo123PRO
test@example.comtest123NEW (unverified)

Features

  • AI Chat — Ollama, OpenAI, Anthropic, Gemini, Groq, Mistral, xAI, TrustedTokens (DE), HuggingFace (provider list)
  • Self-aware assistant — Ask "What can you do here?" or type `/help`; the AI assistant answers from this installation's live capabilities, not a generic brochure
  • Multi-Task DAG Routing — An AI planner decomposes complex requests into a directed task graph (extract → summarize → generate → reply), routes each step to the model that fits it, and streams live task cards while the steps execute — cheaper models for simple steps means fewer wasted tokens
  • RAG Search — Semantic document search with MariaDB VECTOR or Qdrant
  • Chat Widget — Embed on any website (widget guide)
  • iPhone App — Chat, documents and voice input on iOS, pointed at web.synaplan.com or at your own server (App Store)
  • Live Support — Realtime WebSocket layer (Centrifugo + Redis): human takeover of widget chats, typing indicators, operator notifications (realtime guide)
  • WhatsApp — Meta Business API integration
  • Email — AI-powered email responses, plus live mailbox search (IMAP and Microsoft 365)
  • Connections — Microsoft 365, Dropbox, Nextcloud / ownCloud / WebDAV, CalDAV — read mail, file results, write calendar events (connections guide)
  • Saved Tasks — Pin a multi-step plan and run it on demand or on a schedule (Channels → Saved Tasks)
  • Audio — Whisper transcription (input) + optional synaplan-tts (output; four baked voices, UI language selects the voice)
  • Documents — PDF, Word, Excel, images with OCR; optional Collabora CODE sidecar for office thumbnails, PDF export, preview and combine (office documents)
  • AI Memories — User profiling with Qdrant vector search
  • Feedback System — Feedback capture and analysis powered by Qdrant
  • Plugins — Non-invasive plugin system (plugin guide)
  • MCP Server *(early access)* — Connect AI clients (Claude, Cursor, …) over the Model Context Protocol; your RAG and memories become tools at `POST /mcp` (MCP guide)
  • MCP Client *(early access)* — Connect *your* MCP servers (Jira, Confluence, CRM, wiki, n8n, …) under Channels → MCP Servers. The planner pulls live data via `mcp_fetch` and, when you enable allow write actions on that server, can create tickets or pages via `mcp_action` — destructive tools stay refused. SSRF-guarded, per-topic opt-in. Seeded `BCONFIG` flags (`MCP.CLIENT_ENABLED`, `MULTITASK.MCP_FETCH_ENABLED`, `MULTITASK.MCP_ACTION_ENABLED`) turn this on; an explicit `0` row is the operator kill switch. See docs/MULTITASK_DATA_NODES.md
  • Claude Code & Anthropic-compatible API — Point Claude Code or any Anthropic-protocol client at your instance (`POST /v1/messages`); configure under Channels → AI Agents (guide)

AI Providers & Models

Synaplan is provider-neutral: connect the providers you want in Admin → AI Providers (keys are validated live and stored encrypted in the database, active without a restart), or set the env variables below in `backend/.env` — those are read at container start and imported into the encrypted store on first use. Each user picks a different model per task (chat, vision, image, video, audio, embeddings) — nothing is hardcoded.

ProviderVariable in `backend/.env`Models
OpenAI`OPENAI_API_KEY`GPT-5.6 Sol / Terra / Luna, GPT-5.5 (+ Pro), GPT-5.4 (+ mini / nano), GPT Image, Whisper, text-embedding-3
Anthropic`ANTHROPIC_API_KEY`Claude Opus 5, Sonnet 5, Fable 5, Opus 4.8, Haiku 4.5 (chat + vision)
Google Gemini`GOOGLE_GEMINI_API_KEY`Gemini 3.x / 2.5 chat + vision, Imagen 4, Nano Banana, Veo 3.1, Gemini TTS
Groq`GROQ_API_KEY`Qwen 3.6 27B (chat + vision), GPT-OSS 20B/120B, Whisper Large v3
Mistral 🇫🇷`MISTRAL_API_KEY`Mistral Medium 3.5 (+ vision), Mistral Large 3, Voxtral transcription + TTS
xAI`XAI_API_KEY`Grok 4.5 (+ vision, 500K context), Grok Imagine image + video (incl. Pro / 1.5 tiers)
TrustedTokens 🇩🇪`TRUSTEDTOKENS_API_KEY`GLM 5.2 / 5.3 (+ Flash vision), DeepSeek V4 / Chimera, Qwen3.6 35B (+ vision), GPT OSS 120B — sovereign inference on German GPUs (TNG), zero data retention
HuggingFace`HUGGINGFACE_API_KEY`Kimi K3 / K2.5 / K2.6 / K2.7 Code (chat + vision)
TheHive`THEHIVE_API_KEY`Flux Schnell, SDXL
Higgsfield`HIGGSFIELD_API_KEY` + `HIGGSFIELD_API_SECRET`Soul, Reve, DoP, Kling 2.1
Cloudflare Workers AI`CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_API_TOKEN`bge-m3 embeddings (also usable as embedding fallback)
Ollama 🇩🇪 self-hosted`OLLAMA_BASE_URL` (no key)Any local model — chat, vision, bge-m3 embeddings

Transparent pricing. Every model carries its provider's own rate (USD per 1M tokens in/out, or per image / second / character for media) — no proprietary credit unit in between. The selector shows a Free / Low / Mid / High cost badge next to each model and on every answer, `GET /api/v1/config/models` returns `priceIn` / `priceOut`, and the Statistics page logs the real cost of each call. On the hosted instance at web.synaplan.com that same catalog is what your plan meters against; self-hosted with Ollama, the per-token cost is simply zero. Details: Model pricing & cost transparency.

> Model catalog changes (new models, retired generations, price updates) ship as seeders plus a migration, so an existing install is repointed to a supported successor instead of silently keeping a dead model. See docs/PRICING_MAINTENANCE.md.


Lean by design: core vs optional building blocks

`docker compose up -d` starts a complete platform, but the core is deliberately small: the app, its database and Redis. Everything else is a building block that adds one capability and costs RAM. Switch a block on when you need it and off when you don't — Synaplan keeps running either way and simply hides the matching feature. The boot status screen at lists the live on/off state of every block, and Admin → System Status (`/admin/features`) does the same after login.

BlockGives youDefaultSwitch
Core — `frontend`, `backend`, `worker`, `db` (MariaDB), `redis`The app, its API, async jobs, storage, cache and queuesalways on
Ollama (`ollama`)Local AI on your hardware: `bge-m3` embeddings for document search, optional local chat (`ENABLE_LOCAL_GPT_OSS=true`)on (standard) · absent (minimal)`docker compose stop ollama` — or use `docker-compose-minimal.yml`
Qdrant (`qdrant`)Vector database for AI memories, feedback analysis and large-scale RAGon (standard) · absent (minimal)`docker compose stop qdrant` — document search itself runs on MariaDB VECTOR (the default `VECTOR_STORAGE_PROVIDER`), so RAG keeps working; memories pause
Centrifugo (`centrifugo`)Live support: human takeover of widget chats, typing indicators, operator notifications (realtime guide)on`REALTIME_ENABLED=false docker compose up -d` (then `docker compose stop centrifugo`) — the dashboard falls back to plain REST refreshes
Apache Tika (`tika`)Text extraction from PDF, Word, Excel and 1000+ formats for RAGon`docker compose stop tika` — uploads then index plain text / OCR only
Collabora CODE (`collabora`)Office files: thumbnails, “Download as PDF”, inline preview, “Combine as PDF” (~2 GB RAM) — detailsoff`docker compose --profile office up -d`
Text-to-speech (`tts`)Spoken answers, four built-in voices — detailsoff`docker compose --profile tts up -d`
Keycloak (`keycloak`)SSO test realm for OIDC development (configuration)off`docker compose --profile oidc up -d`

Keep a default-on block off across restarts. `docker compose stop` is undone by the next `up -d`. To make a block opt-in permanently, give it a profile in a `docker-compose.override.yml` (not tracked by git) — plain `up -d` then skips it, `--profile optional` brings it back:

yaml
services:
  qdrant:
    profiles: [optional]

Production follows the same rule set: `deploy/compose.yaml` ships the core plus Qdrant, Centrifugo and Tika, with `office` and `local-ai` as profiles (`COMPOSE_PROFILES=office,local-ai` in `deploy/.env`); Kubernetes installs wire the same services via synaplan-charts. The other dev-only containers (`phpmyadmin`, `mailhog`, `frontend-widgets`, `startup-notes`) never ship to production.


Realtime & Background Processing

Both compose files also start three internal services (no host ports, no setup needed):

ServiceRole
`redis`Mandatory shared infrastructure: cache, sessions, locks, rate limits, message queues (Redis Streams), Centrifugo engine
`centrifugo`WebSocket gateway for realtime features (live chat takeover, typing indicators, operator notifications) — browsers connect same-origin via `/connection/websocket`
`worker`Symfony Messenger consumer that executes async jobs (AI processing, document indexing, widget crawling)

In a multi-node cluster all nodes share one Redis, so WebSocket events published on one node reach browsers connected to any other. Details: docs/REALTIME.md.


Text-to-Speech (Optional)

Voice output is an optional companion, not part of the core stack — synaplan-tts, image `ghcr.io/metadist/synaplan-tts`. The image already contains four Piper voices (English, German, Spanish, Turkish). Synaplan runs fully without it; the speaker control appears when the service answers.

bash
# Same compose file (recommended)
docker compose --profile tts up -d

# Or standalone, on this host or another machine
docker run -d --name synaplan-tts -p 127.0.0.1:10200:10200 ghcr.io/metadist/synaplan-tts:latest

The backend looks at `SYNAPLAN_TTS_URL` (compose default `http://host.docker.internal:10200`).

The UI language selects the voice. Chat sends the active frontend locale (`en` / `de` / `es` / `tr`); if the backend detects a different reply language, that wins. Piper then maps the short code to the matching baked voice (German UI → Thorsten, Spanish → davefx, …). There is no separate voice picker. Add more Piper models by dropping `.onnx` + `.onnx.json` into the extra-voices volume — see synaplan-tts README and docs.synaplan.com/tts.


Office documents (Optional Collabora CODE)

Office thumbnails, “Download as PDF”, inline preview, officemaker PDF output,

legacy / Apple format conversion, and “Combine as PDF” need a Collabora CODE

sidecar (`collabora/code`). Chat, Tika RAG and officemaker DOCX / XLSX / PPTX

work without it. The sidecar is off by default (`--profile office`) so

`docker compose up -d` does not pull the image or spend the extra ~2 GB RAM.

bash
# Dev / minimal — compose already defaults OFFICE_CONVERT_URL to http://collabora:9980
docker compose --profile office up -d

# Production (deploy/) — env, not backend/.env
# in deploy/.env:  COMPOSE_PROFILES=office
docker compose --env-file deploy/.env -f deploy/compose.yaml --profile office up -d

# Already running CODE (Nextcloud, OpenCloud, another compose)
OFFICE_CONVERT_URL=http://:9980 docker compose up -d

Do not put `OFFICE_CONVERT_URL` in `backend/.env`: Compose injects the

variable, so the file cannot override it. Deployments set the env on the host

or in compose. `OFFICE_CONVERT_URL=disabled` turns the engine off.

Collabora never sees Synaplan users. Convert-to is a server-to-server POST

of a file; identity stays in Synaplan (login + file ownership). No Collabora

accounts, no WOPI token on this path. HTTP 403 is usually CODE’s

`net.post_allow.host` rejecting the compose subnet.

Full operator guide: docs.synaplan.com/office-documents.

Kubernetes / reuse in other projects:

synaplan-charts `docs/collabora-office-engine.md`.


Common Commands

bash
# Startup progress ("please wait..." notes + READY message)
docker compose logs -f startup-notes

# Logs
docker compose logs -f backend

# Restart
docker compose restart backend

# Reset database
docker compose down -v && docker compose up -d

# Run tests
make test

# Code quality
make lint

Documentation

User-facing & API docs live at **docs.synaplan.com**. Source: `metadist/synaplan-docs`.

In-repo guides (for developers working on this codebase):

GuideDescription
InstallationLocal development stack and production self-hosting (`deploy/`)
ConfigurationEnvironment variables, API keys
ConnectionsMicrosoft 365, Dropbox, Nextcloud / WebDAV, CalDAV, Jira / Confluence
AI Model PricingModel catalog, provider prices, retiring a model
DevelopmentCommands, testing, architecture
Realtime / WebSocketsCentrifugo + Redis realtime layer, multi-node deployment
ObservabilityRequest correlation ids, redacted event ring, admin logs API
Office documentsOptional Collabora CODE sidecar (PDF export, previews, convert-to)
RAG SystemDocument search and processing
Chat WidgetEmbed chat on websites
WhatsAppMeta Business API setup
EmailEmail channel integration
Anthropic-compatible APIClaude Code / Messages API gateway (`POST /v1/messages`)
RepoPurpose
synaplanMain app (this repo)
synaplan-docsPublic docs site (docs.synaplan.com)
SynamailOutlook add-in
synaplan-nextcloudNextcloud integration
synaplan-opencloudOpenCloud integration
synaplan-ttsOptional Piper TTS — image with 4 baked voices
synaplan-sortxDocument-sorting plugin + local tool
synaplan-chartsHelm charts for Kubernetes
synaplan-platformProduction deployment configs

Project Structure

code
synaplan/
├── backend/        # Symfony PHP API
├── frontend/       # Vue.js SPA
├── docs/           # Documentation
├── deploy/         # Production self-host compose + lifecycle scripts
├── _docker/        # Docker configs
└── plugins/        # Plugin system

Community & Support

  • **Discord** — chat with the team and community; the fastest place for self-hosting and configuration questions
  • **GitHub Issues** — bugs and feature requests
  • **www.synaplan.com** — product, hosting and enterprise contact

Contributing

See AGENTS.md for development guidelines and code standards.


License

Apache-2.0

Frequently asked questions

What is synaplan?

synaplan is Our AI control plane for fast deployment. Talk to various models, MCP with agents, get a chat widget for support and many tools more. Use the smart DAG routing to save some tokens! We take plugins in Go, Rust, Python, NodeJS, etc.

How do I install synaplan?

Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

Is synaplan open source?

Yes — it is hosted on GitHub at https://github.com/metadist/synaplan and has 121 stars.

Related MCP tools

Run your own MCP server? See who uses it and what to fix.

Measure it with TrackMCP