MemoryStore
MemoryStore (maqpna.com/v1alpha1): every field, type, default and validation rule, generated from the CRD schema.
MemoryStore is a governed, residency-bound session memory store.
At a glance#
| Property | Value |
|---|---|
| API version | maqpna.com/v1alpha1 |
| Kind | MemoryStore |
| Scope | Namespaced |
| Plural | memorystores |
| Short names | mem, ms |
| Categories | maqpna |
| Status subresource | yes |
kubectl get memorystores -A
kubectl get mem <name> -o yaml
kubectl explain memorystores.spec
Columns in kubectl get#
| Column | Type | From |
|---|---|---|
| Backend | string | .spec.backend.type |
| Jurisdiction | string | .spec.jurisdiction |
| TTL | integer | .spec.ttlDays |
| Age | date | .metadata.creationTimestamp |
Example#
From config/samples/memorystore-notes.yaml:
# F-23: an in-country memory store behind the gateway's MCP server "memory"
# (tools memory_put/get/search/delete), per verified user, 90-day retention.
# GDPR erasure: DELETE /v1/memory/users/{user}?namespace=team-a (auditor).
apiVersion: maqpna.com/v1alpha1
kind: MemoryStore
metadata:
name: notes
namespace: team-a
spec:
agents: [coder]
jurisdiction: EU-DE
ttlDays: 90
backend:
type: builtin
Spec fields#
MemoryStoreSpec binds agents to an in-country memory store exposed by the gateway's built-in MCP server "memory" (tools memory_put, memory_get, memory_search, memory_delete).
| Field | Type | Required | Description |
|---|---|---|---|
agents |
[]string | yes | agents (same namespace) bound to this store; "*" binds every agent of the namespace. An agent may be bound to at most one store. Min items: 1. |
allowUnverifiedPrincipal |
boolean | allowUnverifiedPrincipal lets sessions whose on-behalf-of user was not verified (maqpna_principal_verified empty) use the store. Default false: per-user namespaces are only derived from verified principals. | |
backend |
object | backend of the store. Rule: endpoint is required for postgres and opensearch backends. | |
backend.credentialsSecretRef |
object | credentialsSecretRef names a Secret (same namespace) with the backend's credentials (keys username/password or dsn). | |
backend.credentialsSecretRef.name |
string | yes | Min length: 1. |
backend.endpoint |
string | endpoint of an external backend (postgres://host:5432/db or https://opensearch.example:9200). It must pass the sovereignty policy's egress checks at the gateway. | |
backend.type |
string | type: builtin (default), postgres or opensearch. One of: builtin, postgres, opensearch. Default: "builtin". |
|
dlpProfile |
string | dlpProfile is the gateway DLP profile applied to writes (default: the gateway's binding for server "memory" / the namespace); "none" disables DLP for writes to this store. Pattern: ^[a-z0-9][a-z0-9-]{0,62}$. |
|
jurisdiction |
string | yes | jurisdiction where the data is stored (e.g. EU-DE). It must be allowed by the SovereigntyPolicy; in enforce mode a non-compliant store is not published to the gateway (residency). Min length: 2. |
maxEntriesPerUser |
integer (int32) | maxEntriesPerUser caps the memories of one user (default 1000). Minimum: 1. Maximum: 100000. |
|
maxValueBytes |
integer (int32) | maxValueBytes caps one memory's value (default 16384). Minimum: 1. Maximum: 1048576. |
|
ttlDays |
integer (int32) | ttlDays is the retention of each memory (from its last write); expired memories are deleted by the gateway. 0 = keep until erased. Minimum: 0. Maximum: 3650. |
Status fields#
MemoryStoreStatus is the observed state of a MemoryStore.
The operator writes status; do not set it yourself.
| Field | Type | Required | Description |
|---|---|---|---|
conditions |
[]object | conditions: Ready, ResidencyCompliant. | |
conditions[].lastTransitionTime |
string (date-time) | yes | lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. |
conditions[].message |
string | yes | message is a human readable message indicating details about the transition. This may be an empty string. Max length: 32768. |
conditions[].observedGeneration |
integer (int64) | observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. Minimum: 0. |
|
conditions[].reason |
string | yes | reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. Min length: 1. Max length: 1024. Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$. |
conditions[].status |
string | yes | status of the condition, one of True, False, Unknown. One of: True, False, Unknown. |
conditions[].type |
string | yes | type of condition in CamelCase or in foo.example.com/CamelCase. Max length: 316. Pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$. |
gatewayKey |
string | gatewayKey is " |
|
observedGeneration |
integer (int64) |