Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.YonasValentin/mcp-memory-graph

NPM · MCP-MEMORY-GRAPH · SCANNED SEP 20

Local-first memory for Claude Code and any MCP client: hybrid search + knowledge graph, $0/token.

Available components

0 this week 87 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security89
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects sharp 0.34.5, reached via @huggingface/transformers > sharp. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 74 of 212 dependencies flagged as unhealthy (2 deprecated). View diagnostics → Partial
Provenance & Transparency87
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to YonasValentin/mcp-memory-graph). View diagnostics → Pass
  • License check failed: the license (PolyForm-Noncommercial-1.0.0) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 75 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8922 tokens (~174/item across 51 items; 51 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 98% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 52 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.YonasValentin/mcp-memory-graph server?

io.github.YonasValentin/mcp-memory-graph runs locally as an npm package, launched with npx -y mcp-memory-graph. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mcp-memory-graph

# add to Claude Code
claude mcp add yonasvalentin-mcp-memory-graph -- npx -y mcp-memory-graph
// .cursor/mcp.json
{
  "mcpServers": {
    "yonasvalentin-mcp-memory-graph": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-memory-graph"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "yonasvalentin-mcp-memory-graph": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-memory-graph"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add yonasvalentin-mcp-memory-graph -- npx -y mcp-memory-graph
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "yonasvalentin-mcp-memory-graph": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-memory-graph"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add yonasvalentin-mcp-memory-graph --command npx --arg -y --arg mcp-memory-graph
# ~/.hermes/config.yaml
mcp_servers:
  yonasvalentin-mcp-memory-graph:
    command: "npx"
    args: ["-y", "mcp-memory-graph"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "yonasvalentin-mcp-memory-graph": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "mcp-memory-graph"
      ]
    }
  }
}
# add to Vellum
assistant mcp add yonasvalentin-mcp-memory-graph -t stdio -c npx -a -y mcp-memory-graph
// mcp.json
{
  "mcpServers": {
    "yonasvalentin-mcp-memory-graph": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-memory-graph"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 10 Sept 26 0
    • Stability: 0.97 → pass security
  • 9 Sept 26 +1
    • GHSA-rgj7-g3m4-5g8c affects this package: high security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/mcp-memory-graph@2.10.3

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo YonasValentin/mcp-memory-graph
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/YonasValentin/mcp-memory-graph/.github/workflows/release.yml@refs/tags/v2.10.3
Rekor log index 2084853267
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:bb14d422b8c04ef83f5b0cc0d41992e5ea65ea12fd6f78ece3aa3d14c02f13f105ca164c47e6f4dd6e1c345a5d87c7e79f34dc61d14f4d6df3743599c

Background: How many MCP packages publish verified provenance →

Vulnerabilities 2 findings
ID CVE Severity Vector Fix available
GHSA-f88m-g3jw-g9cj high yes
GHSA-rgj7-g3m4-5g8c high yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 212 packages
Packages resolved 212
Deprecated 2
Stale 73
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 51 exposed · ~8,705 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
core_memory_append ~125

Append text to the pinned core-memory block (newline-separated when non-empty). If the result would exceed char_limit the write is refused (error: core_memory_full) so you compact via core_memory_replace instead of silently overflowing.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
textstringyesText to append to the pinned core-memory block (newline-separated when the block is non-empty). Refused if it would exceed char_limit — compact via core_memory_replace instead.

No output schema declared.

No examples provided.

core_memory_get ~88

Read the pinned "core memory" block for a (scope, namespace) — a small, bounded, always-in-context note the agent maintains about who it is and what matters now. Returns content, char_limit, and used (character count).

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

core_memory_replace ~126

Replace the first occurrence of old_text with new_text in the pinned core-memory block. Returns error: not_found if old_text is absent, or core_memory_full if the result would exceed char_limit. Use this to update or compact the block.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
new_textstringyesReplacement text for the first occurrence of old_text
old_textstringyesSubstring to find (first occurrence) in the core-memory block
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_attribution ~111

Multi-agent / team attribution rollup. Returns how many currently-valid top-level memories each agent (agent_id, set at store time) wrote — { by_agent, by_author, total } — distinct from author (the human/source). Memories stored without an agent_id are bucketed under "unattributed". Optional scope/namespace filters scope the rollup.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_canvas ~236

Export the memory graph as a JSON Canvas 1.0 .canvas — opens as a spatial board in real Obsidian. Each currently-valid top-level memory becomes a text node on a deterministic grid; memory_links become labeled, arrow-tipped edges. Optionally filter by scope/namespace and cap with limit. When vault_path is given the canvas is written there (confined under the vault) and its path returned; otherwise only the canvas object.

NameTypeReqDescription
limitintegerMaximum memories to include as canvas nodes (default 50)
namestringFilename stem for the written .canvas (default "memory-graph"). Sanitized — path separators and ".." can never escape the vault.
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
vault_pathstringAbsolute path to an Obsidian vault directory (created if missing). When given, the canvas is written there as a .canvas file (confined under the vault) and its path is returned; otherwise only the ca…

No output schema declared.

No examples provided.

memory_communities ~127

GraphRAG global sensemaking (agent-driven, no LLM in the server). Detects communities (densely-connected entity clusters) over the entity graph on demand via weighted label propagation, and returns each community's top entities + linked memories. This is the corpus-level view that chunk-level search can't give — synthesize named themes from the communities to answer "what are the main themes?".

NameTypeReqDescription
limitintegerMaximum communities to return, largest first (default 20)
min_sizeintegerDrop communities with fewer than this many entities (default 1)

No output schema declared.

No examples provided.

memory_condense ~60

Apply agent-generated summaries to condense old memories. Preserves original content for later restoration. Use after consolidation reports flag condensation candidates.

NameTypeReqDescription
memoriesarrayyesBatch of memories with agent-generated summaries
target_levelstringTarget condensation level

No output schema declared.

No examples provided.

memory_consolidate ~219

Run the "dream cycle": find and merge near-duplicate memories, prune expired/low-quality entries, and update quality scores based on access patterns. Use dry_run=true to preview changes.

NameTypeReqDescription
dry_runbooleanIf true, report what would be done without making changes
forgetting_floornumberOpt-in spaced-repetition prune. When set (0-1), remove weakly-held memories whose retention e^(-Δt/stability) has decayed below this floor. Omit to disable.
max_operationsintegerMaximum number of merge/prune operations per run
namespacestringNamespace within scope (e.g., project name, team name)
prune_expiredbooleanRemove memories past their expires_at date
prune_low_qualitybooleanRemove memories with both low importance and low confidence
scopestringMemory scope for isolation
similarity_thresholdnumberCosine similarity threshold for duplicate detection (0.5-1.0)

No output schema declared.

No examples provided.

memory_delete ~61

Delete memories by ID or by filter criteria (scope, department, before_date, expired_only). Provide at least one of id or filter.

NameTypeReqDescription
filterobjectDelete memories matching filter criteria
idstringDelete a specific memory by ID

No output schema declared.

No examples provided.

memory_expertise ~141

Adaptive per-user expertise profile. action=observe records demonstrated knowledge of a topic (level rises on a saturating curve, never collapses other topics); action=get returns the profile. The agent supplies the classified topic — the server just tracks evidence over time.

NameTypeReqDescription
actionstringobserve demonstrated knowledge of a topic | get the profile
namespacestringNamespace within scope (e.g., project name, team name)
scopestringScope (default 'user').
topicstringThe topic (required for observe; optional filter for get).
weightintegerEvidence increment for observe (default 1).

No output schema declared.

No examples provided.

memory_export ~127

Export memories as JSON for backup or migration. Supports filtering by scope, namespace, and department. Max 1000 records per export.

NameTypeReqDescription
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
limitintegerMaximum memories to export in this page (live, top-level only)
namespacestringNamespace within scope (e.g., project name, team name)
offsetintegerPagination offset; use with has_more to export a large corpus in pages
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_export_dataset ~167

Export high-signal rows (auto-extracted learnings + agent reflections) as instruction→output training pairs (pairs/chatml/alpaca) for a project LoRA/distillation flywheel. Read-only, quality-filtered by importance/confidence. Training stays out of the repo — this only emits the JSONL.

NameTypeReqDescription
formatstringOutput shape: {prompt,completion} | ChatML messages | Alpaca instruction/output.
limitintegerMax training pairs to emit.
min_confidencenumberQuality floor on confidence_score.
min_importancenumberQuality floor on importance_score.
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_export_vault ~153

Write memories OUT to an Obsidian vault as .md files with YAML frontmatter — the reverse of vault_sync. Each currently-valid top-level memory becomes a plain markdown file a human can open and edit; namespaced memories land under <vault>/<namespace>/. Lossless: written files parse back via the vault parser. Optionally filter by scope/namespace.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
vault_pathstringyesAbsolute path to the target Obsidian vault directory (created if missing). Memories are written as .md files with YAML frontmatter — the reverse of vault_sync.

No output schema declared.

No examples provided.

memory_extract_entities ~80

Store LLM-extracted entities and relationships for a memory. The calling agent should analyze memory content and provide structured entity/relationship data. This enables knowledge graph queries.

NameTypeReqDescription
entitiesarrayyesEntities extracted from the memory content
memory_idstringyesMemory ID to associate extracted entities with
relationshipsarrayRelationships between entities

No output schema declared.

No examples provided.

memory_extract_learnings ~180

Extract decisions, patterns, error fixes, and conventions from a session transcript using heuristic analysis. Deduplicates against existing memories and optionally auto-stores.

NameTypeReqDescription
auto_storebooleanIf true, automatically store extracted learnings as memories
categoriesarrayWhich categories of learnings to extract (default: all)
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
sourcestringSource identifier for the session (e.g., "session-2026-03-26")
tagsarrayTags for categorization
transcriptstringyesSession transcript or conversation text to extract learnings from

No output schema declared.

No examples provided.

memory_forget ~193

GDPR-grade forget (additive — does NOT replace memory_delete). hard:false (default) soft-deletes/tombstones: stamps valid_to so the memory is excluded from default retrieval but stays queryable via as_of and is recoverable. hard:true erases for real: returns a portability "export" copy FIRST (data-subject access), THEN permanently deletes (irreversible, cascades). Returns { forgotten, mode, recoverable, export? }.

NameTypeReqDescription
hardbooleanErasure mode. false (default): soft-delete/tombstone — stamps valid_to so the memory is excluded from default retrieval but remains queryable via as_of and is recoverable. true: hard erase — returns…
idstringyesMemory ID to forget

No output schema declared.

No examples provided.

memory_get ~56

Retrieve a specific memory by its ID. Optionally include child chunks for ingested documents.

NameTypeReqDescription
idstringyesMemory ID to retrieve
include_chunksbooleanIf true, also return child chunks for ingested documents

No output schema declared.

No examples provided.

memory_graph ~115

Query the knowledge graph: find entities, their relationships, and linked memories. Use entity name to start traversal, or browse all entities by type. Supports multi-hop traversal (depth 1-3).

NameTypeReqDescription
depthintegerGraph traversal depth (1-3 hops)
entitystringEntity name to start graph traversal from
entity_typestringFilter entities by type
include_memoriesbooleanInclude linked memories in the response
limitintegerMaximum entities to return

No output schema declared.

No examples provided.

memory_health ~79

Store health report: live/retired/stale counts, aging buckets, unresolved conflicts, and webhook delivery health, rolled up to a single ok|attention status with reasons. Read-only; optionally scoped.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_history ~94

Point-in-time history surface for one memory: its current bi-temporal timeline (created_at/updated_at/valid_from/valid_to/tx_expired/superseded_at/version) plus the full memory_versions edit history. Returns { memory_id, exists, timeline, versions } or { memory_id, exists:false }.

NameTypeReqDescription
idstringyesMemory ID to get the bi-temporal timeline + version history for

No output schema declared.

No examples provided.

memory_import ~65

Import memories from JSON. Each item is embedded and stored. Use overwrite=true to update existing memories by ID.

NameTypeReqDescription
dataarrayyesArray of memory objects to import (max 500 per batch)
overwritebooleanIf true, overwrite existing memories with same ID

No output schema declared.

No examples provided.

memory_ingest ~275

Ingest a full document: automatically chunks it based on content type (text, markdown, code, legal), embeds each chunk, and stores with provenance. Use this for large documents.

NameTypeReqDescription
access_levelstringAccess classification level
authorstringWho created this content
chunk_overlapintegerOverlap between chunks in characters for context preservation
chunk_sizeintegerTarget chunk size in characters (~4 chars per token)
contentstringyesFull document content to ingest
content_typestringContent type determines chunking strategy
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
document_typestringType of document (e.g., contract, policy, code, incident, decision)
metadataobjectDomain-specific metadata (e.g., {contract_type: 'NDA', parties: ['A','B']})
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
sourcestringOrigin of the content (e.g., file path, URL, system name)
tagsarrayTags for categorization
titlestringDocument title

No output schema declared.

No examples provided.

memory_insights ~112

Active advisor digest: what in the store needs ATTENTION now — unresolved conflicts, memories flagged stale by change-propagation, most-contradicted facts, and decisions recorded with no supporting evidence. Complements memory_questions (what to capture next). Read-only; optionally scoped.

NameTypeReqDescription
limitintegerMaximum number of insights to return (default 20)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_lesson ~317

Capture a structured lesson or incident in one call: fills the matching section template (incident → Symptom/Root Cause/Fix/Prevention; lesson → What/Why it matters/How to apply) from your field values and stores it through the normal write path (deduped — a repeat capture is a NOOP). Unknown document_types use a generic scaffold.

NameTypeReqDescription
access_levelstringAccess classification level
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
document_typestringSection template to fill: lesson | incident | decision | bug-fix | meeting | session. Unknown types use a generic Summary/Details/Notes scaffold.
fieldsobjectyesSection values keyed by section name (snake_case ok), e.g. {symptom, root_cause, fix, prevention} for an incident or {what, why_it_matters, how_to_apply} for a lesson. Omitted sections keep a placeho…
importance_scorenumberManual importance 0–1 (higher surfaces first in reflection/recall)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
sourcestringOrigin of the content (e.g., file path, URL, system name)
tagsarrayTags for categorization
titlestringOptional title (auto-derived from the first field value when omitted)

No output schema declared.

No examples provided.

memory_link_check ~180

Find BROKEN [[wikilinks]] — the inverse of memory_unlinked_mentions. Reports (1) unresolved: a [[Title]] in a memory's content that matches no LIVE memory title in the same scope/namespace; (2) dangling_edges: stored wikilink edges whose target memory was deleted or superseded. Resolution is by TITLE (memories have no slug) so write [[Exact Title]]. Pass an id to check one memory, or scope/namespace to sweep a partition. Read-only.

NameTypeReqDescription
idstringCheck one memory by ID. Omit to sweep a whole partition (scope/namespace).
limitintegerMax source memories to inspect in a sweep
namespacestringSweep namespace (when no id is given)
scopestringSweep scope (when no id is given)

No output schema declared.

No examples provided.

memory_list ~222

Browse memories with filtering and pagination. Supports sorting by creation date, update date, or title.

NameTypeReqDescription
as_ofstringISO 8601 point-in-time: return memories that were valid at this instant (bi-temporal). Defaults to currently-valid memories when omitted. Must be a full ISO-8601 timestamp (date + time + zone); a dat…
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
document_typestringType of document (e.g., contract, policy, code, incident, decision)
limitintegerMaximum results to return
namespacestringNamespace within scope (e.g., project name, team name)
offsetintegerSkip this many results for pagination
scopestringMemory scope for isolation
sort_bystringField to sort results by
sort_orderstringSort direction

No output schema declared.

No examples provided.

memory_manifest ~142

Get a lightweight index of all memories — titles, types, tags, and scores without content. Use this to discover what knowledge exists before running expensive searches.

NameTypeReqDescription
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
document_typestringType of document (e.g., contract, policy, code, incident, decision)
limitintegerMaximum entries to return (default 500)
namespacestringNamespace within scope (e.g., project name, team name)
offsetintegerSkip this many entries for pagination
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_query ~224

Answer a question with a TIGHT, relevant subgraph instead of flooding context. Seeds from hybrid search, walks the memory graph (hub-avoiding) up to max_hops, and returns a token-budgeted "context" string plus structured nodes — with an actionable hint when truncated.

NameTypeReqDescription
max_hopsintegerHow many hops to walk out from the seed memories (1-4).
max_tokensintegerApproximate token budget for the rendered context (~4 chars per token). Nodes are rendered until the budget is hit, then truncated with a hint.
namespacestringNamespace within scope (e.g., project name, team name)
querystringyesThe question to answer. Seeds from hybrid search, then walks the memory graph to return a tight, relevant subgraph instead of flooding context.
scopestringMemory scope for isolation
seed_limitintegerMaximum seed memories from the initial search. A gap cutoff drops seeds scoring below 20% of the top seed to keep the traversal focused.

No output schema declared.

No examples provided.

memory_query_structured ~150

Structured query over memory PROPERTIES (the agent's "Bases/Dataview"): filter currently-valid, top-level memories by scope/namespace/department/document_type/language/tags (AND)/min_importance/created_at range, sort by created_at|updated_at|importance_score|title, paginate, and project specific fields. Exact, deterministic retrieval that complements fuzzy memory_search — use it for "all decision memories in namespace=acme with importance>0.7, newest first".

NameTypeReqDescription
fieldsarrayReturn only these fields (projection)
filterobject
limitinteger
offsetinteger
sortobject

No output schema declared.

No examples provided.

memory_questions ~155

Active "questions to ask" digest. Surfaces open questions / gaps the graph is uniquely positioned to find so you know what to verify or learn next: AMBIGUOUS inferred links to confirm (verify), frequently-mentioned but barely-documented entities (gap), and disconnected memories that may be stale or mis-scoped (orphan). Returns { questions: [{ question, type, evidence }], count } over currently-valid top-level memories. Optional scope/namespace filters and limit (default 20).

NameTypeReqDescription
limitintegerMaximum number of questions to return (default 20)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_reflect ~256

Generative-Agents-style reflection (agent-driven, no LLM in the server). mode:"gather" (default) returns the most reflection-worthy memories (high importance × recent) as material plus an instruction to synthesize 1–3 higher-level insights. mode:"store" persists a synthesized insight (provenance="reflection") and "derived_from"-links it to its source memories.

NameTypeReqDescription
insightstringstore: the higher-level insight you synthesized from the gathered material
limitintegergather: max reflection-material rows to return (default 10)
modestring"gather" (default): the server SELECTs the most reflection-worthy memories (high importance × recent) as material for you to synthesize. "store": persist a synthesized insight back, linked to its sou…
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
source_idsarraystore: ids of the source memories this insight was derived from (linked via "derived_from"; non-existent ids are skipped)
titlestringstore: optional short title for the stored insight

No output schema declared.

No examples provided.

memory_related ~69

Find memories semantically related to a given memory ID. Uses vector similarity to discover connections.

NameTypeReqDescription
idstringyesMemory ID to find related memories for
limitintegerMaximum number of related memories to return
min_similaritynumberMinimum similarity threshold (0-1)

No output schema declared.

No examples provided.

memory_restore ~107

Bring a memory back: un-tombstones a soft-forgotten memory (memory_forget {hard:false}) by clearing valid_to/tx_expired so it re-enters default recall, AND/OR restores a condensed memory to its original full content. Both are applied when both apply. Returns reinstated/uncondensed flags.

NameTypeReqDescription
idstringyesMemory ID to bring back — un-tombstones a soft-forgotten memory and/or restores condensed content to original full text

No output schema declared.

No examples provided.

memory_revalidate ~167

Change-propagation surface. action=list: memories flagged needs_revalidation (a source they were derived from changed). action=preview: the blast radius of a change to `id` (which dependents WOULD be flagged) without mutating anything. action=confirm: clear `id`'s stale flag after re-verifying it.

NameTypeReqDescription
actionstringlist stale memories | preview the blast radius of a change to `id` (dry-run) | confirm `id` is current
idstringMemory id (required for preview/confirm).
limitintegerMax stale memories to list.
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_search ~789

Search memories using hybrid vector+keyword search. Finds semantically similar content and exact keyword matches, with optional filters for scope, department, tags, date range, and temporal decay.

NameTypeReqDescription
access_levelstringAccess classification level
as_ofstringISO 8601 point-in-time: return memories that were valid at this instant (bi-temporal). Defaults to currently-valid memories when omitted. Must be a full ISO-8601 timestamp (date + time + zone); a dat…
auto_decaybooleanWhen true and no explicit temporal_decay is given, derive decay per result from its volatility class (volatile facts decay fast, stable facts not at all). Down-ranks stale volatile facts without hand…
date_fromstringFilter: only memories created at/after this full ISO-8601 timestamp (e.g. 2026-03-01T00:00:00Z)
date_tostringFilter: only memories created at/before this full ISO-8601 timestamp (e.g. 2026-03-31T23:59:59Z)
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
detail_levelstringControls response detail: "summary" returns titles + snippets (default, saves tokens), "full" returns complete content, "ids_only" returns just IDs and titles for browsing
document_typestringType of document (e.g., contract, policy, code, incident, decision)
languagestringContent language (ISO 639-1 code)
limitintegerMaximum results to return
max_tokensintegerApproximate maximum response size in tokens (~4 chars per token). Results are truncated to fit within budget. Applies after detail_level projection.
min_confidencenumberMinimum confidence score threshold (0-1)
min_groundednessnumberMinimum TRUST threshold (0-1), distinct from min_confidence (relevance). Drops results whose groundedness — stored confidence_score + provenance tier + recency — is below this. Use to demand well-sou…
namespacestringNamespace within scope (e.g., project name, team name)
offsetintegerSkip this many results for pagination
querystringyesSearch query — supports natural language for semantic search and keywords for exact matching
rerankbooleanEnable local cross-encoder reranking: reorder the top candidates by joint (query, document) relevance using a cross-encoder model — the biggest precision win over the bi-encoder base embedder. Slower…
rerank_top_nintegerHow many top candidates to rerank when "rerank" is true (default 50). Higher = better recall coverage but slower.
scopestringMemory scope for isolation
search_modestringSearch mode: hybrid (vector+keyword), vector only, or keyword only
tagsarrayFilter to memories containing ALL specified tags
temporal_decayobjectApply time-based decay to favor recent memories
use_graphbooleanEnable HippoRAG multi-hop recall: seed the entity graph from the query and fuse Personalized PageRank as a third ranker, surfacing memories connected through entities (associative recall) that pure v…

No output schema declared.

No examples provided.

memory_session_note ~201

Frictionless per-session capture ("daily note for agents"). Keyed by source "session:<session_id>": the first call creates one session memory (document_type "session"); every later call for the same session_id appends to that same memory (newline-joined, re-embedded and versioned). Different session_ids stay isolated. Returns { memory_id, created, appended }.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
session_idstringyesSession identifier. The note is keyed by source "session:<session_id>" — the first call creates the memory, later calls append to that same one.
textstringyesText to capture (created as content, or appended newline-joined to the session note).
titlestringOptional title used only on create (defaults to "Session <session_id>").

No output schema declared.

No examples provided.

memory_session_state ~221

Save or resume a resumable session-state ("where was I"): structured summary/next_steps/open_questions/files_touched/branch keyed by session_key. save upserts (versioned, so you can diff sessions via memory_version_diff); resume returns the latest. Bypasses the dedup write-gate so an incremental save always persists.

NameTypeReqDescription
actionstringsave the current session state | resume the latest
branchstringGit branch this session is on.
extraobjectAny additional caller-defined state fields.
files_touchedarrayFiles in flight.
namespacestringNamespace within scope (e.g., project name, team name)
next_stepsarrayOrdered list of what to do next.
open_questionsarrayUnresolved questions.
scopestringMemory scope for isolation
session_keystringStable key for the work thread (defaults to branch, else "default").
summarystringWhere things stand right now.

No output schema declared.

No examples provided.

memory_stats ~85

Get usage statistics: total memories, chunks, documents, breakdowns by scope/department/type, storage size, and expired count.

NameTypeReqDescription
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_store ~531

Store a new memory with content, metadata, and automatic vector embedding. Use this to save information, decisions, patterns, or knowledge for later semantic retrieval.

NameTypeReqDescription
access_levelstringAccess classification level
agent_idstringIdentifier of the writing agent for multi-agent attribution
authorstringWho created this content
contentstringyesThe text content to store as a memory
departmentstringDepartment (e.g., legal, engineering, hr, sales, finance)
document_typestringType of document (e.g., contract, policy, code, incident, decision)
expires_atstringFull ISO-8601 expiration timestamp, e.g. 2026-03-01T00:00:00Z (memory auto-excluded from search after this)
importance_scorenumberExplicit importance 0-1 (governance/criticality). When omitted it is derived from content; min_importance filters operate on this value.
languagestringContent language (ISO 639-1 code)
metadataobjectDomain-specific metadata (e.g., {contract_type: 'NDA', parties: ['A','B']})
namespacestringNamespace within scope (e.g., project name, team name)
on_conflictstringWrite policy when a near-match exists. "add" (default): insert as new, except an exact duplicate is skipped (NOOP) — identical to prior behaviour. "update": merge content into the existing match (app…
scopestringMemory scope for isolation
sourcestringOrigin of the content (e.g., file path, URL, system name)
tagsarrayTags for categorization
titlestringShort title for the memory
verification_detailstringFree text: how/when/by-what the fact was verified (e.g. "checked live UAT DB 2026-06-18").
verification_tierstringHow well this fact is verified: source_verified > tool_verified > asserted > unverified. Lowers groundedness for unverified claims. Omit ⇒ neutral.
volatilitystringOverride the auto-derived volatility class. Omit to auto-classify from content + document_type (volatile deploy/status facts warn sooner on recall).

No output schema declared.

No examples provided.

memory_template ~150

Fetch an Obsidian-style note scaffold for a document_type so stored memories stay structurally consistent. Returns a markdown template with ## Section headers (e.g., decision → Context/Decision/Consequences; incident → Symptom/Root Cause/Fix/Prevention; also learning, bug-fix, meeting, session). Unknown types get a generic Summary/Details/Notes scaffold (known:false). Read-only: fill the scaffold, then store it via memory_store.

NameTypeReqDescription
document_typestringyesDocument type to fetch a note scaffold for (e.g., decision, incident, learning, bug-fix, meeting, session). Unknown types get a generic Summary/Details/Notes scaffold (known:false).

No output schema declared.

No examples provided.

memory_tiers ~107

Show the MemGPT-style tier distribution (hot / recall / archival) of currently-valid, top-level memories and list the hot working set. Tiers are derived from access recency + frequency — hot = frequently or recently accessed, archival = old and rarely touched, recall = everything in between. Read-only; optional scope/namespace filter.

NameTypeReqDescription
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation

No output schema declared.

No examples provided.

memory_unlinked_mentions ~172

Surface "unlinked mentions" for a memory — other memories that are semantically related (vector-near + shared entities) but that you have NOT explicitly linked yet. This is Obsidian's killer feature, automated: instead of matching note titles as literal text, it uses embeddings + the entity graph to propose latent connections the agent never made. Auto "similar_to" suggestions are surfaced; existing wikilink/co-occurrence/typed links are excluded. Use it to discover and then confirm real connections (e.g. via memory_extract_entities or a stored link).

NameTypeReqDescription
idstringyesMemory ID to surface unlinked mentions for
limitintegerMaximum number of unlinked mentions to return
min_similaritynumberMinimum cosine similarity for a mention (0-1)

No output schema declared.

No examples provided.

memory_update ~243

Update an existing memory. If content changes, the vector embedding is automatically regenerated. Previous versions are preserved in history.

NameTypeReqDescription
changed_bystringWho made this change (for version history)
contentstringNew content (will re-generate embedding)
expires_atNew full ISO-8601 expiration timestamp (e.g. 2026-03-01T00:00:00Z), or null to remove
idstringyesID of the memory to update
importance_scorenumberReassign importance 0-1 (governance/criticality)
metadataobjectUpdated metadata (replaces existing)
tagsarrayUpdated tags (replaces existing)
titlestringNew title
verification_detailstringFree text accompanying a verification_tier change.
verification_tierstringSet/upgrade the verification tier after the fact (the main post-hoc use case — you verify a stored claim against live state later). Raises/lowers groundedness.
volatilitystringManual override of the auto-derived volatility class.

No output schema declared.

No examples provided.

memory_verify ~266

Verify the signed provenance envelope of memories: recomputes each content_hash and ed25519-checks the signature against THIS machine's trusted signing key (not the row's self-embedded key). Verify one by id, or a batch by scope/namespace. Returns per-memory status (verified / unsigned / tampered / untrusted) + a summary {verified, unsigned, tampered, untrusted}. "untrusted" = validly signed but by a non-trust-root key (e.g. a teammate on a synced vault) — distinct from "tampered". Read-only. Signing is enabled by MCP_SIGN_MEMORIES.

NameTypeReqDescription
idstringVerify a single memory by id. Omit to verify a batch by scope/namespace.
limitintegerMax memories to verify in batch mode (default 100)
namespacestringNamespace within scope (e.g., project name, team name)
scopestringMemory scope for isolation
trusted_pubkeysarrayAdditional trusted signer public keys (SPKI PEM) for multi-machine/team vaults — a memory signed by any of these (or by MCP_TRUSTED_PUBKEYS, or this machine's own key) verifies instead of reading 'un…

No output schema declared.

No examples provided.

memory_version_diff ~94

Show a line-by-line diff between two revisions of a memory (Obsidian-Sync-grade trust). `to` defaults to the current version. Use it to audit exactly what an edit changed — added/removed lines plus a summary count.

NameTypeReqDescription
fromintegeryesVersion number to diff from
idstringyesMemory ID
tointegerVersion to diff to (defaults to current)

No output schema declared.

No examples provided.

memory_version_restore ~96

Roll a memory back to a prior version's content. The restore is itself a versioned, re-embedded edit (the pre-restore state is snapshotted, the vault file re-mirrored) — never a destructive overwrite. Returns the restored memory.

NameTypeReqDescription
changed_bystringWho performed the restore
idstringyesMemory ID
versionintegeryesVersion number to restore content from

No output schema declared.

No examples provided.

memory_versions ~55

View the version history of a memory, showing all past edits with timestamps and who made each change.

NameTypeReqDescription
idstringyesMemory ID to get version history for
limitintegerMaximum number of versions to return

No output schema declared.

No examples provided.

memory_webhook ~252

Manage the active-infrastructure event bus (gated on MCP_WEBHOOKS). register an outbound webhook target (URL is SSRF-validated — public http(s) only), list targets (secrets never returned), delete a target, or dispatch the durable delivery queue now. Mutations to memories (created/updated/superseded/deleted/forgotten) enqueue HMAC-signed deliveries that this tool drains with retry + circuit-breaker + dead-letter.

NameTypeReqDescription
actionstringregister a target | list targets | delete a target | dispatch the queue now
eventsstringComma-separated event types or '*' (default all): memory.created/updated/superseded/deleted/forgotten.
idstringTarget id (action=delete).
namespacestringOnly deliver events for memories in this namespace.
scopestringOnly deliver events for memories in this scope.
secretstringOptional HMAC-SHA256 signing secret; sent as X-Memory-Signature on each delivery.
urlstringTarget URL (action=register). Validated against the SSRF guard: public http(s) only.

No output schema declared.

No examples provided.

vault_search ~237

Search memories via hybrid vector+keyword search, scoped to a namespace. Defaults the namespace to the vault folder name; pass an explicit `namespace` to search memories that live under a different namespace (e.g. after memory_export_vault).

NameTypeReqDescription
limitintegerMaximum results to return
min_confidencenumberMinimum confidence score threshold (0-1)
namespacestringNamespace to search. Defaults to the vault folder name — set this when your memories live in a namespace different from the vault directory name (e.g. after memory_export_vault wrote them under <vaul…
offsetintegerSkip this many results for pagination
querystringyesSearch query — supports natural language for semantic search and keywords for exact matching
scopestringMemory scope to search (default "project")
search_modestringSearch mode: hybrid (vector+keyword), vector only, or keyword only
tagsarrayFilter to memories containing ALL specified tags
vault_pathstringyesAbsolute path to the Obsidian vault directory

No output schema declared.

No examples provided.

vault_status ~54

Check the sync status of an Obsidian vault: total files, synced/pending/changed counts, last sync time, and memory count.

NameTypeReqDescription
vault_pathstringyesAbsolute path to the Obsidian vault directory

No output schema declared.

No examples provided.

Common questions

What is the io.github.YonasValentin/mcp-memory-graph server?

io.github.YonasValentin/mcp-memory-graph is listed in the public MCP registry as io.github.YonasValentin/mcp-memory-graph. Local-first memory for Claude Code and any MCP client: hybrid search + knowledge graph, $0/token. This page covers its npm package (mcp-memory-graph).

Is the io.github.YonasValentin/mcp-memory-graph server safe to use?

io.github.YonasValentin/mcp-memory-graph scores 87 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.YonasValentin/mcp-memory-graph server expose?

io.github.YonasValentin/mcp-memory-graph exposes 51 tools: memory_store, memory_search, memory_get, memory_update, memory_delete, and 46 more. Their descriptions and schemas cost roughly 8,705 tokens of context every time the server is loaded.

Is the io.github.YonasValentin/mcp-memory-graph server still maintained?

io.github.YonasValentin/mcp-memory-graph is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.YonasValentin/mcp-memory-graph server under?

io.github.YonasValentin/mcp-memory-graph declares the PolyForm-Noncommercial-1.0.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.