MAQPNADocs

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 "/" when published to the gateway.
observedGeneration integer (int64)