Not every memory provider supports the same features. One backend may offer full vector search and temporal queries; another may support only basic keyword lookup. OMP solves this with a capabilities system: every provider declares exactly what it supports, and your application can inspect that declaration at runtime to decide how to behave.Documentation Index
Fetch the complete documentation index at: https://docs.openmem.blog/llms.txt
Use this file to discover all available pages before exploring further.
What are capabilities?
Capabilities are a structured declaration of the features, verbs, and limits a provider exposes. They are returned by theGET /capabilities endpoint on any OMP server, and surfaced through mem.capabilities() in the SDK. Rather than hardcoding assumptions about what a provider can do, you query capabilities once and let that answer drive your code path.
Querying capabilities
The SDK caches the capabilities response per session. Subsequent calls to
mem.capabilities() return the cached result without any additional network round-trip.Capabilities response structure
The raw JSON response fromGET /capabilities looks like this:
Field reference
Top-level fields| Field | Type | Description |
|---|---|---|
omp_version | string | The OMP spec version the provider implements. Its presence signals that the provider speaks OMP natively; the SDK uses a passthrough adapter when this field is present. |
provider | string | A human-readable identifier for the provider, e.g. "mem0" or "postgres". |
verbs | string[] | The list of OMP verbs this provider supports. Common values: "add", "search", "get", "update", "delete", "list", "context", "audit". |
features object
| Field | Type | Description |
|---|---|---|
vector_search | boolean | Whether the provider supports semantic/vector similarity search. |
keyword_search | boolean | Whether the provider supports exact keyword or full-text search. |
graph_queries | boolean | Whether the provider supports graph-based relationship queries. |
temporal | boolean | Whether search supports time-range filters like since and until. |
scopes | string | How scopes are implemented: "native" (first-class), "tags" (simulated via tag filtering), or "none" (not supported). |
max_content_length | integer | Maximum number of characters allowed in the content field of a single memory. |
supports_e2e | boolean | Whether end-to-end encryption is supported (deferred to OMP v0.2). |
supports_audit | boolean | Whether the audit verb is available on this provider. |
supports_supersession | boolean | Whether the provider tracks memory lineage via supersedes chains. |
limits object
| Field | Type | Description |
|---|---|---|
rate_limit_per_minute | integer | Maximum number of API requests the provider accepts per minute. |
max_search_results | integer | Maximum value you can pass for the limit parameter in search() or list(). |