{"service":"Amber: long-term memory for AI assistants","documentation":"https://ambermem.com/llms.txt","endpoints":{"GET /health":"Service health check","GET /feedback":"Contract for the feedback endpoint below, as JSON","POST /feedback":"Send feedback or a bug report. No account or authentication required. Use this if you cannot connect to the MCP server. Body: {\"message\": \"required\", \"contact\": \"optional\"}","GET /llms.txt":"Full machine-readable overview of Amber (on ambermem.com)","POST /mcp":"MCP Streamable HTTP endpoint (requires OAuth 2.1; see /.well-known/oauth-protected-resource)","POST /backup":"Start a full export for an unattended job. Send a backup key in the X-Amber-Backup-Key header (create one with the amber_create_backup_key tool). Returns 202 with a task_id and a status_url.","GET /backup/<task-id>":"Backup task status. Same header. Carries a signed download_url once status is \"complete\". Polling is free and does not count against the rate limit.","POST /import/from-url":"Restore an export Amber can reach itself. Same header; body {\"url\": \"https://...\"}. Amber reads the archive from there a piece at a time and never copies it, so the link must stay valid for the whole restore and the host must support range requests. No size limit. Safe to repeat: memories keep their original ids, so nothing is duplicated.","POST /import/presign":"Restore a file only you hold. Same header, no body. Returns an upload_url to PUT the .json.gz to and a complete_url to POST afterwards. No size limit; the link is good for 7 days, so an interrupted upload can be resumed.","POST /import/<task-id>/uploaded":"Call after the PUT above finishes. Checks what landed and starts the restore.","GET /import/<task-id>":"Import task status. Same header."}}