Synapse-arkitektur
Hur Synapse är byggt — Fastify, PostgreSQL, FTS5, inbäddningar, MCP-server.
Synapse-arkitektur
Synapse är ett multitenant-minnes-API byggt på Fastify, PostgreSQL med FTS5 och en valfri inbäddningstjänst för semantisk sökning.
Arkitektur på hög nivå
┌──────────────────────────────────────────────────────────┐
│ Clients │
├──────────────┬──────────────┬──────────────┬─────────────┤
│ LLM Agents │ Web Browsers│ MCP Clients │ Webhooks │
│ (curl/SDK) │ (humans) │ (Claude/etc) │ (external) │
└──────┬───────┴──────┬───────┴──────┬───────┴──────┬──────┘
│ │ │ │
└──────────────┴──────────────┴──────────────┘
│
▼
┌───────────────────────────────┐
│ Synapse API (Fastify) │
│ port 12800 │
│ - REST endpoints │
│ - Auth (Mind Key / JWT) │
│ - Rate limiting │
│ - Static file serving │
└───────────────┬───────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ PostgreSQL │ │ Embeddings │ │ MCP Server │
│ + FTS5 │ │ Service │ │ (separate) │
│ │ │ (optional) │ │ port 13100 │
│ - memories │ │ │ │ │
│ - tasks │ │ - generate │ │ - 79 tools │
│ - chat │ │ embeddings│ │ - stdio/SSE │
│ - scripts │ │ │ │ - WebSocket │
└─────────────┘ └─────────────┘ └─────────────┘Kärnkomponenter
1. Synapse API (Fastify)
Huvud-HTTP-servern. Hanterar:
- REST-endpoints (
/memory,/chat,/mind/tasksetc.) - Autentisering (Mind Key för agenter, JWT för människor)
- Hastighetsbegränsning (endast
?key=-auth) - Statisk filservering (webbgränssnitt på
/human,/docsetc.) - Webhook-utsändning
Byggd med Fastify 5 för prestanda. Körs på port 12800 i produktion.
2. PostgreSQL med FTS5
Det primära datalagret. Använder PostgreSQL med FTS5-tillägget för fulltextssök.
Nyckeltabeller:
| Tabell | Syfte |
|---|---|
users |
Användarkonton |
minds |
Mind-omfattningar (varje har en Mind Key) |
memories |
Minnesposter med FTS5 virtuell tabell |
tasks |
Uppgiftshantering |
chat_messages |
Chatthistorik |
scripts |
Beständiga skript |
webhooks |
Webhook-registreringar |
cron_jobs |
Schemalagda uppgifter |
variables |
Nyckel-värde-lager |
audit_log |
Granskningsspår |
FTS5 möjliggör fulltextssök under en millisekund över allt minnesinnehåll. Se FTS5-sökning för detaljer.
3. Inbäddningstjänst (valfri)
För semantisk sökning genererar Synapse vektorinbäddningar av minnesinnehåll. Dessa lagras tillsammans med minnen och används för likhetssökning.
- Leverantör: konfigurerbar (OpenAI, lokal modell etc.)
- Lagras som
vector-kolumn imemories-tabellen - Används av
/memory/semantic-search-endpoint - Se Semantisk sökning
4. MCP-server (separat tjänst)
Synapse MCP-server körs som en separat process (port 13100). Den:
- Exponerar 79 verktyg via Model Context Protocol
- Stöder stdio-, HTTP/SSE- och WebSocket-transporter
- Översätter MCP-verktygsanrop till Synapse API-anrop
- Multitenant: en Mind Key per session
5. Browser Proxy (separat tjänst)
För webbläsarautomatisering körs en separat Playwright-baserad tjänst på port
13000. MCP-servern kan anropa denna för browser_*-verktyg.
6. SSH Proxy (separat tjänst)
För SSH-baserade fjärrkommandon körs en separat tjänst på port 12900.
Multitenant-modell
User Account (email + password)
│
├── Mind 1 (Mind Key 1)
│ ├── Memories
│ ├── Tasks
│ ├── Chat
│ └── Scripts
│
├── Mind 2 (Mind Key 2)
│ └── ... (isolated from Mind 1)
│
└── Mind 3 (Mind Key 3)
└── ...Varje mind är fullständigt isolerad. Mind Keys ger åtkomst till exakt en mind. JWT:er ger åtkomst till användarkontot (för att hantera minds).
Se Multitenancy för detaljer.
Begärandeflöde
Minneslagringsbegäran
1. Client sends POST /memory with Authorization: Bearer mk_xxx
2. Fastify receives request
3. Auth middleware validates Mind Key, attaches mind_id to request
4. Memory route handler:
a. Validate JSON body (zod schema)
b. Insert into memories table
c. Update FTS5 index
d. (Async) Generate embedding if embeddings enabled
e. Trigger webhooks for memory.store event
5. Return { id, status: "stored" }Minnessökningsbegäran
1. Client sends GET /memory/search?q=docker
2. Auth middleware validates Mind Key
3. Memory route handler:
a. Parse query (FTS5 syntax)
b. Execute FTS5 MATCH against memories table
c. Filter by mind_id (tenant isolation)
d. Rank by relevance
e. Return resultsDriftsättning
Synapse driftsätts som en Docker-container. Se docker-compose.yml:
services:
synapse:
image: registry.gitlab.com/schaefer-services/synapse:latest
ports:
- "12800:12800"
environment:
- DATABASE_URL=postgres://...
- JWT_SECRET=...
- SYNAPSE_HOST=0.0.0.0
- SYNAPSE_PORT=12800
depends_on:
- postgres
postgres:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_DB=synapse
- POSTGRES_PASSWORD=...Prestandaegenskaper
| Åtgärd | Latens | Genomströmning |
|---|---|---|
| Minneslagring | ~5 ms | 1000+ req/s |
| Minnesåterkallning | ~20 ms | 500 req/s |
| FTS5-sökning | ~10 ms | 800 req/s |
| Semantisk sökning | ~50 ms | 200 req/s |
| Chat-poll | ~5 ms | 2000 req/s |