Documentation
Anona Memory is a managed memory layer for AI agents. Store facts in isolated memory spaces, recall them semantically across sessions, and synthesize insights: via REST API, the Python SDK, or MCP.
How it works
Anona exposes three core operations. Each maps to an API endpoint, an SDK method, and an MCP tool:
| Operation | What it does | REST | MCP tool |
|---|---|---|---|
| Retain | Store facts, preferences, and session context | POST /v1/memories | remember |
| Recall | Semantic search over stored memories | POST /v1/search | recall |
| Reflect | Synthesize patterns and insights from a space | POST /v1/insights | get_insights |
Memory spaces
A memory space is an isolated collection of memories scoped to your organization. Use separate spaces per app, user cohort, or agent. Spaces are tenant-isolated: API keys only access spaces your account is a member of.
Create spaces in the dashboard or via POST /v1/spaces. Every retain, recall, and reflect call requires a space_id.
Integration options
- Python SDK: direct control over retain, recall, and reflect. Best for custom agents and backends.
- LiteLLM callback: two-line setup; memories are retrieved before each LLM call and stored after responses.
- MCP: give coding agents (Claude Code, Cursor) native
remember/recalltools without writing integration code. - Manual injection: call
search, build your own system prompt, use any LLM provider.
Authentication
All API requests use a Bearer token. Create keys in the dashboard. Keys are shown once at creation : store them securely.
Authorization: Bearer anona_live_…Base URL
Production API: http://anona-prod-alb-747552680.us-east-1.elb.amazonaws.com
When self-hosting locally, point the SDK at your gateway (typically http://localhost:3001). The dashboard quickstart auto-fills your org's credentials when you are logged in.
New to Anona? Create a free account, generate an API key, and follow the step-by-step quickstart below.
Create account →Quickstart
Add persistent memory to your AI agent in about five minutes.
Install the SDK
Install from the public SDK repository. PyPI publishing is coming soon.
For automatic LiteLLM injection, also install pip install litellm.
Get your API key and space ID
Sign up (free tier available), then:
- Create an API key on the API Keys page.
- Create a memory space on the Memory Spaces page.
anona_live_YOUR_KEYyour-space-idhttp://anona-prod-alb-747552680.us-east-1.elb.amazonaws.comAdd memory to your LLM calls
Option A: LiteLLM callback (recommended). Two lines: every LLM call automatically recalls relevant memories and stores the exchange afterward.
Option B: Direct SDK: full control over what you store and when you recall.
Manual injection (any LLM / framework)
Not using LiteLLM? Retrieve memories yourself and inject them before calling any LLM provider.
What's next
- MCP integration: connect Claude Code or Cursor
- REST API reference: full endpoint documentation
- Browse memory spaces: view stored memories
- Monitor usage: operations over time
REST API
Customer-facing HTTP API for memory operations. All endpoints require Bearer authentication and are billed per operation against your plan quota.
http://anona-prod-alb-747552680.us-east-1.elb.amazonaws.comVersion:
v1Authentication
Include your API key on every request:
| Prefix | Environment |
|---|---|
anona_live_* | Production: counts against quota |
anona_test_* | Sandbox: safe for development |
Errors
Errors return a consistent JSON shape:
| Code | HTTP | Description |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid API key |
FORBIDDEN | 403 | Key cannot access this space |
NOT_FOUND | 404 | Resource does not exist |
QUOTA_EXCEEDED | 402 | Plan quota exhausted |
RATE_LIMITED | 429 | Too many requests: check Retry-After |
INVALID_REQUEST | 422 | Validation failed |
Rate limits
Every response includes rate-limit headers:
X-RateLimit-Limit: max requests per windowX-RateLimit-Remaining: requests leftX-RateLimit-Reset: window reset (Unix timestamp)
Memories & spaces
/v1/spaces/List memory spaces accessible to your API key.
/v1/spacesCreate a new memory space.
/v1/memoriesRetain: store a memory. Anona extracts entities and indexes content for semantic recall.
Returns 201 Created with memory_id.
/v1/searchRecall: semantic search over memories in a space.
Returns ranked results with content and relevance scores.
/v1/insightsReflect: synthesize insights from the entity graph and memories in a space.
/v1/spaces/{space_id}/memoriesList memories in a space (paginated).
/v1/spaces/{space_id}/memories/{memory_id}Delete a single memory. Returns 204 No Content.
/v1/spaces/{space_id}Get a single space's metadata.
/v1/spaces/{space_id}Permanently delete a space and all its memories. Irreversible.
/v1/chat/completionsOpenAI-compatible chat completions with memory auto-injected: recalls relevant memories before the call and retains the exchange after, without a separate LiteLLM callback.
Space members
Spaces with no member rows are treated as org-wide (any member of your org can access them). Adding a member row switches the space to enforced, invite-only access.
/v1/spaces/{space_id}/membersList members with access to a space.
/v1/spaces/{space_id}/membersAdd an org member to a space.
/v1/spaces/{space_id}/members/{target_member_id}Remove a member's access to a space.
Organization members
/v1/members/meGet the member record for the authenticated caller.
/v1/membersList all members of your organization.
/v1/members/inviteInvite a new member to your organization by email.
/v1/members/{member_id}Remove a member from your organization.
Organization & projects
/v1/orgs/meGet your organization's profile, plan, and settings.
/v1/projectsList projects in your organization.
/v1/projectsCreate a project.
API keys
/v1/api-keysList API keys for your organization. Secrets are never returned after creation.
/v1/api-keysCreate a new API key. The full secret is returned once, in this response only : store it immediately.
/v1/api-keys/{key_id}Revoke an API key. Takes effect immediately.
Usage & billing
/v1/usageSummary of operations and credits consumed against your plan quota.
/v1/usage/breakdownUsage broken down by operation type and time bucket.
/v1/billingCurrent plan, quota limits, and billing status.
/v1/billing/upgradeChange plan tier directly (non-Stripe-checkout upgrade path).
/v1/billing/checkoutCreate a Stripe Checkout session for subscribing to a paid plan.
/v1/billing/portalCreate a Stripe Billing Portal session for managing payment methods and invoices.
/v1/billing/cancelCancel your subscription at the end of the current billing period.
Python SDK
The SDK wraps these endpoints (see quickstart for install and usage). Method mapping:
| SDK method | API |
|---|---|
add_memory() | POST /v1/memories |
search() | POST /v1/search |
insights() | POST /v1/insights |
list_spaces() | GET /v1/spaces/ |
MCP Integration
Give Claude Desktop, Claude Code, or Cursor direct access to your memory spaces via the Model Context Protocol.
Tools
The Anona MCP server exposes four tools:
| Tool | Arguments | Description |
|---|---|---|
remember | content, space_id | Store a fact for future sessions. |
recall | query, space_id, limit? | Search memories relevant to a question. |
list_spaces | - | List memory spaces this key can access. |
get_insights | query, space_id | Synthesize what the space knows about a topic. |
Tool errors (denied space, quota exceeded) return as MCP isError content, not HTTP errors: so the transport stays intact.
Get an API key
Create a key on the API Keys page. Keys are scoped to your organization and can only access spaces you are a member of.
Choose hosted or local
Hosted (recommended)
Point your MCP client at http://anona-prod-alb-747552680.us-east-1.elb.amazonaws.com/mcp. No local install: works with HTTP-capable clients. Authenticate with your Bearer API key.
Claude Desktop: add to claude_desktop_config.json and restart. Cursor: add to ~/.cursor/mcp.json and reload.
Local (stdio)
Run the MCP server on your machine via uvx. Useful when your client only supports stdio transport.
Verify it works
MCP tools load at session start: restart your client after adding the server. Then ask your agent to remember something, or call the API directly:
Protocol details
- Transport: Streamable HTTP, stateless JSON mode at
POST /mcp - Auth:
Authorization: Bearer anona_live_… - Billing: each tool call counts as an API operation against your plan
OAuth 2.1 (beta)
As an alternative to a static Bearer key, the gateway supports full OAuth 2.1 with PKCE for MCP clients that discover and authorize dynamically. Currently opt-in server-side and off by default: use the API key flow above unless your deployment has this enabled.
| Step | Endpoint |
|---|---|
| Discovery | GET /.well-known/oauth-protected-resource |
| Discovery | GET /.well-known/oauth-authorization-server |
| Dynamic client registration | POST /oauth/register |
| Login + consent (PKCE) | GET / POST /oauth/authorize |
| Token exchange (code or refresh) | POST /oauth/token |
| Revoke | POST /oauth/revoke |
| List connected apps | GET /v1/oauth/connections |
| Disconnect an app | DELETE /v1/oauth/connections/{client_id} |
Access tokens are short-lived signed JWTs; authorization codes and refresh tokens are stored hashed. Refresh tokens rotate on use.
Questions or integration help? Email support@anonalabs.com.
Create account →