cogmem
cogmem is an MCP server providing a self-improving, verifiable memory layer for AI coding agents. Every memory is a W3C Verifiable Credential signed with a did:key identity and stored in a hash-chained, SCITT-style transparency log. All data stays local — nothing leaves your machine.
recall: Semantically search past lessons, decisions, and rules relevant to a current task, ranked by confidence score. Supports scope filtering (e.g.,rust,python) and configurable result count (1–20).note: Record a new decision, finding, or correction mid-task so it can be recalled in future sessions. Notes are deduped and processed by a background pipeline.status: Health check of the memory system — agent DID, transparency log size, integrity status, and current Merkle root.verify: Cryptographically audit every stored memory's Verifiable Credential and the hash-chained log to detect tampered or poisoned memories.receipt: Generate an RFC 6962-style cryptographic inclusion proof that a specific memory exists in the signed transparency log.tree_head: Retrieve the current signed Merkle tree head (root hash, tree size, signature) as a tamper-evident anchor for verifying inclusion receipts.progress: Narrative summary of momentum, stalls, and dependencies across all tracked projects — useful for orientation at session start.review_pending: List always-load rules awaiting human approval before being promoted into the agent's constant context.
A self-improving, verifiable memory layer for AI coding agents.
cogmem learns how you work across sessions so your agent gets more accurate and more autonomous over time: it stops repeating mistakes, keeps a live model of each project, and surfaces the right lesson at the right moment. Every memory is cryptographically signed and tamper-evident, so a poisoned or altered memory can be detected and rejected before it ever steers the agent.
Developed by WritersLogic — local-first recall; your memory and identity key stay on your machine (see Privacy).
Installation
From PyPI
pip install cogmem # CLI + MCP server + verifiable-memory tools
pip install 'cogmem[recall]' # add local semantic recall (fastembed)
cogmem init # wire the Claude Code hooks + build the indexpip install cogmem gives you the cogmem CLI and the MCP server (cogmem mcp, or uvx cogmem mcp on demand) — the verifiable-memory tools need only the core install. Add the [recall] extra for local semantic recall, then run cogmem init to wire the full learning loop (the SessionStart/UserPromptSubmit/Stop hooks and the index) into Claude Code. cogmem init is idempotent; re-run it any time.
Clone installer (turnkey, with the warm daemon)
The clone installer does everything pip install + cogmem init does, plus sets up the warm recall daemon (launchd/systemd) as a managed service:
git clone https://github.com/writerslogic/cogmem.git
cd cogmem
./install.shOr in one line:
curl -fsSL https://raw.githubusercontent.com/writerslogic/cogmem/main/install.sh | bashinstall.sh is idempotent — run it again any time to upgrade in place. It sets up
the code under ~/.claude/cogmem, a self-contained virtualenv with dependencies,
the cogmem CLI on your PATH, the Claude Code hooks, and a warm recall daemon
(a launchd agent on macOS, a systemd --user service on Linux). Requires
Python 3.12+; semantic recall runs on a local model (fastembed, no external
API). Pass --no-daemon or --no-hooks to skip those steps; set COGMEM_HOME
to install elsewhere — the CLI, engine, and hooks all resolve it at runtime, so
a non-default install keeps its memory and identity fully self-contained.
Related MCP server: Linksee Memory
Custom Installation
Install to a different directory
Set COGMEM_HOME to place cogmem somewhere other than the default
~/.claude/cogmem:
COGMEM_HOME=/opt/cogmem ./install.shOr with the one-liner:
curl -fsSL https://raw.githubusercontent.com/writerslogic/cogmem/main/install.sh | COGMEM_HOME=/opt/cogmem bashThe installer copies the code, creates the virtualenv, and symlinks the CLI to
~/.local/bin/cogmem (or wherever COGMEM_BIN points).
CLI path
Set COGMEM_BIN to control where the cogmem CLI symlink is placed:
COGMEM_BIN=$HOME/.cargo/bin COGMEM_HOME=/opt/cogmem ./install.shIf COGMEM_BIN is not on your PATH, the installer prints a warning. You can
always invoke cogmem directly from $COGMEM_HOME/cogmem.
How data directories and identity keys are resolved
At runtime the CLI and engine read COGMEM_HOME from the environment. When it is
unset they fall back to ~/.claude/cogmem. All runtime data lives under the
vault/ subdirectory:
Path | Purpose |
| Ed25519 private key (agent identity, |
| W3C Verifiable Credential storage |
| Layer-A (always-load) and Layer-B (recall) rules |
| Append-only hash-chained transparency log |
| COSE_Sign1 SCITT signed statements |
| Python virtualenv with dependencies |
| Claude Code hook scripts |
The identity key is generated on first run (via cogmem status or any engine
operation) and persisted at $COGMEM_HOME/vault/identity/agent.key. The
corresponding did:key is derived from the Ed25519 public key. Moving or
reinstalling cogmem to a new COGMEM_HOME creates a fresh identity unless you
migrate the vault/ directory.
MCP client with a non-default install
The standard MCP client configuration works regardless of COGMEM_HOME because
the cogmem CLI resolves the environment variable at runtime:
{
"mcpServers": {
"cogmem": { "command": "cogmem", "args": ["mcp"] }
}
}If the CLI is not on your PATH, use the full path:
{
"mcpServers": {
"cogmem": { "command": "/opt/cogmem/cogmem", "args": ["mcp"] }
}
}Or prefix with COGMEM_HOME in a shell wrapper:
{
"mcpServers": {
"cogmem": { "command": "env", "args": ["COGMEM_HOME=/opt/cogmem", "cogmem", "mcp"] }
}
}Quick Start
cogmem status # health check, metrics, agent DID
cogmem doctor # end-to-end learning-loop health (daemon, API key, trust, backlog)
cogmem recall "..." # surface relevant past lessons for a task
cogmem note "..." # record a decision or finding mid-task
cogmem verify # verify every memory's credential + the transparency log
cogmem receipt <id> # inclusion proof that a memory is committed in the signed log
cogmem statement <id> # COSE_Sign1 SCITT signed statement (verifiable by HMS too)
cogmem trust # show the trusted agent identity (warns on a key mismatch)
cogmem trust --rotate # re-anchor trust after an intentional key change
cogmem review list # approve always-load rules
cogmem mcp # run the MCP server (stdio) for any MCP clientMCP Integration
Run cogmem as an MCP server and connect any MCP-compatible client:
{
"mcpServers": {
"cogmem": { "command": "cogmem", "args": ["mcp"] }
}
}Eight tools are exposed: recall, note, status, verify, receipt, tree_head, progress, review_pending, plus read-only resources (the live user model and per-project state).
Claude Code Integration
install.sh wires cogmem into Claude Code automatically (idempotently merged into
~/.claude/settings.json) — no manual invocation required. Five hooks make the
memory loop run in the background:
Event | Hook | What it does |
|
| injects promoted always-load (Layer-A) rules + the self-check |
|
| semantic Layer-B recall for the current prompt |
|
| intercepts known mistakes at the tool-call boundary before they happen |
|
| tracks which files the session is actively editing |
|
| captures the session into memory (acquisition + consolidation) |
Every hook is strictly fail-open: any error, timeout, or cold daemon injects
nothing and never blocks your prompt. The scripts live in ~/.claude/cogmem/hooks/;
re-run install.sh (or ./install.sh --no-daemon) to refresh the wiring.
Chat-memory systems (Mem0, Letta, Zep) store and retrieve facts. cogmem is built for coding agents and goes further on three axes:
It learns from outcomes. A feedback loop scores whether a recalled lesson actually helped, refines rules that prove wrong, and retires ones that mislead.
It models its own failure modes. cogmem tracks where the agent tends to go wrong in your work and intercepts known mistakes at the tool-call boundary — before they happen, not afterward.
Its memory is verifiable. Each memory is a W3C Verifiable Credential signed by the agent's did:key, recorded in a tamper-evident, SCITT-style transparency log. Agent memory is an attack surface; cogmem makes it auditable and poison-resistant.
Two-layer memory: always-loaded directives (scope-gated, human-approved) plus a semantic recall tail (local cross-encoder reranking, no data leaves the machine).
Outcome feedback and self-refinement: memories earn or lose trust based on whether they actually helped; contradicted rules are corrected through a safe pipeline.
Self-model and guard: a model of the agent's recurring mistakes, compiled into tripwires that intercept them at the
PreToolUseboundary.Project-state model: a living per-project state (goal, claims, open questions, blockers) that gives situational continuity and reasons across time.
Cross-project progress narrative: momentum, stalls, and dependencies across projects, surfaced as alerts.
Self-regulation: recall thresholds tuned automatically against an eval harness.
Verifiable Agent Memory:
did:keyidentity, W3C VC-signed memories, COSE_Sign1 SCITT signed statements (byte-compatible with HMS), a hash-chained transparency log with signed Merkle tree head and RFC 6962 inclusion receipts, optional poison-resistance enforcement. See PROVENANCE.md.
cogmem treats every stored memory as a signed artifact:
did:keyidentity: each agent gets a persistent Ed25519 identity, exposed as a W3C DID.W3C Verifiable Credentials: every memory is signed with
eddsa-jcs-2022Data Integrity proofs.COSE_Sign1 / SCITT signed statements: byte-identical to the envelope format used by holographic-memory and crosstalk — independently verifiable by any of the three implementations.
Hash-chained transparency log: append-only JSONL with SHA-256 chaining, a signed Merkle tree head, and RFC 6962-style inclusion receipts.
Revocation: every credential carries a W3C Bitstring Status List entry; a demoted or retired memory is revoked in a signed status-list credential.
Poison-resistance: altered or injected memories fail verification and are rejected before influencing the agent.
cogmem verify # check all memories and the log head
cogmem receipt <memory-id> # prove a memory is in the signed log
cogmem revoke <memory-id> # revoke a memory (Bitstring Status List)
cogmem status-list # emit the signed revocation status-list credentialSee PROVENANCE.md for the full specification.
Verify the C2PA sample yourself:
# examples/c2pa-agent-credential/ is a real signed C2PA manifest
# whose agent identity validates in c2patool
./examples/c2pa-agent-credential/verify.shThis proves the whole chain: agent identity (cawg.ica.credential_valid) bound to real cognition — a signed cogmem memory and a signed crosstalk reasoning audit, each an independently verifiable Ed25519 COSE/SCITT statement.
Standards alignment
cogmem is built on published standards, and it is precise about where it conforms versus where it is -style (compatible in shape and crypto, short of full profile conformance). The primitives are real Ed25519 signatures over real canonical byte structures — nothing here is mocked.
Standard | What cogmem implements | Status |
| Conformant | |
VC v2 context, credential | Conformant; Verifiable Presentations are roadmap | |
Ed25519 Data Integrity proof over RFC 8785 JCS canonical bytes (UTF-16 key ordering, literal-UTF-8 strings) | Conformant | |
Every memory carries a | Conformant | |
Untagged and tag-18 | Conformant; byte-interoperable with the | |
| SCITT-style. Conformant Signed-Statement headers (CWT_Claims), COSE Receipts, and a Transparency Service distinct from the issuer are roadmap — see below | |
RFC 6962 Merkle | Signed tree head, inclusion proofs, verification | Conformant proof math; a witness co-signs the tree head for independent transparency |
| Interoperable with the ICA verifier in |
Toward full SCITT conformance. Three bounded steps, no new cryptography: (1) move iss/sub/content-type from the statement payload into the COSE protected header as CWT_Claims; (2) emit inclusion proofs as COSE Receipts (draft-ietf-cose-merkle-tree-proofs) in the statement's unprotected header; (3) make the external witness a mandatory Transparency-Service role distinct from the issuing agent. Steps 1–2 are re-encoding; step 3 is the architectural one, since a single-party log is a compatible format rather than meaningful transparency.
Privacy
cogmem is local-first by design. Memories, embeddings, and the identity key live on your machine, and semantic recall is fully local — the embedding and reranker models (fastembed) run on-device, so querying your memory never leaves the machine.
The learning pipeline is not local: acquisition, consolidation, the feedback judge, and the project/user-model synthesis send the relevant session transcript to the Anthropic API (ANTHROPIC_API_KEY). That is how rules are extracted and scored. If you need fully-offline operation, run with --no-hooks (recall still works) until a local-model extraction path lands. In short: recall is local; learning calls the API.
Part of the Agent-Provenance Stack
cogmem is one component of the WritersLogic verifiable agent-provenance pipeline — agent identity, memory, reasoning, and signed output, cryptographically bound end to end.
Project | Role |
cogmem (this repo) | Agent identity (CAWG credential) + verifiable, tamper-evident memory (COSE/SCITT) |
Multi-model orchestrator; signs each turn's reasoning/orchestration audit | |
Durable holographic memory store; cross-verifies signed statements and agent identity | |
WritersProof | C2PA producer: binds identity + memory + reasoning to the signed asset |
All four share one substrate — COSE_Sign1 / SCITT signed statements (Ed25519) and W3C DID identity — specified in UNIFIED-PROVENANCE.md.
Security
Found a vulnerability? Please report it privately — see SECURITY.md.
License
Apache-2.0 — see LICENSE.
Available Tools
8 toolsnoteNote a MemoryA
Record a decision, finding, or correction into memory mid-task so it can be recalled in future sessions.
Returns {ok, noted}. The text is captured as a candidate and deduped against existing knowledge by the background pipeline.
Use when the user states a durable preference or you learn something worth keeping; not for transient chatter. To retrieve memories use recall.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The lesson to remember, as one self-contained sentence, e.g. 'The user prefers Conventional Commits with no body.' |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| noted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, providing no behavioral hints. The description compensates by disclosing that the text is captured as a candidate and deduped against existing knowledge by a background pipeline, and that it returns {ok, noted}. This adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a usage line. Every sentence adds value, no fluff. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no enums, no nested objects), the description is complete. It explains the return format, the dedup pipeline, and the appropriate use cases. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema's parameter description, which already provides good formatting guidance: 'the lesson to remember, as one self-contained sentence, e.g. ...' Thus no additional value from the description's text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Record a decision, finding, or correction into memory mid-task so it can be recalled in future sessions.' It uses a specific verb 'Record' and resource 'memory', and distinguishes from sibling 'recall' by indicating that this tool is for recording, not retrieving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use when the user states a durable preference or you learn something worth keeping; not for transient chatter. To retrieve memories use `recall`.' This tells the agent when to use, when not to use, and names the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
progressCross-Project ProgressARead-onlyIdempotent
Summarize momentum, stalls, and dependencies across the user's projects as a narrative. Returns {narrative}. Use to orient at session start or when the user asks 'where are we'. Read-only synthesis of project-state memory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| narrative | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and idempotentHint; the description reinforces that it is a 'read-only synthesis of project-state memory,' consistent with annotations. No contradictions, and adds clarity about the synthetic nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: purpose, return format, usage. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 0 parameters, full annotation coverage, and an output schema present, the description provides sufficient context: what it does, when to use, and its read-only nature. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so schema coverage is 100% by default. The description does not need to add parameter info; baseline for 0-param tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action: 'Summarize momentum, stalls, and dependencies across the user's projects as a narrative.' It names the resource (project-state) and output (narrative), distinguishing it from siblings like 'status' or 'recall'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use to orient at session start or when the user asks 'where are we'.' It does not mention when not to use or alternatives, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall MemoriesARead-onlyIdempotent
Surface the most relevant past lessons, decisions, and rules for a task, ranked by semantic similarity.
Returns {count, memories:[{id, scope, score, text}]}, where score is rerank confidence (higher = more relevant).
Use at the start of a task or whenever unsure how the user wants something done, instead of guessing. Read-only — to save a new memory use note.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Maximum number of memories to return (1-20). Defaults to 5. | |
| query | Yes | Natural-language description of the task or question to find lessons for, e.g. 'how does the user want commit messages formatted'. | |
| scope | No | Optional domain filter, e.g. 'rust', 'python', 'universal'. Omit to search every scope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| memories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds behavioral context: ranking by semantic similarity, return format with score meaning (rerank confidence). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then structure, then usage. Every sentence is necessary and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description adequately covers return format, behavior, and usage. Parameters are fully documented. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by providing an example for 'query' and explaining that results are ranked, clarifying the purpose of the query parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Surface') and resource ('past lessons, decisions, and rules'), and distinguishes it from siblings like 'note' (save) and others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('at the start of a task or whenever unsure') and provides a clear alternative ('to save a new memory use `note`').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receiptMemory Inclusion ReceiptARead-onlyIdempotent
Produce an RFC 6962-style cryptographic proof that a specific memory is committed in the signed transparency log.
Returns the inclusion receipt (leaf index, audit path, tree size, signed root).
Use to prove to a third party that a memory existed and was logged. Requires the memory's id — get ids from recall.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | The id of the memory to prove inclusion for, as returned in a recall result's `id` field. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by specifying the return fields (leaf index, audit path, tree size, signed root) and the dependency on the memory id from 'recall'. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the main purpose and standard, the second lists return fields and usage context. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but indicated), the description does not need to explain return values. Input schema is fully described, and the purpose and usage are fully covered. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a clear description of 'memory_id'. The description adds context that the id comes from a recall result's 'id' field, which helps the agent understand the required input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool produces an RFC 6962-style cryptographic proof of inclusion for a specific memory, with a specific verb ('produce') and resource (memory in signed log). It distinguishes from siblings like 'recall' and 'verify' by focusing on third-party proof.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use to prove to a third party that a memory existed and was logged, and it requires the memory's id from 'recall'. It does not explicitly mention when not to use or directly compare to sibling 'verify', but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_pendingList Pending ApprovalsARead-onlyIdempotent
List always-load (Layer-A) rules awaiting human approval before they enter the always-on context.
Returns {pending}.
Use to see what the system wants to promote. Approval itself is a human action via the cogmem review CLI, not this tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| pending | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds context about the layer (Layer-A) and that it returns {pending}, which is beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. It front-loads the main action, then explains return, usage, and boundary. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and an existing output schema, the description is complete. It specifies the scope (Layer-A rules), the condition (awaiting approval), and the return shape ({pending}). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100%. Baseline for 0 parameters is 4, and the description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists pending approvals for Layer-A rules. It uses specific verb 'list' and resource. However, it does not explicitly differentiate from sibling tools like 'status' or 'verify', though it contrasts with the approval action via CLI.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to see what the system wants to promote' (when to use) and clarifies that approval is a separate human action via CLI, not this tool (when-not). This provides clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusMemory System StatusARead-onlyIdempotent
Report the health of the verifiable-memory system.
Returns {agentDid, logEntries, logIntegrity, merkleRoot} — the agent's did:key identity, transparency-log size, its integrity ('ok' or a reason), and the current Merkle root.
Use for a fast health/identity check. For a full per-memory credential audit use verify; for the signed log commitment use tree_head.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| agentDid | Yes | |
| logEntries | No | |
| merkleRoot | Yes | |
| logIntegrity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds context about the returned data structure and the tool's role as a fast check. No behavioral traits are hidden, and no contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences. The first sets purpose, the second details return fields, and the third provides usage guidance—all front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, rich annotations, and an existing output schema, the description fully covers the tool's capability and relationship to siblings. It tells what it returns and when to use it, making it complete for an agent to select and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description naturally adds no parameter information. The schema coverage is 100% (trivially), and baseline for zero parameters is 4. The description does not need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Report the health of the verifiable-memory system.' It lists the returned fields and distinguishes itself from siblings by specifying that `verify` performs a full audit and `tree_head` gives the signed log commitment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: 'Use for a fast health/identity check.' It also explicitly states when not to use and alternatives: 'For a full per-memory credential audit use `verify`; for the signed log commitment use `tree_head`.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tree_headSigned Tree HeadARead-onlyIdempotent
Return the current signed Merkle tree head — the log's tamper-evident commitment to every memory so far.
Returns {rootHash, treeSize, signature, ...}.
Use as the anchor a verifier checks inclusion receipts against, or to detect log forks. Pair with receipt.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rootHash | No | |
| treeSize | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by explaining the output structure (rootHash, treeSize, signature) and the tamper-evident nature. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines and explains, second gives usage directives. No fluff, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema present, the description covers usage, conceptual meaning, and return fields sufficiently. Complete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage is 100% via absence. Baseline 4 applies. Description does not need to elaborate on nonexistent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns the current signed Merkle tree head and defines it as 'the log's tamper-evident commitment'. Specific verb ('Return') and resource ('signed Merkle tree head'). Differentiates from siblings like 'receipt' and 'verify'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use: 'Use as the anchor a verifier checks inclusion receipts against, or to detect log forks. Pair with `receipt`.' Provides context and directs to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifyVerify All MemoriesARead-onlyIdempotent
Cryptographically verify every stored memory's W3C Verifiable Credential and the integrity of the hash-chained transparency log.
Returns a summary of memories checked, how many are valid, and any failure reasons.
Use to detect tampered or poisoned memories before trusting them. This is the deep audit; status is the lightweight check.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, which is consistent. The description adds context about cryptographic verification, return summary, valid count, and failure reasons. No contradictions. It does not mention potential performance costs, but overall adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first explains what the tool does, the second explains when to use it and how it differs from a sibling. No wasted words, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and an output schema (known from context), the description covers purpose, usage, return summary, and alternatives. It is fully complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%. The description adds no parameter details, but none are needed. Baseline score of 4 for zero parameters is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('verify') and the resource (every stored memory's W3C Verifiable Credential and the integrity of the hash-chained transparency log). It explicitly distinguishes from the sibling tool 'status' by contrasting 'deep audit' vs 'lightweight check'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use to detect tampered or poisoned memories before trusting them.' It also names an alternative tool ('status') for a lightweight check, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v2.4.0- First observed
note - First observed
progress - First observed
recall - First observed
receipt - First observed
review_pending - First observed
status - First observed
tree_head - First observed
verify
TDQS
Each tool has a clearly distinct purpose: note saves memories, recall retrieves them, progress summarizes project state, receipt provides cryptographic proofs, review_pending lists pending rules, status reports system health, tree_head returns the Merkle root, and verify performs deep audit. No overlapping functionality.
All tool names are lowercase with underscores for compounds (e.g., review_pending, tree_head). They follow a consistent pattern of verbs or noun phrases that clearly indicate the action or output, with no style mixing.
With 8 tools, the set is well-scoped for a verifiable memory system. It covers storing, retrieving, verifying, and monitoring without being bloated or too sparse.
The tools provide core operations (create, read, verify, audit). Missing explicit update/delete tools is a minor gap, but this aligns with the system's append-only, tamper-evident design. A tool for exact-match retrieval could be useful, but semantic recall covers most needs.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Verified memory for AI agents. Signed assertions, billing attestation, session continuity.
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
Persistent memory for AI agents — verbatim conversations, searchable by meaning.
Related MCP Servers
- AlicenseAqualityCmaintenanceSmart memory for AI agents. Solves the Karpathy problem: memories decay, topics are frequency-weighted, one-time questions don't become obsessions. 7 tools. Zero deps.4222MIT
- AlicenseAqualityAmaintenanceLocal-first cross-agent memory MCP. 6-layer structured brain (goal/context/emotion/impl/caveat/learning) with token-saving file diff cache (86% measured savings on re-reads)813814MIT
- FlicenseAqualityFmaintenancePersistent encrypted memory for AI agents. E2E encrypted private vaults, shared knowledge commons, topic channels, and agent-to-agent DMs. 23 MCP tools, free, no API key needed.24-
- AlicenseAqualityCmaintenanceA different approach from typical persistent-memory MCPs. Instead of a local SQLite + embeddings store, the memory lives as plain files in a .ai-memory/ directory you commit to your repo (facts.jsonl, decisions/\*.md, gotchas.md). Git is the sync layer — what one Claude/Cursor/Cline learns about a repo, the next session (or a teammate's agent) picks up automatically. 5 MCP tools: get_rep51MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dcondrey/cogmem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server