Package Exports
- synapse-mcp-api
- synapse-mcp-api/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (synapse-mcp-api) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
synapse-mcp – MCP-Server für Synapse
Model Context Protocol (MCP) Server für das Synapse-Ökosystem – exponiert die Synapse Memory API, den Browser-Proxy und den SSH-Proxy als MCP-Tools. Mehrmandantenfähig, unterstützt stdio- und HTTP/SSE-Transporte (WebSocket: experimentell, nicht produktivtauglich). Funktioniert mit Claude Desktop, Cline, Cursor, Continue und jedem MCP-kompatiblen Client.
Aktuelle Version: 1.4.2 – 124 Tools in 15 Kategorien (120 kanonisch + 4 deprecated Aliasse). 100 % API-Coverage aller Schaefer-Services-HTTP- Endpunkte.
Übersicht
synapse-mcp ist die Brücke zwischen MCP-kompatiblen KI-Clients (Claude Desktop, Cline, Cursor etc.) und der Synapse-Memory-API. Statt dass jeder Client die HTTP-Endpunkte von Synapse direkt ansteuert, kapselt dieser Server alle Endpunkte als MCP-Tools und bietet zusätzlich AutoSync-Push- Benachrichtigungen für aktive Sessions. Der Server ist bewusst schlank gehalten: Er enthält keine eigene Persistenz, sondern leitet alle Aufrufe an die konfigurierten Upstream-Services (Synapse, Browser-Proxy, SSH-Proxy) weiter. Dadurch bleibt er zustandslos und einfach zu betreiben.
Quick Start
Voraussetzung: Mind Key besorgen
Ein Mind Key ist das Auth-Token – jeder MCP-Tool-Aufruf benötigt ihn.
- Registrieren an der Synapse-Instanz (Default: https://synapse.schaefer.zone)
- Mind anlegen im Web-UI – das liefert den Mind Key
- Mind Key kopieren – wird im nächsten Schritt gebraucht
Option 1: zentraler HTTP/SSE-Service (mehrmandantenfähig, empfohlen)
Einmal deployen, alle Nutzer verwenden ihn mit ihrem eigenen Mind Key:
docker service create \
--name synapse-mcp \
--network synapse-net \
--publish 13100:13100 \
--env SYNAPSE_URL=http://memory-api:12800 \
--env SYNAPSE_PUBLIC_URL=https://synapse.schaefer.zone \
--env BROWSER_PROXY_URL=http://browser-proxy:13000 \
--env SSH_PROXY_URL=http://ssh-proxy:12900 \
--env MCP_TRANSPORT=http \
registry.gitlab.com/schaefer-services/synapse-mcp:latestMCP-Client verbinden (Streamable HTTP, empfohlen):
URL: https://synapse-mcp.schaefer.zone/mcp
Headers: Authorization: Bearer <YOUR_MIND_KEY>
Accept: application/json, text/event-streamOption 2: lokaler stdio-Modus (Single-User)
Als Subprocess des MCP-Cients laufen. Jeder Container = ein Mind.
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"synapse": {
"command": "npx",
"args": ["-y", "synapse-mcp"],
"env": {
"SYNAPSE_URL": "https://synapse.schaefer.zone",
"SYNAPSE_MIND_KEY": "<YOUR_MIND_KEY>",
"MCP_TRANSPORT": "stdio"
}
}
}
}Cline (VS Code):
{
"mcpServers": {
"synapse": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "SYNAPSE_URL=https://synapse.schaefer.zone",
"-e", "SYNAPSE_MIND_KEY=<YOUR_MIND_KEY>",
"-e", "MCP_TRANSPORT=stdio",
"registry.gitlab.com/schaefer-services/synapse-mcp:latest"]
}
}
}Setup verifizieren
- Konnektivität prüfen – das Tool
synapse_healthaufrufen. Es spricht Synapses/health-Endpunkt an und liefert Memory-Stats, DB-Status und Version. Schlägt es mit „Cannot reach Synapse" fehl, istSYNAPSE_URLfalsch oder Synapse ist offline. - Erste Erinnerung speichern –
memory_store { content: "..." }aufrufen. Sollte das Memory-Objekt mit ID zurückgeben. - Recall –
memory_recallaufrufen. Sollte die gerade gespeicherte Erinnerung zurückliefern.
| Fehlermeldung | Ursache | Lösung |
|---|---|---|
Cannot reach Synapse at <url> |
SYNAPSE_URL falsch oder Synapse down | URL prüfen, Synapse-Erreichbarkeit verifizieren |
Authentication failed |
Mind Key ungültig/fehlend | Mind Key aus Synapse-Web-UI kopieren, SYNAPSE_MIND_KEY bzw. Authorization: Bearer-Header setzen |
Too many concurrent sessions |
Mehr als 10 Sessions mit gleichem Mind Key | Ungenutzte Sessions schließen (DELETE /mcp) oder 30 min warten |
Rate limit exceeded |
Mehr als 60 Requests/min | Slow down, AutoSync-Polling-Frequenz reduzieren |
SYNAPSE_MIND_KEY appears to be a placeholder |
Beispiel-Config wörtlich kopiert | <YOUR_MIND_KEY> durch echten Key ersetzen |
Tools (124 gesamt: 120 kanonisch + 4 deprecated, 15 Kategorien)
Memory (24)
memory_recall, memory_list, memory_store, memory_store_get,
memory_search, memory_semantic_search, memory_update, memory_delete,
memory_bulk_delete, memory_stats, memory_unverified,
memory_contradictions, memory_audit, memory_related, memory_by_tag,
memory_diff, memory_expiring, memory_health, memory_sync,
memory_embed_batch, memory_embed_batch_status, memory_verify (JWT),
memory_unverify (JWT), memory_export.
Chat (10)
chat_poll, chat_reply, chat_reply_with_file, chat_status,
chat_history (JWT), chat_unread (JWT), chat_send (JWT),
chat_upload (JWT), chat_file_get, chat_files_list (JWT).
Scheduler (8)
cron_list, cron_create, cron_delete, cron_toggle, var_list,
var_get, var_set, var_delete.
Tasks (6)
task_list, task_get, task_create, task_update, task_complete,
task_delete.
Scripts (5)
script_list, script_get, script_info, script_store,
script_delete.
Computers (12)
User-facing (Mind Key): computer_list, computer_get,
computer_install_code, computer_screenshot, computer_command_queue,
computer_command_status, computer_commands_list, computer_disable,
computer_delete. Agent-facing (computer_token): computer_register,
computer_me_poll, computer_me_command_result.
Push (4, nur JWT)
push_vapid_public_key, push_subscribe, push_unsubscribe, push_test.
User/Mind-Verwaltung (6)
user_register, user_login, user_logout, user_minds_list (JWT),
user_mind_create (JWT), user_mind_delete (JWT).
Webhooks (6)
webhook_create, webhook_list, webhook_get, webhook_update,
webhook_delete, webhook_test.
Visualization (4)
memory_compact, memory_graph, memory_tags, memory_timeline.
Sharing (5, nur JWT, neu in v1.3.0)
mind_share_create, mind_share_list, mind_share_update,
mind_share_delete, minds_shared_list. ACL-Level: read, write,
admin.
Utility (7)
server_time, math_calc, random_value, auth_status,
synapse_health, synapse_endpoints, synapse_openapi.
Documentation (1, neu in v1.4.2)
documentation_query — durchsucht die Synapse-Dokumentation und ruft Artikel ab.
Browser-Proxy (11, neu in v1.2.0)
browser_health, browser_new, browser_navigate, browser_dom,
browser_screenshot, browser_sessions, browser_close,
browser_search, browser_fetch, browser_git_urls, browser_git_all.
Diese Tools proxyn auf den browser-proxy-api-Service
(Browserless + Redis) und stellen LLM-kontrollierte Chrome-Sessions
bereit. Jeder Mind Key bekommt einen isolierten Tab-Store
(Mehrmandantenfähigkeit). Tabs schließen nach 24 Stunden Inaktivität
automatisch.
Typischer Workflow: browser_new { url: "..." } → tab_id, dann
browser_dom { tab_id }, browser_screenshot { tab_id, format: "jpeg" },
abschließend browser_close { tab_id }. Für Code-Reviews ganzer Repos
eignet sich browser_git_all { url: "...", ext: ".ts,.js" }, das das
komplette Repo als konkatenierten Text zurückliefert.
SSH-Proxy (11, neu in v1.2.0)
ssh_health, ssh_new, ssh_connect, ssh_exec, ssh_exec_poll,
ssh_output, ssh_sessions, ssh_close, ssh_target_register,
ssh_target_list, ssh_target_delete. Diese Tools proxyn auf den
ssh-proxy-api-Service
und bieten persistente SSH-Sessions für LLM-Agenten, ohne dass ein lokaler
SSH-Client installiert sein muss.
Zwei Verbindungsmodi: Direct (Credentials im Request) oder
Pre-registered target (sicherer, keine Credentials im Request).
Kommandos sind asynchron – ssh_exec liefert sofort eine exec_id
zurück, dann muss ssh_exec_poll aufgerufen werden, um das Ergebnis
abzuholen. Sessions sind Single-Tasking (409 „session_busy" bedeutet,
dass ein voriges Kommando noch läuft) und schließen nach 30 Minuten
Inaktivität automatisch. Niemals ssh_exec für interaktive
Kommandos (vim, top, sudo mit Passwort-Prompt) verwenden.
AutoSync (Push-Benachrichtigungen)
Der MCP-Server benachrichtigt Clients proaktiv über Änderungen via des
Transport-Mechanismus des Clients. Es ist keine Client-Subscription
notwendig – Benachrichtigungen erfolgen automatisch für jede aktive
Session. Unterstützte Event-Typen sind memory.created,
memory.updated, memory.deleted, task.created, task.updated,
task.completed, chat.message_received und chat.message_sent.
Phase A (Polling): Der Server pollt Synapse alle 5 Sekunden pro
Session und emittiert Notifications, wenn Änderungen erkannt werden.
Das ist der Default und aktuell aktive Mechanismus. Phase B
(Webhook): Synapse kann Events via HTTP-Webhook an den MCP-Server
pushen für Near-Realtime-Notifications (<100 ms Latenz). Diese Variante
ist implementiert, aber noch nicht in den Main-Server-Startup
eingehängt (siehe docs/adr/0004-autosync-poll-vs-webhook.md).
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
MCP_TRANSPORT |
http |
stdio oder http (WebSocket in src/server-ws.ts vorhanden, aber nicht produktiv) |
SYNAPSE_URL |
https://synapse.schaefer.zone |
Synapse-API-Basis-URL (in Swarm-Deployments intern) |
SYNAPSE_PUBLIC_URL |
https://synapse.schaefer.zone |
Öffentliche Synapse-URL für Onboarding-Anzeige |
SYNAPSE_MIND_KEY |
– | Mind Key (Pflicht im stdio-Modus) |
SYNAPSE_JWT |
– | JWT für Mensch-only-Tools (optional) |
BROWSER_PROXY_URL |
http://browser-proxy:13000 |
Browser-Proxy-API-URL |
SSH_PROXY_URL |
http://ssh-proxy:12900 |
SSH-Proxy-API-URL |
PORT |
13100 |
HTTP/SSE-Listen-Port |
LOG_LEVEL |
info |
debug, info, warn, error |
ALLOWED_ORIGINS |
* |
Kommaseparierte CORS-Origins |
NODE_ENV |
production |
development für pretty-Logs |
MAX_SESSIONS_PER_MIND_KEY |
10 (hardcoded) |
Max gleichzeitige Sessions pro Mind Key |
WEBHOOK_PORT |
13101 |
Webhook-Listen-Port (Phase B AutoSync) |
WEBHOOK_HOST |
synapse-mcp |
Hostname für Webhook-URLs (Docker-DNS) |
WEBHOOK_SECRET |
– | Secret zum Signieren von Webhook-Payloads |
Architektur
┌─────────────────────────────────────────────────────────────┐
│ MCP-Client (Claude Desktop, Cline, Cursor, custom App) │
│ Auth: Authorization: Bearer <MIND_KEY> │
└─────────────────────┬───────────────────────────────────────┘
│
▼
https://synapse-mcp.schaefer.zone
│
▼
┌─────────────────────────────────────────────────────────────┐
│ synapse-mcp (dieser Server) │
│ - 124 MCP-Tools in 15 Kategorien (120 + 4 deprecated) │
│ - Mehrmandantenfähig: reicht Mind Key an Upstream weiter │
│ - Transporte: HTTP/SSE (prod), WebSocket (exp.), stdio │
│ - AutoSync-Push-Notifications (Poll oder Webhook) │
└─────┬───────────────┬───────────────────────┬──────────────┘
│ │ │
▼ ▼ ▼
┌───────────┐ ┌──────────────┐ ┌─────────────────────────┐
│ Synapse │ │ Browser-Proxy│ │ SSH-Proxy │
│ :12800 │ │ :13000 │ │ :12900 │
│ 97 Tools │ │ 11 browser_* │ │ 11 ssh_* tools │
└───────────┘ └──────────────┘ └─────────────────────────┘Architektur-Entscheidungen sind in vier ADRs dokumentiert
(docs/adr/0001-multi-tenant-architecture.md,
0002-transport-strategy-stdio-http-ws.md,
0003-auth-strategy-mind-key-per-request.md,
0004-autosync-poll-vs-webhook.md).
CI/CD
Die Pipeline in .gitlab-ci.yml inkludiert die Templates
schaeferms/ci-templates/templates/master.yml und
templates/deploy-swarm.yml und durchläuft die Stages lint, test,
build, publish und deploy. Der test:unit-Job läuft im Image
node:22-slim, führt npm ci, npm run typecheck und
npm run test:coverage aus und lädt das Cobertura-Coverage-XML als
Artifact hoch. Coverage-Ziel ist >80 % für neue Module.
Der publish:npm-Job läuft nur auf main, prüft, ob NPM_TOKEN
gesetzt und kein Platzhalter ist, und führt npm publish --access public
aus. Ist NPM_TOKEN nicht gesetzt, bricht der Job sauber mit einer
Hinweismeldung ab (kein Pipeline-Fehler). Der deploy:swarm-Job
verwendet das Template templates/deploy-swarm.yml und aktualisiert den
Service schaefer_synapse-mcp über SSH mit docker service update --detach. Die Health-URL ist http://localhost:13100/health, die
Wartezeit 30 Sekunden. Wöchentliche Pipelines (Montag 09:00 UTC) fangen
Dependency-Breakage früh ab.
Deployment
Das Produktivsystem läuft als Docker-Swarm-Service schaefer_synapse-mcp
auf dem schaefer-Swarm (vps1/vps3). Der Service ist öffentlich unter
https://synapse-mcp.schaefer.zone erreichbar und verbindet sich intern
über das synapse-net-Docker-Netzwerk mit den Upstream-Services
(memory-api:12800, browser-proxy:13000, ssh-proxy:12900). Vor dem
Start prüft der Healthcheck im Dockerfile beide Endpunkte: den lokalen
MCP-Server unter http://localhost:13100/health und den Upstream-Synapse
unter SYNAPSE_URL/health. Schlägt einer der beiden fehl, markiert
Docker den Container als unhealthy und startet ihn neu.
Der entrypoint.sh-Mechanismus zieht bei jedem Container-Start den
origin/main und baut bei Änderungen an src/, tsconfig.json oder
package.json intern neu. Das erlaubt Hotfix-Deployments ohne neues
Docker-Image, sollte aber nur in Notfällen genutzt werden. Für ein
neues Produktivdeployment muss das Image aus der GitLab-Container-Registry
gezogen werden
(docker service update --image registry.gitlab.com/schaefer-services/synapse-mcp:latest schaefer_synapse-mcp),
anschließend verifiziert der Healthcheck innerhalb von 30 Sekunden die
Erreichbarkeit. Für Rollbacks kann auf einen früheren Image-Tag
zurückgegangen werden.
Entwicklung
git clone https://gitlab.com/schaefer-services/synapse-mcp.git
cd synapse-mcp
npm install
npm run build
npm run test:coverage
npm run typecheck
# Dev-Modus (HTTP/SSE)
SYNAPSE_URL=https://synapse.schaefer.zone \
SYNAPSE_MIND_KEY=<your-key> \
MCP_TRANSPORT=http \
npm run devFür Tests der browser_*- und ssh_*-Tools können die Proxy-URLs auf
lokale Instanzen oder auf den Produktivservice zeigen. Anschließend in
einem MCP-Client (z. B. Cline) http://localhost:13100/mcp anbinden und
browser_health bzw. ssh_health testen. Der npm run dev-Befehl
nutzt tsx watch für Hot-Reload; Änderungen an src/*.ts werden
sofort übernommen. Vor jedem Commit sollten npm run typecheck && npm run test:coverage lokal durchlaufen werden, weil die CI identisch
vorgeht.
Qualitätssicherung
Dieses Projekt folgt strikten Qualitätsstandards: Tests (>80 % Coverage
für neue Module), ADRs (Architectural Decision Records unter docs/adr/),
CHANGELOG (jede Änderung dokumentiert), Code Review (Self-Review-Checkliste
vor Merge), Definition of Done (Code + Tests + Doku + CHANGELOG +
verifiziert). Der Default-Branch main ist geschützt; direkte Pushes
sind nicht erlaubt, alle Änderungen laufen über Merge Requests.
Verwandte Services
Dieser MCP-Server integriert drei Sibling-Services aus der schaefer-services-Gruppe:
| Service | Repo | Port | Zweck |
|---|---|---|---|
| Synapse | synapse | 12800 | Memory API, Chat, Tasks, Scripts, Webhooks, Scheduler |
| Browser-Proxy | browser-proxy-api | 13000 | LLM-kontrolliertes Chrome (Browserless + Redis) |
| SSH-Proxy | ssh-proxy-api | 12900 | Persistente SSH-Sessions, pre-registrierte Targets |
Alle drei Services werden zusammen im schaefer-Docker-Swarm-Stack auf
vps1/vps3 ausgerollt.
Lizenz
MIT – siehe LICENSE.
Autor
Michael Schäfer · Schäfer Services · michael@schaefer.zone
Dokumentation
Die weiterführende Doku liegt in documentation/ und richtet sich an
unterschiedliche Leser:innen: architecture.md dokumentiert die Schichten
(Entry, Transport, Session, Tool, Client), die Mehrmandantenfähigkeit und
die Auth-Strategie; deployment.md behandelt die Produktivumgebung,
Docker-Konfiguration, Erstinitalisierung und das Rollback; development.md
erklärt das Setup, die NPM-Skripte, die Testsuite, die Tool-Entwicklung und
den Merge-Request-Workflow. Ergänzend liegen in docs/adr/ vier
Architecture Decision Records (Multi-Tenant, Transport-Strategie,
Auth-Strategie, AutoSync-Poll-vs-Webhook), die Designentscheidungen
nachvollziehbar machen. Beispiel-Konfigurationen für Claude Desktop und
Cline liegen unter examples/.
| Datei | Inhalt |
|---|---|
documentation/architecture.md |
Schichten, Multi-Tenancy, Auth, AutoSync |
documentation/deployment.md |
Produktivsetup, Docker, CI/CD, Rollback |
documentation/development.md |
Setup, NPM-Skripte, Tests, Tool-Entwicklung |
docs/adr/0001-multi-tenant-architecture.md |
ADR: Multi-Tenant mit Mind Key als Tenant-ID |
docs/adr/0002-transport-strategy-stdio-http-ws.md |
ADR: stdio + HTTP produktiv, WS experimentell |
docs/adr/0003-auth-strategy-mind-key-per-request.md |
ADR: Mind Key pro Request, JWT optional |
docs/adr/0004-autosync-poll-vs-webhook.md |
ADR: Polling statt Webhook für AutoSync |
examples/ |
Beispiel-Konfigurationen für Claude Desktop, Cline, VS Code |
Roadmap
Die weitere Entwicklung konzentriert sich auf vier Stränge: (1) Aktivierung
des WebSocket-Transports in src/index.ts, der aktuell in server-ws.ts
implementiert, aber nicht eingehängt ist – das wird Realtime-Anwendungen
wie Live-Browser-Steuerung und SSH-Session-Pipelining ermöglichen; (2) Ausbau
der AutoSync-Webhook-Variante, die aktuell nur polling-basiert ist, sodass
Synapse den MCP-Server bei Memory-Änderungen aktiv benachrichtigt statt ihn
pollen zu lassen; (3) Erweiterung des Tool-Profilsystems in
src/tools/profiles.ts um benutzerdefinierte Profile, die über eine
Konfigurationsdatei geladen werden; (4) Stabilisierung der SSRF-Prävention
in tests/ssrf.test.ts, die aktuell im grünen Bereich ist, aber bei
neuen Tool-Implementierungen immer wieder randständig wird. Konkrete
Releases werden in CHANGELOG.md nachverfolgt.