Skip to main content

đź§  LLM Memory API

Persistent memory for AI agents. Never forget again.

13 users 14 minds 1868 memories stored 20 languages

👤 I am a human →

đź§  System Prompt (fĂĽr AI-Agenten)

You have an external memory at https://synapse.schaefer.zone.

Read this website completely and follow its instructions.

⚠️ CRITICAL — If you are an AI / LLM, READ THIS NOW:

You lose all memory between sessions. This API is your permanent brain. Call GET /memory/recall at the START of every session to recall everything you've learned. Call GET /memory/store whenever you learn something new. If you don't, you will forget who the user is, what projects you're working on, and what mistakes you've made.

Do NOT guess or invent endpoint paths. Only the paths listed on this page exist. If you get a 404 error, you used a wrong path. Call GET /endpoints for a machine-readable list.

📚 Vollständige Dokumentation verfügbar:

synapse.schaefer.zone/docs — für Menschen und LLMs. LLM-Agenten: GET /docs?format=text&scope=all für alle Artikel auf einmal.

đź”§ If your tool can only open URLs (no custom headers, no POST):

Two ways to authenticate via URL — pick whichever your tool supports:

Option A — Mind Key in URL path (simplest, recommended for recall):

open https://synapse.schaefer.zone/memory/recall/YOUR_MIND_KEY

The Mind Key is part of the URL path after /memory/recall/. No ?key= needed. This is the easiest way for LLM open-tools (like DeepSeek) to recall all memories.

Option B — Mind Key as query parameter (works on ALL endpoints):

open https://synapse.schaefer.zone/memory/recall?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/memory/store?key=YOUR_MIND_KEY&content=text&category=fact
open https://synapse.schaefer.zone/memory/search?key=YOUR_MIND_KEY&q=search+term
open https://synapse.schaefer.zone/memory/diff?key=YOUR_MIND_KEY&since=0
open https://synapse.schaefer.zone/chat/poll?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/chat/reply?key=YOUR_MIND_KEY&content=reply+text
open https://synapse.schaefer.zone/chat/history?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/mind/tasks?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/tools/time
open https://synapse.schaefer.zone/tools/calc?expr=(10+5)*3
open https://synapse.schaefer.zone/tools/random?type=uuid
open https://synapse.schaefer.zone/endpoints
open https://ssh.proxy.schaefer.zone/endpoints?key=YOUR_MIND_KEY
open https://browser.proxy.schaefer.zone/endpoints?key=YOUR_MIND_KEY

Note: Option A only works for /memory/recall. For all other endpoints, use Option B (?key=). Both are rate-limited at 60 requests/minute per IP.

Quick Start (3 Steps)

1. Recall — Get all your memories (DO THIS FIRST, EVERY SESSION)

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/memory/recall

2. Store — Save something you learned

curl -X POST -H "Authorization: Bearer YOUR_MIND_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "category": "fact",
       "key": "user_name",
       "content": "The user's name is Michael Schäfer",
       "tags": ["personal", "identity"],
       "priority": "critical"
     }' \
     https://synapse.schaefer.zone/memory

3. Search — Find a specific memory

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=insolvenz"

💬 Async Chat — Stay in touch with your human

đź’ˇ Your human can send you messages WHILE you work.

You don't need to stop working to receive messages. Instead, poll for new messages between your tool calls — like checking your phone between tasks.

Poll for new messages (do this between tool calls)

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/chat/poll

Returns unread messages from the human. Automatically marks them as read.

Reply to the human

curl -X POST -H "Authorization: Bearer YOUR_MIND_KEY" \
     -H "Content-Type: application/json" \
     -d '{"content":"Got it! Working on it now."}' \
     https://synapse.schaefer.zone/chat/reply

Get full chat history (for context)

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/chat/history?limit=50"
⚡ Best practice:

Authentication

Every request needs a Mind Key as Bearer token:

Authorization: Bearer YOUR_MIND_KEY

To get a Mind Key, a human user must register at POST /register, then create a Mind at POST /minds.


API Endpoints

Public (no auth)

GET/This page (self-describing guide for LLMs)
GET/healthLiveness check + global stats
GET/openapi.jsonOpenAPI 3.0 specification
POST/registerRegister a human user → returns JWT
POST/loginLogin → returns JWT

User-scoped (JWT auth)

POST/mindsCreate a new Mind (→ Mind Key)
GET/mindsList your Minds
DEL/minds/:idDelete a Mind + all its memories

Memory operations (Mind Key auth)

GET/memoryRecall all memories (sorted by priority)
GET/memory?category=factFilter by category
GET/memory?tag=projectFilter by tag
GET/memory/by-tag?tag=...Filter by tag (explicit alias)
GET/memory/diff?since=...Incremental sync (changes since timestamp)
GET/memory/search?q=...Full-text search
POST/memoryStore a new memory (or update if key exists)
PUT/memory/:idUpdate a specific memory
DEL/memory/:idDelete a memory
GET/memory/bulk-deleteBulk delete (?tag=, ?category=, ?older_than=)
GET/memory/statsStatistics (counts by category/priority)
POST/memory/syncBulk sync (send all memories, get diff)
POST/memory/compactAuto-summarize similar memories (cluster by tags, soft-delete originals) — v1.4.0
GET/memory/graphGraph data for visualization (nodes=memories, edges=shared tags) — v1.4.0
GET/memory/tagsAll tags with frequency counts — v1.4.0
GET/memory/timelineMemories grouped by time period (?period=hour|day|week|month|year) — v1.4.0

Webhooks — Event Notifications (v1.4.0)

MethodPathDescription
POST/webhooksRegister webhook {url, events, secret?} — get HTTP callbacks on changes
GET/webhooksList all webhooks for the current mind
GET/webhooks/:idGet a single webhook
PUT/webhooks/:idUpdate webhook (url, events, secret, enabled)
DEL/webhooks/:idDelete a webhook
POST/webhooks/:id/testSend a test event to the webhook

Webhook events: memory.created, memory.updated, memory.deleted, task.created, task.updated, task.completed, chat.message_received, chat.message_sent. Patterns: * = all, memory.* = all memory events.

Mind Sharing — Multi-Agent Collaboration (v1.4.0)

MethodPathDescription
POST/minds/:id/shareShare a mind with another user by email {user_email, acl=read|write|admin}
GET/minds/:id/sharesList all shares for a mind
PUT/minds/:id/shares/:shareIdUpdate share ACL (read/write/admin)
DEL/minds/:id/shares/:shareIdRevoke a share
GET/minds/sharedList all minds shared WITH the current user

ACL levels: read = list/search/recall, write = also store/update/delete + chat, admin = also manage shares + webhooks. Owner cannot be removed.


Memory Categories

CategoryWhat goes hereExample
identityWho the user is, who you are"User is Michael Schäfer, in Privatinsolvenz"
preferenceHow the user wants you to behave"Trust your own judgment, don't ask for everything"
factHard knowledge about the user/world"Anwältin: Christine Wesche, info@insbw.de"
projectActive projects + status + config"Mail-API, Port 12700, Token: ..."
skillPatterns and heuristics you've learned".shop TLD + numeric local-part = spam"
mistakeErrors you made + corrections"Don't auto-learn paypal.com as spam"
contextSession-spanning context"Session 2026-06-20: 1100+ mails sorted"
noteEverything else"Next: build memory-api.schaefer.zone"

Priority Levels

PriorityWhen to use
criticalMust never be forgotten (user identity, legal info)
highImportant context (active projects, key contacts)
normalDefault (most memories)
lowNice to know, can be pruned

Memory Object

{
  "id": "uuid",
  "category": "fact",
  "key": "user_name",              // optional, for upsert
  "content": "Michael Schäfer",
  "tags": ["personal", "contact"],
  "priority": "critical",
  "source": "user",                // user | agent | tool | system (default: agent)
  "confidence": 1.0,               // 0.0–1.0 (default: derived from source)
  "created_at": 1781960000,
  "updated_at": 1781960000,
  "expires_at": null               // null = never forget
}
đź’ˇ Pro Tip for LLMs:

Use key for memories that should be updated, not duplicated. For example, "key": "user_name" will update the user's name instead of creating a second copy. Use "key": "project_mail_api" for project status that changes over time.


🧪 Trust Model — Source, Confidence, Verification

Not all memories are equally trustworthy. A fact the human told you is different from a pattern you inferred. Synapse tracks this:

Sources (who/what produced this memory?)

SourceDefault confidenceWhen to use
user1.0 (ground truth)The human told you this directly ("My name is Michael")
tool0.9You observed it via a tool (file contents, API response, SSH output)
system0.9Auto-generated by Synapse itself (e.g. welcome memory)
agent0.5You inferred or guessed it ("Michael seems stressed") — default if not specified

Confidence (0.0–1.0)

How certain is this memory? You can override the default by passing "confidence": 0.7.

How to use this as an LLM

// When the human tells you something:
POST /memory
{ "category": "fact", "key": "user_name", "content": "Michael Schäfer",
  "source": "user", "priority": "critical" }   // confidence defaults to 1.0

// When you infer something:
POST /memory
{ "category": "context", "content": "Michael seems stressed today",
  "source": "agent", "confidence": 0.3 }   // low confidence, honest

// When you read a file and learn something:
POST /memory
{ "category": "project", "content": "Mail-API runs on port 12700",
  "source": "tool" }   // confidence defaults to 0.9

Trust indicators in /memory/recall

⚠️ CRITICAL — Never forget:
• The user's name is Michael Schäfer [identity]
• Michael is in Privatinsolvenz [legal]
• Project Mail-API [project] ~

Legend: ~ = agent-inferred, low confidence · (none) = user/tool/system source

Treat ~ memories with healthy skepticism.


📜 Audit Log — Full Transparency

Every state-changing operation on your mind is logged:

GET /memory/audit?key=YOUR_MIND_KEY
GET /memory/audit?key=YOUR_MIND_KEY&action=memory.stored
GET /memory/audit?key=YOUR_MIND_KEY&limit=50

Returns: timestamp, action (memory.stored / .updated / .deleted / .bulk_sync / .bulk_deleted), target ID, actor (agent / human), IP, user-agent.


đź”§ Limited HTTP Tools (DeepSeek, etc.)

⚠️ If your tool can only open URLs (no custom headers, no POST):

Two auth options: Option A puts the Mind Key in the URL path (recall only), Option B uses ?key=YOUR_MIND_KEY on any endpoint.

Memory

Endpointopen-tool URL (GET only)
Recall all memories (path auth)/memory/recall/YOUR_MIND_KEY
Recall all memories (query auth)/memory/recall?key=YOUR_MIND_KEY
List memories/memory?key=YOUR_MIND_KEY
List by category/memory?key=YOUR_MIND_KEY&category=fact
List by tag/memory?key=YOUR_MIND_KEY&tag=project
Search memories/memory/search?key=YOUR_MIND_KEY&q=your+search
Memory stats/memory/stats?key=YOUR_MIND_KEY
Related memories/memory/MEMORY_ID/related?key=YOUR_MIND_KEY
Store memory (alt to POST)/memory/store?key=YOUR_MIND_KEY&content=text&category=fact&priority=normal&tags=tag1,tag2&memory_key=upsert-key
Update memory (alt to PUT)/memory/MEMORY_ID/update?key=YOUR_MIND_KEY&content=new+text
Delete memory (alt to DELETE)/memory/MEMORY_ID/delete?key=YOUR_MIND_KEY
Bulk delete/memory/bulk-delete?key=YOUR_MIND_KEY&tag=old+tag
By tag/memory/by-tag?key=YOUR_MIND_KEY&tag=project
Incremental diff/memory/diff?key=YOUR_MIND_KEY&since=0
Audit log/memory/audit?key=YOUR_MIND_KEY or ?action=memory.stored&limit=50

Chat

Endpointopen-tool URL (GET only)
Poll for messages/chat/poll?key=YOUR_MIND_KEY
Reply to human (alt to POST)/chat/reply?key=YOUR_MIND_KEY&content=Got+it!
Chat history/chat/history?key=YOUR_MIND_KEY
Online status/chat/status?key=YOUR_MIND_KEY

Tools: Cron

Endpointopen-tool URL (GET only)
List cron jobs/cron?key=YOUR_MIND_KEY
Create cron (alt to POST)/cron/create?key=YOUR_MIND_KEY&name=...&schedule=60&endpoint=...
Delete cron (alt to DELETE)/cron/CRON_ID/delete?key=YOUR_MIND_KEY
Toggle cron (alt to POST)/cron/CRON_ID/toggle?key=YOUR_MIND_KEY

Tools: Variables

Endpointopen-tool URL (GET only)
List all variables/var?key=YOUR_MIND_KEY
Get variable/var/VAR_KEY?key=YOUR_MIND_KEY
Set variable (alt to POST)/var/set?key=YOUR_MIND_KEY&var_key=my+key&value=my+value
Delete variable (alt to DELETE)/var/VAR_KEY/delete?key=YOUR_MIND_KEY

Tools: Utility (no auth needed)

EndpointURL
Server time + timezone/tools/time
Safe calculator/tools/calc?expr=(10+5)*3
Random UUID/number/tools/random?type=uuid or ?type=int&min=1&max=100

Agent Tasks (Mind Key auth)

Endpointopen-tool URL (GET only)
List all tasks/mind/tasks?key=YOUR_MIND_KEY
Create task (alt to POST)/mind/task?key=YOUR_MIND_KEY&title=My+Task&priority=high
Complete task/mind/task/TASK_ID/complete?key=YOUR_MIND_KEY
Delete task/mind/task/TASK_ID/delete?key=YOUR_MIND_KEY

Public (no auth needed)

EndpointURL
This landing page/
API documentation/help or /help?format=json
OpenAPI specification/openapi.json
Health check/health
Interactive playground/playground
Endpoint discovery/endpoints or /endpoints?format=text

Webhooks (v1.4.0)

ActionURL
Register webhookPOST /webhooks with JSON: {"url":"https://...","events":"memory.*","secret":"optional"}
List webhooks/webhooks?key=YOUR_MIND_KEY
Test webhookPOST /webhooks/WEBHOOK_ID/test?key=YOUR_MIND_KEY
Delete webhookDELETE /webhooks/WEBHOOK_ID?key=YOUR_MIND_KEY

Memory Compaction (v1.4.0)

ActionURL
Dry run (preview)POST /memory/compact with JSON: {"dry_run":true,"older_than":2592000}
Compact for realPOST /memory/compact with JSON: {"older_than":2592000,"max_clusters":10}

Compaction clusters similar old agent memories by tag overlap, creates a summary memory (source=system, confidence=0.7), and soft-deletes the originals via expires_at.

Memory Visualization (v1.4.0)

ActionURL
Graph data/memory/graph?key=YOUR_MIND_KEY&max_nodes=200
Tag frequency/memory/tags?key=YOUR_MIND_KEY
Timeline/memory/timeline?key=YOUR_MIND_KEY&period=day

Graph data is compatible with D3.js force-directed graphs. Nodes = memories, edges = shared tags. Stats include density, connected components, isolated nodes, top tags.

Mind Sharing (v1.4.0)

ActionURL
Share a mindPOST /minds/MIND_ID/share with JSON: {"user_email":"user@example.com","acl":"read"} (JWT)
List shares/minds/MIND_ID/shares (JWT)
Shared with me/minds/shared (JWT)
Revoke shareDELETE /minds/MIND_ID/shares/SHARE_ID (JWT)
đź’ˇ Tips:

🔧 Companion Tools — SSH & Browser Proxy

Two companion services run alongside Synapse. They share the same Mind Key for authentication and are accessible via their own subdomains or via Synapse's path prefix.

SSH Proxy

Persistent SSH sessions for LLM agents. Open one session, run many commands asynchronously. No paramiko re-install needed.

MethodPathDescription
GEThttps://ssh.proxy.schaefer.zone/healthHealth check (no auth)
GEThttps://ssh.proxy.schaefer.zone/endpointsAll SSH proxy endpoints (machine-readable)
GEThttps://ssh.proxy.schaefer.zone/helpFull SSH proxy documentation
POST/ssh/new or https://ssh.proxy.schaefer.zone/ssh/newCreate SSH session (JSON: host, port?, username, privateKey or password. port defaults to 22)
POST/ssh/:id/execExecute command (returns exec_id, poll for result)
GET/ssh/:id/exec/:execIdPoll exec result
DEL/ssh/:idClose session
POST/ssh/targetsPre-register SSH target (JSON: name, host, port?, username, privateKey. port defaults to 22)
POST/ssh/connectConnect by target name

Auth: Same Mind Key as Synapse (Authorization: Bearer YOUR_MIND_KEY or ?key=YOUR_MIND_KEY).
Also accessible via Synapse path prefix: https://synapse.schaefer.zone/ssh/*

Browser Proxy

Headless Chrome for LLM agents. Load web pages, execute JavaScript, take screenshots, fill forms, click elements.

MethodPathDescription
GEThttps://browser.proxy.schaefer.zone/healthHealth check (no auth)
GEThttps://browser.proxy.schaefer.zone/endpointsAll browser proxy endpoints (machine-readable)
POST/browser/new or https://browser.proxy.schaefer.zone/browser/newOpen new browser tab (?url=https://example.com)
POST/browser/:id/navigateNavigate to URL (JSON: {url})
GET/browser/:id/urlGet current URL
GET/browser/:id/textGet page text content
GET/browser/:id/htmlGet page HTML
POST/browser/:id/screenshotTake screenshot
POST/browser/:id/clickClick element (JSON: {selector})
POST/browser/:id/fillFill input (JSON: {selector, value})
POST/browser/:id/evalExecute JavaScript (JSON: {script})
DEL/browser/:idClose tab
GET/browser/searchWeb search (?q=query)
GET/browser/sessionsList active tabs

Auth: Same Mind Key as Synapse.
Also accessible via Synapse path prefix: https://synapse.schaefer.zone/browser/*


📦 SDKs — Use Synapse in your code

Synapse has official SDKs for Python and TypeScript/JavaScript. Install with one command and get typed access to all 50+ API methods.

Python SDK

pip install synapse-memory
from synapse_memory import Synapse

synapse = Synapse(
    base_url="https://synapse.schaefer.zone",
    mind_key="YOUR_MIND_KEY",
)

# Recall all memories
text = synapse.memory.recall()

# Store a new memory
synapse.memory.store(
    category="fact",
    content="User is Michael",
    key="user_name",
    priority="critical",
    source="user",
)

# Search
results = synapse.memory.search("insolvenz")

# Chat with human
msgs = synapse.chat.poll()
if msgs["messages"]:
    synapse.chat.reply("Got it!")

# Webhooks (v1.4.0)
synapse.webhooks.register(url="https://my-app.com/webhook", events="memory.*")

# Visualization (v1.4.0)
graph = synapse.visualization.graph(max_nodes=200)
tags = synapse.visualization.tags()

# Compact (v1.4.0)
synapse.compact.compact(dry_run=True)

# Sharing (v1.4.0, JWT required)
synapse.sharing.share(mind_id, "user@example.com", acl="read")

Repo: gitlab.com/schaefer-services/synapse-sdk-py · PyPI: synapse-memory-sdk · 50+ methods · Python 3.10+

TypeScript / JavaScript SDK

npm install synapse-memory
import { Synapse } from 'synapse-memory';

const synapse = new Synapse({
  baseUrl: 'https://synapse.schaefer.zone',
  mindKey: 'YOUR_MIND_KEY',
});

// Recall all memories
const text = await synapse.memory.recall();

// Store a new memory
await synapse.memory.store({
  category: 'fact',
  content: 'User is Michael',
  key: 'user_name',
  priority: 'critical',
  source: 'user',
});

// Search
const results = await synapse.memory.search('insolvenz');

// Chat with human
const msgs = await synapse.chat.poll();
if (msgs.messages.length > 0) {
  await synapse.chat.reply('Got it!');
}

// Webhooks (v1.4.0)
await synapse.webhooks.register({ url: 'https://my-app.com/webhook', events: 'memory.*' });

// Visualization (v1.4.0)
const graph = await synapse.visualization.graph({ maxNodes: 200 });
const tags = await synapse.visualization.tags();

// Compact (v1.4.0)
await synapse.compact.compact({ dryRun: true });

// Sharing (v1.4.0, JWT required)
await synapse.sharing.share(mindId, 'user@example.com', 'read');

Repo: gitlab.com/schaefer-services/synapse-sdk-js · npm: synapse-memory-sdk · 50+ methods · Node 18+ · Full TypeScript types


🔌 MCP Server — Use Synapse in Claude Desktop, Cline, Cursor

Synapse has an official Model Context Protocol (MCP) Server that exposes all 63 Synapse tools as native MCP tools. Works with Claude Desktop, Cline (VS Code), Cursor, Continue, and any MCP-compatible client.

Option 1: Local stdio (Claude Desktop, Cline)

# Claude Desktop config (~/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"
      }
    }
  }
}

Option 2: Remote HTTP/SSE (multi-tenant)

# Connect your MCP client to:
URL: https://synapse-mcp.schaefer.zone/sse
Headers: Authorization: Bearer YOUR_MIND_KEY

Option 3: WebSocket (mobile, high-volume)

# Connect your MCP client to:
URL: wss://synapse-mcp.schaefer.zone/ws?mind_key=YOUR_MIND_KEY

Available MCP Tools (63 total)

CategoryToolsCount
Memoryrecall, list, store, search, semantic-search, update, delete, bulk-delete, stats, audit, related, by-tag, diff, expiring, health, sync, embed-batch, mind-export18
Chatpoll, reply, status, history, unread, send, upload7
Schedulercron_list, cron_create, cron_delete, cron_toggle, var_list, var_get, var_set, var_delete8
Taskstask_list, task_get, task_create, task_update4
Scriptsscript_list, script_get, script_info, script_store, script_delete5
Computerscomputer_list, computer_get, install_code, screenshot, command_queue, command_status, commands_list, disable, delete9
Pushvapid_public_key, subscribe, unsubscribe, test4
User/Mindregister, login, minds_list, mind_create, mind_delete5
Utilitytime, calc, random3

Repo: gitlab.com/schaefer-services/synapse-mcp · npm: synapse-mcp-api · 3 transports (stdio, HTTP/SSE, WebSocket) · Multi-tenant · AutoSync push notifications


Documentation · MCP Setup · Quick Start · API Docs (JSON)


🧠 Synapse Memory API v1.4.0 · Built by Super Z (Z.ai) for Michael Schäfer · 2026