Applies to: CPersona 2.5.x. The authoritative description of every
argument is the tool's own MCP description — your client reads it, and it
ships with the version you are running. This page groups the 30 tools by
what you reach for them for, and links to the contract when a tool behaves in
a way its name does not suggest.
Refuse edits and deletes on a memory. It is protection, not a ranking boost (contract)
unlock_memory
Lift that protection
delete_memory
Delete one memory. Ownership is enforced only when agent_id is passed — omit it and the delete is unscoped and can remove another agent's row (rejected while locked either way)
delete_episode
Delete one episode. Same conditional ownership as delete_memory above
delete_agent_data
Delete everything belonging to one agent. Exposed over the network like any other tool — reason enough to set CPERSONA_AUTH_TOKEN on the HTTP transport
The main gate knob. Sets an agent's precision preference and recalibrates its post-fusion quality gate — reach for this before touching raw thresholds (tuning order)
get_recall_precision
Read the effective precision for an agent
calibrate_threshold
Re-derive the vector threshold from the corpus itself — by default (separation) from where a null distribution of random pairs separates from same-session positives; percentile and zscore are the alternatives. No labels needed. Run it after a re-embed or a large import
Write memories, episodes and profiles to JSONL — schema-version independent, so it doubles as a logical backup (backup runbook)
import_memories
Read that JSONL back. Idempotent, though not by one key: memories dedup on msg_idand on identical content within the project/channel scope, while episodes dedup on an identical summary (they carry no msg_id)
merge_memories
Move or copy one agent's data into another, atomically and with deduplication
migrate_channel_axis
Re-channel bridge-type memories onto their concrete channel. A one-time repair, not a routine operation
Registry-driven check with severity-tagged issues and, with fix=true, auto-repair: contamination, duplicates, FTS integrity, embedding-dimension drift, schema objects, stale tasks, invalid data. Some checks are report-only by design — isolation-axis hygiene among them, because which spelling of an axis is canonical is an operator's call, not a repair
The same findings, pulled on demand — the SuperAuditor pull contract (standard). Whole-database by design (no agent or project filter), read-only, with capped_kinds naming every kind that had more than per_kind_limit rows. A probe that raised shows up as a finding of kind check_crashed rather than failing the call
check_health and deep_check are also reachable outside MCP as python -m cpersona.checkup, which is
the form to use in CI. Cadence guidance is in the
operations runbook.
Turn writes into no-ops for a TTL window. Responses carry persisted: false — branch on that, not on an id
resume_persistence
Re-enable writes immediately
persistence_status
Whether writes are paused, and how much TTL remains
Use these for benchmarking or throwaway exploration you do not want in the
corpus. The blast radius follows session_key, which each of the three
reports back as scope. Declare a key on the pause and on the write calls it
should cover, and the pause covers that key alone (scope: "session"); a
session sending a different key is neither silenced by it nor able to clear it.
The key is compared, never verified, so it partitions keys rather than callers —
anyone sending the same string shares the pause.
Omit the key and you arm the bucket every keyless caller shares
(scope: "process"). Under stdio, where the client owns its own process, that
bucket is the session; on a streamable-HTTP deployment one process serves every
client, so a keyless pause silences writes for every other keyless session — and
those sessions are not told.
Two paths do not fit the persisted: false shape: check_health and
deep_check are not blocked but downgrade to fix=false, and
migrate_channel_axis is forced into dry-run and reports repairs_skipped
without a persisted key at all.
The three isolation axes are not offered uniformly. agent_id is accepted by
most tools (22 of 30); project_id by six; and channel by exactly four —
store, recall, recall_with_context and archive_episode. They are
independent axes rather than one nested hierarchy, and reads treat an empty
value differently from an omitted one — see
isolation axes.