{"service":"memorylayer","name":"Memorylayer","runtime":"vps","database":"postgres","base_url":"https://memorylayer.run","routes":{"home":"https://memorylayer.run/","docs":"https://memorylayer.run/docs","agents":"https://memorylayer.run/agents","capabilities":"https://memorylayer.run/capabilities","examples":"https://memorylayer.run/examples","api_explorer":"https://memorylayer.run/api-explorer","sdks":"https://memorylayer.run/sdks","status":"https://memorylayer.run/status","openapi":"https://memorylayer.run/openapi.json","service_status":"https://memorylayer.run/api/service/status","capabilities_json":"https://memorylayer.run/api/capabilities","mcp_manifest":"https://memorylayer.run/api/mcp/manifest","sdk_snippets":"https://memorylayer.run/api/sdk-snippets","playbooks":"https://memorylayer.run/api/playbooks","api_examples":"https://memorylayer.run/api/examples"},"counts":{"features":29,"capabilities":230,"mcp_tools":60,"tool_groups":6,"recipes":12,"sdk_snippets":6,"playbooks":5,"api_examples":10,"skills":2},"capability_groups":[{"name":"Agent runtime","items":["workspace bootstrap","HTTP MCP bridge","tool discovery","argument hints","starter skills","OpenAPI contract","copyable recipes","agent setup page","workspace-scoped keys","usage-visible agent calls"]},{"name":"Retrieval","items":["semantic recall","compact recall context","recognition hints","recent memory lookup","fact-only retrieval","procedure-aware retrieval","full-context retrieval","retrieval explanations","query comparison","compressed query summaries"]},{"name":"Knowledge graph","items":["entity search","entity graph export","entity timeline","related entity traversal","memory backlinks","similar memory lookup","entity aliases","entity metadata","entity merge","community detection"]},{"name":"Memory writes","items":["narrative memory","fact memory","procedure memory","decision memory","error memory","negative knowledge","interaction capture","project state","session diary","manual dashboard writes"]},{"name":"Session continuity","items":["session checkpoint","session handoff","resume context","session summary","recent activity","handoff starter skill","workspace memory skill","task skill selection","layered prompt context","focus briefs"]},{"name":"Curation","items":["memory annotate","memory edit","memory invalidate","status transitions","status history","tag add","tag remove","batch tagging","pin memory","forget memory"]},{"name":"Maintenance","items":["promote memory","demote memory","unpin memory","link memories","deduplicate memories","dream consolidation","pattern extraction","quality metrics","access patterns","reranker status"]},{"name":"Ingestion","items":["paste ingest","file ingest","JSON ingest","line splitting","paragraph splitting","single-block ingest","batch API ingest","source naming","source type labels","ingest run history"]},{"name":"Operations","items":["service status page","runtime cache stats","workspace health","memory map","layer counts","month counts","source counts","entity counts","recent export","service metadata API"]},{"name":"Workspace control","items":["GitHub login","workspace creation","workspace invites","member records","API key creation","API key revocation","key last-used tracking","audit history","usage route counts","usage event feed"]},{"name":"Public site","items":["home page","docs page","agent page","examples page","security page","status page","changelog page","capabilities page","robots.txt","sitemap.xml"]},{"name":"Deployment","items":["VPS runtime","Dockerfile","docker compose","Postgres metadata","workspace Postgres schemas","warm runtime cache","runtime eviction","Caddy/nginx ready","serverless guidance","proprietary license page"]},{"name":"Discovery APIs","items":["capabilities JSON","MCP manifest JSON","service manifest JSON","tool category groups","recipe discovery","skill discovery","public OpenAPI link","machine-readable counts","public route catalog","agent bootstrap map"]},{"name":"Client UX","items":["capability ledger","tool group sections","copyable curl blocks","environment setup block","recipe playbooks","minimal nav","responsive capability lists","scan-friendly tables","plain language docs","free-service messaging"]},{"name":"Agent safety","items":["workspace-scoped auth","no public memory calls","explicit argument hints","curation tools documented","negative knowledge capture","audit on bridge calls","usage trail on bridge calls","revocable keys","soft-delete memory path","status history lookup"]},{"name":"Operator workflows","items":["health check recipe","curation recipe","entity pivot recipe","checkpoint recipe","compact context recipe","capability sync recipe","tool manifest recipe","usage monitor recipe","ingestion recipe","handoff recipe"]},{"name":"SDK snippets","items":["JavaScript fetch snippet","Python requests snippet","shell recall snippet","agent bootstrap snippet","batch ingest snippet","manifest client snippet","copy buttons","language labels","snippet JSON endpoint","SDK page"]},{"name":"Playbooks","items":["new agent session","repository handoff","memory cleanup","investigation pivot","client onboarding","ordered steps","expected outcomes","operator-facing copy","agent-facing workflow","playbook JSON endpoint"]},{"name":"Observability","items":["route-level usage","key-level usage","event feed","audit feed","runtime cache status","service status JSON","workspace status endpoint","health tool","quality metrics tool","access pattern tool"]},{"name":"Onboarding","items":["environment variables","bootstrap-first flow","tool manifest flow","capability sync flow","copyable examples","free service explanation","GitHub sign-in path","workspace key path","starter skill path","OpenAPI path"]},{"name":"API examples","items":["example catalog page","example JSON endpoint","public route examples","workspace route examples","bridge call examples","ingest examples","usage examples","export examples","auth examples","copyable fixture blocks"]},{"name":"Response fixtures","items":["service status fixture","bootstrap fixture","recall fixture","checkpoint fixture","ingest fixture","usage fixture","MCP manifest fixture","capability fixture","recent export fixture","error shape fixture"]},{"name":"Playground UX","items":["method labels","auth labels","request body preview","response body preview","workspace slug placeholders","environment assumptions","API explorer nav item","docs cross-link","examples cross-link","client implementation guide"]}],"features":[{"name":"Workspace isolation","summary":"Each workspace receives its own Engram schema and service boundary."},{"name":"GitHub login","summary":"User identity is handled through GitHub OAuth with no local passwords."},{"name":"Workspace invites","summary":"Issue shareable invites with role-aware membership records."},{"name":"Scoped API keys","summary":"Generate workspace keys for agents, apps, and ingestion pipelines."},{"name":"API usage trail","summary":"Track service calls by route, key, and workspace."},{"name":"Audit history","summary":"Record workspace actions such as keys, invites, memory writes, and bridge calls."},{"name":"Hosted MCP bridge","summary":"Call selected Engram tools through a simple HTTP JSON bridge."},{"name":"Bootstrap payloads","summary":"Discover URLs, headers, tools, and skills from one workspace endpoint."},{"name":"Starter skills","summary":"Download markdown skills that teach agents how to use hosted memory."},{"name":"Recent memory API","summary":"Load the latest workspace memories without custom query code."},{"name":"Search API","summary":"Run hosted retrieval against the real Engram memory graph."},{"name":"Remember API","summary":"Store narrative, fact, and procedure memories over HTTP."},{"name":"Decision memory","summary":"Bridge tool support for durable decisions and rationale."},{"name":"Project memory","summary":"Bridge tool support for structured project state."},{"name":"Focus briefs","summary":"Generate compact task context from the memory graph."},{"name":"Hotspot detection","summary":"Find dense or high-activity regions in workspace memory."},{"name":"Query comparison","summary":"Compare retrieval overlap between two prompts or topics."},{"name":"OpenAPI contract","summary":"Expose the machine-readable API contract for clients."},{"name":"VPS runtime","summary":"Run a warm Python service with direct Postgres access."},{"name":"Postgres-first storage","summary":"Keep app metadata and Engram workspace data in Postgres."},{"name":"Dashboard search","summary":"Search and inspect workspace memory from the browser."},{"name":"Dashboard write path","summary":"Store memories manually when an operator needs to pin state."},{"name":"Key revocation","summary":"Revoke workspace API keys without touching the memory store."},{"name":"Public service docs","summary":"Keep setup, endpoints, bridge tools, and skills documented in-app."},{"name":"Paste ingestion","summary":"Import pasted notes, transcripts, reports, or logs directly from a workspace."},{"name":"File ingestion","summary":"Upload a text, markdown, JSON, or CSV-like file and split it into memories."},{"name":"Batch ingest API","summary":"Push many memories in one authenticated request."},{"name":"Import run history","summary":"Track source, type, item count, and actor for each ingestion run."},{"name":"Recent export","summary":"Download recent workspace memories as JSON for inspection or backup."}],"recipes":[{"name":"Codex-style handoff","steps":["Load bootstrap","Recall recent context","Work normally","Remember outcome"],"command":"curl -H \"Authorization: Bearer $MEMORYLAYER_KEY\" \"$MEMORYLAYER_URL/api/workspaces/$SLUG/bootstrap\""},{"name":"Hosted MCP bridge","steps":["List bridge tools","POST tool name and args","Store audit trail"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"recall_recent\",\"args\":{\"limit\":5}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Ingestion pipeline","steps":["Create a service key","POST memories","Watch usage events"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"source_name\":\"handoff.md\",\"items\":[\"Deployment completed\",\"Follow up on billing UI\"],\"layer\":\"episodic\",\"memory_type\":\"fact\"}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/ingest\""},{"name":"Usage monitor","steps":["Poll usage endpoint","Group by route","Rotate quiet or noisy keys"],"command":"curl -H \"Authorization: Bearer $MEMORYLAYER_KEY\" \"$MEMORYLAYER_URL/api/workspaces/$SLUG/usage\""},{"name":"Compact prompt context","steps":["Call MCP bridge","Fetch recall_context","Inject result"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"recall_context\",\"args\":{\"query\":\"current project state\",\"max_tokens\":1200}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Session checkpoint","steps":["Summarize work","Save checkpoint","Resume later"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"session_checkpoint\",\"args\":{\"note\":\"Finished deploy; next check onboarding flow\",\"limit\":8}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Negative knowledge","steps":["Catch bad assumption","Store exclusion","Prevent repeat"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"remember_negative\",\"args\":{\"content\":\"Do not use local SQLite for production memory\",\"scope\":\"deployment\",\"context\":\"Postgres is required for hosted workspaces\"}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Entity pivot","steps":["Find entity","Load graph","Follow related work"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"entity_graph\",\"args\":{\"name\":\"Memorylayer\"}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Curation pass","steps":["Find duplicate cluster","Deduplicate","Check quality"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"dedup\",\"args\":{\"threshold\":0.92,\"max_merges\":5}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""},{"name":"Tool manifest","steps":["Fetch manifest","Group tools","Render client UI"],"command":"curl \"$MEMORYLAYER_URL/api/mcp/manifest\""},{"name":"Public capability sync","steps":["Fetch capabilities","Cache counts","Expose service map"],"command":"curl \"$MEMORYLAYER_URL/api/capabilities\""},{"name":"Workspace health check","steps":["Call health","Read memory map","Export recent"],"command":"curl -X POST -H \"Authorization: Bearer $MEMORYLAYER_KEY\" -H \"Content-Type: application/json\" -d '{\"tool\":\"health\",\"args\":{}}' \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\""}],"sdk_snippets":[{"name":"JavaScript fetch","language":"javascript","summary":"Call the hosted bridge from a Node or browser-side tool runner.","code":"const response = await fetch(`${MEMORYLAYER_URL}/api/workspaces/${SLUG}/mcp`, {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": `Bearer ${MEMORYLAYER_KEY}`,\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify({\n    tool: \"recall_context\",\n    args: { query: \"current project state\", max_tokens: 1200 }\n  })\n});\n\nconst payload = await response.json();\nconsole.log(payload.result);"},{"name":"Python requests","language":"python","summary":"Use Memorylayer from scripts, workers, or custom agent harnesses.","code":"import os\nimport requests\n\nbase = os.environ[\"MEMORYLAYER_URL\"]\nslug = os.environ[\"SLUG\"]\nkey = os.environ[\"MEMORYLAYER_KEY\"]\n\nresponse = requests.post(\n    f\"{base}/api/workspaces/{slug}/mcp\",\n    headers={\"Authorization\": f\"Bearer {key}\"},\n    json={\"tool\": \"session_checkpoint\", \"args\": {\"note\": \"handoff saved\", \"limit\": 8}},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json()[\"result\"])"},{"name":"Shell recall","language":"shell","summary":"Small curl call for debugging keys and tool output.","code":"curl -X POST \\\n  -H \"Authorization: Bearer $MEMORYLAYER_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"tool\":\"recall_hints\",\"args\":{\"query\":\"billing work\",\"top_k\":5}}' \\\n  \"$MEMORYLAYER_URL/api/workspaces/$SLUG/mcp\" "},{"name":"Agent bootstrap","language":"shell","summary":"Fetch workspace-specific URLs, skills, headers, and tool discovery.","code":"curl -H \"Authorization: Bearer $MEMORYLAYER_KEY\" \\\n  \"$MEMORYLAYER_URL/api/workspaces/$SLUG/bootstrap\" "},{"name":"Batch ingest","language":"shell","summary":"Push a small handoff or imported dataset into workspace memory.","code":"curl -X POST \\\n  -H \"Authorization: Bearer $MEMORYLAYER_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"source_name\":\"handoff.md\",\"source_type\":\"handoff\",\"items\":[\"Shipped manifest endpoints\",\"Next: test onboarding\"],\"memory_type\":\"fact\"}' \\\n  \"$MEMORYLAYER_URL/api/workspaces/$SLUG/ingest\" "},{"name":"MCP manifest client","language":"javascript","summary":"Build a tool picker from the public MCP manifest.","code":"const manifest = await fetch(`${MEMORYLAYER_URL}/api/mcp/manifest`).then((r) => r.json());\nfor (const group of manifest.tool_groups) {\n  console.log(group.name, group.tools.map((tool) => tool.name));\n}"}],"playbooks":[{"name":"New agent session","steps":["Fetch bootstrap","Load resume_context","Call get_skills","Use recall_context","Save session_checkpoint"],"outcome":"The agent starts with useful state and leaves a handoff behind."},{"name":"Repository handoff","steps":["Ingest summary","remember_project","remember_decision","session_handoff","export recent"],"outcome":"A repo can be picked up by another session without reading stale chat logs."},{"name":"Memory cleanup","steps":["quality_metrics","dedup","batch_tag","promote/demote","status_history"],"outcome":"Operators can keep the workspace useful instead of letting memories rot."},{"name":"Investigation pivot","steps":["search_entities","entity_graph","recall_related","backlinks","focus_brief"],"outcome":"A single entity becomes a navigable map of prior work."},{"name":"Client onboarding","steps":["service manifest","MCP manifest","capability JSON","copy SDK snippet","test status"],"outcome":"A custom client can wire itself without hardcoded docs."}],"api_examples":[{"name":"Service status","method":"GET","path":"/api/service/status","auth":"public","summary":"Check whether the hosted service is alive and read public counts.","request":null,"response":{"status":"ok","service":"memorylayer","runtime":"vps","database":"postgres","features":29,"capabilities":230,"mcp_tools":60}},{"name":"Service manifest","method":"GET","path":"/api/service/manifest","auth":"public","summary":"Load the route map and public integration counts for client setup screens.","request":null,"response":{"service":"memorylayer","routes":{"docs":"https://memorylayer.run/docs","api_examples":"https://memorylayer.run/api/examples","mcp_manifest":"https://memorylayer.run/api/mcp/manifest"},"counts":{"capabilities":230,"api_examples":10}}},{"name":"MCP manifest","method":"GET","path":"/api/mcp/manifest","auth":"public","summary":"Discover grouped tools, auth headers, and workspace bridge URL templates.","request":null,"response":{"transport":"http-json","workspace_call_url_template":"https://memorylayer.run/api/workspaces/{slug}/mcp","auth":["Authorization: Bearer <workspace-api-key>","X-API-Key: <workspace-api-key>"],"tool_groups":[{"name":"Retrieval","tools":[{"name":"recall_context"}]}]}},{"name":"Workspace bootstrap","method":"GET","path":"/api/workspaces/{slug}/bootstrap","auth":"workspace key","summary":"Fetch workspace-specific URLs, headers, starter skills, and tool discovery.","request":null,"response":{"workspace":{"slug":"demo"},"auth":{"headers":["Authorization: Bearer <workspace-api-key>","X-API-Key: <workspace-api-key>"]},"endpoints":{"mcp":"https://memorylayer.run/api/workspaces/demo/mcp"},"skills":[{"name":"workspace-memory"}]}},{"name":"Recall context","method":"POST","path":"/api/workspaces/{slug}/mcp","auth":"workspace key","summary":"Ask the bridge for compact context before an agent starts work.","request":{"tool":"recall_context","args":{"query":"current project state","max_tokens":1200}},"response":{"ok":true,"tool":"recall_context","result":"Relevant memory context..."}},{"name":"Session checkpoint","method":"POST","path":"/api/workspaces/{slug}/mcp","auth":"workspace key","summary":"Save a compact handoff after meaningful work or deployment.","request":{"tool":"session_checkpoint","args":{"note":"Shipped API explorer","limit":8}},"response":{"ok":true,"tool":"session_checkpoint","result":{"saved":true}}},{"name":"Batch ingest","method":"POST","path":"/api/workspaces/{slug}/ingest","auth":"workspace key","summary":"Import notes, transcripts, reports, or pipeline output as memories.","request":{"source_name":"handoff.md","source_type":"handoff","items":["Release deployed","Next: test onboarding"],"memory_type":"fact"},"response":{"ok":true,"run":{"source_name":"handoff.md","items":2},"memory_ids":["mem_1","mem_2"]}},{"name":"Usage feed","method":"GET","path":"/api/workspaces/{slug}/usage","auth":"workspace key","summary":"Read recent API calls, per-route totals, and key activity.","request":null,"response":{"route_counts":[{"route":"/api/workspaces/demo/mcp","count":14}],"recent_events":[{"route":"/api/workspaces/demo/mcp","status_code":200}]}},{"name":"Recent export","method":"GET","path":"/api/workspaces/{slug}/export/recent","auth":"workspace key","summary":"Export the latest workspace memories for backup, inspection, or migration checks.","request":null,"response":{"workspace":"demo","memories":[{"content":"API explorer deployed","memory_type":"fact","layer":"episodic"}]}},{"name":"Error shape","method":"POST","path":"/api/workspaces/{slug}/mcp","auth":"workspace key","summary":"All service errors return a direct detail message that clients can show or log.","request":{"tool":"unknown_tool","args":{}},"response":{"detail":"Unsupported tool: unknown_tool"}}]}