memorygraph
This server is a MemoryGraph MCP tool server for storing, retrieving, explaining, correcting, and privacy-deleting agent memory observations and claims.
recall: Retrieve bounded, relevant source observations for the current task, with optional time
as_of, workspace, result limit, and token cap.record: Store one user-approved raw observation without inferring claims; supports procedural memory via
kind=attemptwith task/outcome metadata.explain: Show a claim's lifecycle, relations, and exact supporting evidence.
correct: Supersede or retract a current claim with auditable evidence, rationale, and validity timing.
forget: Privacy-delete one source observation and propagate direct retractions.
All tools require a bank scope and support optional workspace labels; reads are read-only and idempotent, while mutations are auditable and non-destructive where appropriate.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@memorygraphRecall what we know about Acme and explain if it's current."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MemoryGraph
Your agent found a relevant memory. MemoryGraph tells it whether that memory is still true.
MemoryGraph is a local-first evidence and revision layer for AI-agent beliefs. It preserves source observations, represents claims as a temporal graph, and explains why a claim is current, historical, or contested.
Beta status
MemoryGraph 0.1.0b1 is an installable Beta. The authoritative architecture starts at
00-architecture-index.md; the implemented kernel covers:
Immutable source observations.
Typed entity nodes and atomic claim edges with exact evidence spans.
Bi-temporal current and historical belief queries.
Explicit confirmation, contradiction, and atomic supersession.
recall,history, andexplaincommands.Hard bank isolation and an append-only mutation event log.
A provider-agnostic dream-proposal validator with evidence, watermark, claim-version, idempotency, confidence, challenger, and review gates.
Durable dream runs, tasks, proposals, review items, leases, event watermarks, and atomic proposal commits.
A deterministic metadata provider that exercises the complete dream cycle without sending source data to an external model.
MemoryRotBench fixtures, baselines, retrieval grading, and engine integration.
Hybrid FTS/vector recall with a dependency-free local baseline and replaceable embedder.
Retrieval-time quarantine for untrusted instruction-like content.
Crash-recoverable Dream workers with leases, heartbeat renewal, retries, and replay-safe resume.
An OpenAI-compatible structured-output provider that can only propose candidates.
A five-tool STDIO MCP server:
recall,record,explain,correct, andforget.User-approved Codex JSONL ingestion and a project-scoped Codex installer.
A deterministic Obsidian-compatible Markdown review projection.
First-class procedural episodes for bounded reuse of successful and failed coding attempts.
Reproducible no-memory, Markdown, BM25, flat-context, and external/Graphify benchmark adapters.
Cross-platform CI, package verification, and actionable
doctordiagnostics.
The real engine currently passes all 12 public MemoryRotBench queries and all seven production chaos contracts. The repository test suite has 207 passing tests at this checkpoint. In the first fingerprinted public matrix, the strongest simple baselines pass 7/12 while MemoryGraph passes 12/12.
Related MCP server: agent-knowledge
Quick start
uv sync
uv run memorygraph init --database /tmp/memorygraph.db
uv run memorygraph doctor --database /tmp/memorygraph.db
uv run memorygraph bank create personal:founder --database /tmp/memorygraph.db
uv run memorygraph dogfood bootstrap --database /tmp/memorygraph.db
uv run memorygraph predicate define works_at \
--bank personal:founder --cardinality one --volatility volatile \
--database /tmp/memorygraph.dbRecord evidence, then turn it into a claim:
OBSERVATION_ID=$(uv run memorygraph observe "Abrar works at Acme." \
--bank personal:founder --source-key event:acme \
--database /tmp/memorygraph.db)
CLAIM_ID=$(uv run memorygraph claim assert Abrar works_at Acme \
--bank personal:founder --observation "$OBSERVATION_ID" \
--database /tmp/memorygraph.db)The Python API also exposes confirm_claim, contradict_claim, supersede_claim,
recall, history, and explain for embedded applications.
Record a coding attempt so future agents can reuse a successful strategy—or avoid a known failure—without pretending it is universally applicable:
memorygraph record-attempt "Run migrations before starting the worker" \
--bank project:my-app --source-key attempt:migrate-worker \
--task "start durable worker" --outcome success \
--applicability-json '{"database":"sqlite"}'Run the dream cycle
The embedded provider reads typed candidates from metadata.memorygraph, proposes graph
changes, validates evidence and temporal preconditions, then commits eligible proposals in
one transaction. Model providers implement the same candidate-only protocol and never get a
direct database write path.
PYTHONPATH=src:. uv run python examples/run_dream_cycle.py \
--database /tmp/memorygraph-dream.db
uv run memorygraph dream status RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream reviews \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream rollback RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.dbFor CLI ingestion, pass the candidate envelope with observe --metadata-file FILE.json, then
run memorygraph dream run --bank BANK. --mode dry_run validates and persists proposals but
does not consume the observation or change claims.
For durable execution, queue work and run a worker separately:
uv run memorygraph dream queue \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker \
--bank personal:founder --database /tmp/memorygraph-dream.dbTo use an OpenAI-compatible Responses endpoint, set the configured key variable and pass a model to both the queue and worker. Provider output is parsed as strict structured data and still passes through the same deterministic evidence and commit gates.
export OPENAI_API_KEY=...
uv run memorygraph dream queue --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.dbConnect Codex in five minutes
From a trusted repository, one idempotent command initializes the project database, creates or selects a bank, installs project-scoped MCP configuration, and exercises a real configured MCP lifecycle:
memorygraph onboard-codex --project .The default bank is derived from the directory name, such as project:my-app. Override it with
--bank project:chosen. The default database is .memorygraph/memory.db inside the target
project; relative --database paths also resolve inside that project.
On success, the command prints READY after initialize, tool discovery, record, recall, and forget
all pass through the configured subprocess. On failure, it names the failed stage and a recovery
action. The project configuration uses required = false, so an unavailable memory server does
not block Codex. Memory writes still prompt for approval.
The lower-level init, bank create, install-codex, and probe-codex commands remain available
for custom automation. The installer creates or repairs only [mcp_servers.memorygraph] in
.codex/config.toml; it does not modify global Codex configuration. The five MCP operations
require explicit bank scope.
probe-codex validates project config and exercises a real MCP subprocess lifecycle. Use
--project-database if you want the probe to hit the configured project database instead of
temporary disposable probe DBs.
Importing session content is opt-in. Each JSONL record must carry bank, session_id, turn_id,
role, content, and approved; unapproved records are skipped by default:
memorygraph ingest-codex approved-session.jsonlDogfood Alpha
The official offline six-arm fixture matrix is:
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.pyFor a real project, bootstrap the operating contract first:
uv run memorygraph dogfood bootstrap \
--database .memorygraph/memory.db \
--bank project:my-app \
--workspace my-appThe fixture matrix runs these arms:
no_memorymarkdownmemorygraph_graph_onlymemorygraph_gated_dreammemorygraph_always_dreamgraphify_compatible
It measures task pass/fail, useful recall precision, forbidden or stale recall leakage, repeated
mistakes, latency, token estimates, tool calls, retries, estimated cost fields, and Dream review
load. Results are written to benchmarks/reports/dogfood-offline-mvp.json and the append-only
ledger benchmarks/reports/dogfood-offline-mvp.jsonl.
Task pass/fail follows query expectations; Dream review backlog remains a separate, visible cost.
Current offline fixture result on 2026-08-22:
memorygraph_always_dream:3/3memorygraph_graph_only:1/3memorygraph_gated_dream:1/3graphify_compatible:1/3markdown:1/3, with forbidden-fragment leakage
graphify_compatible is a protocol adapter that lets an external retriever compete against the
same manifest, time bounds, and grading contract. It is not a claim that this repository has
already completed a live Graphify comparison.
Human review in Obsidian
Generate a Markdown vault containing current claims, exact provenance, relations, and the Dream review queue:
memorygraph project-obsidian --bank project:my-app \
--output .memorygraph/obsidianThe Markdown is disposable and manifest-managed. SQLite observations and append-only events stay authoritative; edits to generated notes never silently mutate memory.
Dogfood Beta
Beta adds a live, repository-owned evidence loop on top of the deterministic Alpha matrix. Start by bootstrapping the project bank, installing project-scoped MCP configuration, and probing the configured project database:
memorygraph dogfood bootstrap --database .memorygraph/memory.db \
--bank project:memorygraph --workspace agent-memory-research
memorygraph install-codex --project .
memorygraph probe-codex --project . --project-database --configured-onlyReal-session instrumentation is explicit and append-only; MemoryGraph never scrapes private Codex
history. Record approved recall, attempt, and task events with memorygraph dogfood capture,
then run make dogfood-live. The report tracks successful tasks, useful recall precision,
forbidden recall, repeated mistakes, latency, tokens, tool calls, and retries. The full operating
contract and event schema are in 13-dogfood-beta.md.
Run the accelerated Beta gate without waiting for five organic projects:
make dogfood-betaThis runs five isolated, time-separated workstreams against no-memory, Markdown, and MemoryGraph,
then composes the existing public retrieval and production chaos suites into one fingerprinted
pass/fail report at benchmarks/reports/dogfood-beta.json. It is accelerated deterministic
evidence, not a claim of five sustained users.
Why a graph?
The graph gives agents composable structure: entities are nodes and claims such as
Abrar --works_at--> Stripe are typed edges. MemoryGraph does not treat an edge as timeless
truth. Each claim version carries valid time, system time, lifecycle, provenance, and exact
source evidence. That is the difference between a useful memory graph and a stale fact store.
Development
uv sync --extra dev
uv run pytest
uv run ruff check .
PYTHONPATH=src:. python examples/run_memoryrotbench_memorygraph.py
PYTHONPATH=src:. python examples/run_memoryrotbench_chaos_memorygraph.py
python examples/run_memoryrotbench_baseline_matrix.py
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.pyExpected results: 12/12 public retrieval cases and 7/7 production chaos cases.
The matrix appends immutable, corpus- and evaluator-fingerprinted records to
benchmarks/reports/public-baseline-matrix.jsonl. Supply --graphify-command to run an external
Graphify adapter against exactly the same visible corpus and grading contract.
Next product layer
The next gate is still real-world proof: live model-backed dogfood sessions, real Graphify head-to-head comparisons, and design-partner usage over actual coding work. Full-pipeline deletion residue is audited and reported; any identity residue that cannot be safely erased without rewriting history is surfaced instead of hidden. The dream validator remains the safety waist every provider and worker must pass through.
Licensed under Apache-2.0.
Available Tools
5 toolscorrectCorrect claimBDestructive
Supersede or retract a current claim with auditable evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| object | No | ||
| excerpt | No | ||
| claim_id | Yes | ||
| known_at | No | ||
| valid_to | No | ||
| operation | Yes | ||
| rationale | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| valid_from | No | ||
| object_kind | No | ||
| object_type | No | ||
| effective_at | No | ||
| observation_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, which covers the mutation aspect. The description adds 'with auditable evidence,' implying that actions are logged or supported by evidence—information not present in annotations. However, it does not elaborate on the nature of the audit trail or what happens to the superseded/retracted claim, so the added value is modest.
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?
A single, compact sentence conveys the core purpose without wasted words. The action and key qualifier are front-loaded, making it easy to scan. No redundant phrases or unnecessary detail are present.
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 destructive mutation tool with 14 parameters, a one-line description is severely insufficient. It omits operational context (e.g., what constitutes a 'current claim', how to specify the target, acceptable evidence types, return behavior, or error conditions). Combined with no output schema and low parameter coverage, the description leaves critical gaps that will impede correct invocation.
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?
With only 14% schema description coverage and 14 parameters, the description carries the burden of explaining key parameters. It does not elaborate on claim_id, operation, rationale, valid_from, valid_to, or other fields. The phrase 'auditable evidence' hints at rationale/excerpt but does not map to any parameter, leaving the agent without semantic guidance for required inputs.
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 action ('Supersede or retract') and the resource ('a current claim'), and includes the qualifier 'with auditable evidence' that signals a specific audit-trail behavior. It implicitly distinguishes itself from siblings like record (creating new claims) and forget (possibly deletion) by focusing on correction of existing claims.
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?
No explicit guidance is given on when to use this tool versus alternatives. The description implies correction of existing claims but does not state conditions, prerequisites, or contrast with siblings. An agent must infer usage from the operation names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explainExplain claimBRead-onlyIdempotent
Show a claim's lifecycle, relations, and exact supporting evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| claim_id | Yes | ||
| workspace | No | Optional workspace label stored on observations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds context about the kind of information returned (lifecycle stages, relations, evidence granularity), which goes beyond bare annotations. However, it doesn't describe output format, pagination, or any side effects beyond what annotations imply, so it adds moderate value.
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 a single, front-loaded sentence with no filler. It efficiently conveys the core purpose without redundancy, making it easy for an agent to parse quickly.
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 there is no output schema, the description doesn't explain the return structure or how the 'explain' information is presented (e.g., nested JSON, human-readable text). It also doesn't mention any constraints like required permissions or workspace handling. For a tool that likely returns complex claim details, this is a notable gap, though the basic purpose is clear.
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 67%: 'bank' and 'workspace' have descriptions, but 'claim_id' does not. The tool description doesn't clarify any parameters further, especially the undocumented claim_id. It adds no meaning beyond what the schema already provides, leaving the unidentified parameter ambiguous.
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 'show' and the resource 'claim' with specific aspects: lifecycle, relations, and exact supporting evidence. This distinguishes it from siblings like recall (retrieve), record (create), correct (modify), and forget (delete) by focusing on detailed visualization rather than simple retrieval or mutation.
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 provides no guidance on when to use this tool versus alternatives, nor any conditions for exclusion. It doesn't mention whether it's preferred for debugging, auditing, or investigating claim states, leaving the agent to infer from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetForget observationADestructiveIdempotent
Privacy-delete one source observation and propagate direct retractions.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| workspace | No | Optional workspace label stored on observations. | |
| observation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds value by explaining the 'privacy-delete' nature (implying data sanitization) and the propagation of retractions. This goes beyond the bare annotation flags and gives a clearer picture of side effects, though it doesn't detail the propagation mechanism itself.
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 a single, compact sentence that front-loads the core action ('Privacy-delete') and immediately follows with the key side-effect. There is zero fluff; every word carries functional meaning, making it an exemplary concise definition.
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 simple deletion tool with 3 parameters and no output schema, the description covers the essential action and side effects. It does not mention return values, error handling, or prerequisites, but given the low complexity and annotations covering idempotency and destructiveness, it is adequately complete.
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 67%, meaning two of three parameters have descriptions in the schema. The tool description does not add any semantic detail about parameters (e.g., what 'bank' or 'observation_id' specifically mean in this context). Since coverage is not high (>80%) but not low (<50%), the baseline 3 applies, and the description makes no attempt to compensate.
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 states a specific verb ('Privacy-delete') and resource ('one source observation') and adds a distinguishing side-effect ('propagate direct retractions'). This clearly sets it apart from siblings like 'record' or 'explain', making the tool's purpose instantly recognizable.
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?
No guidance is given for when to use this tool versus alternatives. It does not mention conditions, exclusions, or scenarios where a different sibling (e.g., 'correct') would be more appropriate. The usage context is entirely left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall memoryCRead-onlyIdempotent
Retrieve bounded source observations relevant to the current task.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| as_of | No | ||
| limit | No | ||
| query | Yes | ||
| workspace | No | Optional workspace label stored on observations. | |
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description need not repeat that. It adds the concepts of 'bounded' and relevance to the current task, which are minor behavioral cues, but it does not disclose retrieval mechanism, result format, or error handling. The added value is modest.
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 a single sentence with no wasted words and the primary action is front-loaded. It is efficient, though its brevity may contribute to the lack of parameter and usage clarity.
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 6 parameters (2 required), low schema coverage, and no output schema, the description is insufficient. It does not explain how to construct the query, what 'limit' or 'max_tokens' control, or what the response contains. An agent would need to consult other sources to call this tool correctly.
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 only 33% (only bank and workspace have descriptions). The tool description neither explains the remaining parameters (query, as_of, limit, max_tokens) nor provides any parameter-level guidance. The phrase 'bounded source observations' hints at limits but does not map to specific parameters, failing to compensate for the low coverage.
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 uses a clear verb ('Retrieve') and a resource ('bounded source observations'), which distinguishes it from sibling tools like 'record' and 'forget'. However, it does not explicitly mention the 'bank' parameter or clarify the meaning of 'bounded', leaving some ambiguity about scope.
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?
No guidance is provided on when to use this tool versus alternatives such as 'explain' or 'correct'. The only contextual hint is 'relevant to the current task', which is vague and does not explain prerequisites, exclusions, or when to prefer recall over other memory operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordRecord observationBIdempotent
Store one user-approved raw observation without inferring claims. Set kind to attempt to record procedural memory; content is the strategy and metadata must include task_key and outcome, with optional failure, applicability, and environment.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| kind | No | ||
| content | Yes | ||
| actor_id | No | ||
| metadata | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| actor_type | No | ||
| source_key | Yes | ||
| observed_at | No | ||
| sensitivity | No | ||
| trust_class | No | ||
| effective_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds context about user approval and non-inference of claims, which are beyond the annotations. But it doesn't disclose other behaviors like error handling, rate limits, or side effects beyond the basic write operation, so it adds some value but not a lot.
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 two sentences with zero fluff. It front-loads the core purpose, then gives a focused, actionable instruction for the most complex parameter combination. Every word earns its place, and the layout makes it easy to scan.
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 12 parameters, nested objects, and no output schema, the description is insufficient. It only addresses the 'attempt' kind and does not cover other potential uses or explain most parameters. There is no mention of return values, error cases, or examples. While annotations cover idempotency and destruction, the description leaves too much to inference for a complex 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?
Schema description coverage is only 17%, so the description carries considerable burden. It clarifies kind, content, and metadata specifically for the 'attempt' case, which is valuable. However, it leaves the majority of the 12 parameters (e.g., actor_id, actor_type, sensitivity, trust_class) unexplained, and provides no general semantics for other kinds. It partially compensates for the low coverage but not fully.
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 a specific verb ('Store') and resource ('raw observation'), with a qualifier ('user-approved') and a constraint ('without inferring claims'). It is unambiguous, though it doesn't explicitly distinguish from sibling tools like 'explain' or 'recall', which prevents a perfect score.
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 provides explicit guidance for a specific scenario (setting kind to 'attempt') and outlines required metadata fields. However, it lacks any guidance on when this tool should be used compared to siblings, no exclusions or alternatives are mentioned, so it's partially helpful but not comprehensive.
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.
5 tool updates
v0.1.0- First observed
correct - First observed
explain - First observed
forget - First observed
recall - First observed
record
TDQS
Each tool targets a distinct operation: explain (query graph), recall (retrieve observations), record (store), correct (update claims), forget (delete). No overlapping purposes, and descriptions clearly separate them.
All tool names are single lowercase verbs, creating a uniform and predictable pattern. This consistency makes it easy to infer the action each tool performs.
Five tools is well-scoped for a memory graph server, covering core operations without redundancy. Each tool addresses a necessary part of the memory lifecycle.
The set covers record, recall, correct, forget, and explain, which covers full CRUD-like operations on claims and observations. Minor gaps like explicit listing or bulk operations exist but are not critical for core usage.
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
Evidence-grounded, graph-connected, correctable memory for agents.
Agent memory that refuses to guess: evidence-gated recall, exact-source reads, verifiable deletion.
1Long-term memory for AI agents: semantic facts, episodic events, and procedural workflows
Long-term memory for AI agents: durable records, observable retrieval, governed context assembly.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceGives AI agents persistent memory with bi-temporal tracking, automatically extracting entities from natural language and enabling time-travel queries to understand facts as they existed at any point in history.2-
- AlicenseAqualityCmaintenanceLong-term memory for AI agents. Compiles conversations into a structured knowledge base with Claim/Evidence model, source provenance, append-only timeline, and contradiction detection. Multi-path retrieval (Exact + BM25 + Graph + weighted RRF + reranker) — 96.6% R@5 on LongMemEval-S, zero vector dependencies.83MIT
- AlicenseAqualityAmaintenanceA source-grounded memory layer for AI agents that stores, links, and recalls factual memories with confidence levels and citations, enabling honest answers when information is not in the record.3MIT

Veracium MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceProvides agents with durable, provenance-aware memory through tools for remembering, recalling, answering, and maintaining information, while structurally resisting injection and confabulation.8MIT
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/xbrxr03/memorygraph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server