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

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

Available components

−5 this week 81 Trust /100

Last scanned (22 hours ago)

Scores higher than 69% of npm servers

Category Memory and Knowledge

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 Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 73 of 209 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 120 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 Management63
  • Stability observed for 19 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
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.

  • 4 Nov 26 −5
    • Stability: pass → 0.63 functional
  • 29 Oct 26 0
    • Stability: 0.97 → pass security
  • 28 Oct 26 0
    • Stability: pass → 0.97 functional
  • 24 Oct 26 −2
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. security
  • 22 Oct 26 0
    • CVE-2026-114112 affects this package: high ▼ security
    • CVE-2026-114113 affects this package: high ▼ security
    • CVE-2026-114111 affects this package: high ▼ security
    • GHSA-wq5f-xc86-pv6w no longer affects this package ▲ security
    • GHSA-rgj7-g3m4-5g8c no longer affects this package ▲ security
    • GHSA-f88m-g3jw-g9cj no longer affects this package ▲ security
    • Stability: 0.97 → pass security
  • 21 Oct 26 0
    • Stability: pass → 0.97 functional
  • 17 Oct 26 +2
    • Stability: 0.80 → pass security
  • 16 Oct 26 +42
    • Injection markers: unverified → pass ▲ security
    • Stability: unverified → 0.80 ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
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 4 Nov 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 SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:bb14d422b8c04ef83f5b0cc0d41992e5ea65ea12fd6f78ece3aa3d14c02f13f105ca164c47e6f4dd6e1c345a5d87c7e79f34dc61d14f4d6df3743599c

Background: How many MCP packages publish verified provenance →

Vulnerabilities 4 findings
ID CVE Severity Vector Fix available
GHSA-f88m-g3jw-g9cj CVE-2026-114113 high yes
GHSA-rgj7-g3m4-5g8c CVE-2026-114112 high yes
GHSA-wq5f-xc86-pv6w CVE-2026-114111 high yes
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 209 packages
Packages resolved 209
Deprecated 2
Stale 72
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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
namespacestring–Namespace 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
scopestring–Memory 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
limitinteger–Maximum memories to include as canvas nodes (default 50)
namestring–Filename stem for the written .canvas (default "memory-graph"). Sanitized — path separators and ".." can never escape the vault.
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
vault_pathstring–Absolute 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
limitinteger–Maximum communities to return, largest first (default 20)
min_sizeinteger–Drop 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_levelstring–Target 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_runboolean–If true, report what would be done without making changes
forgetting_floornumber–Opt-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_operationsinteger–Maximum number of merge/prune operations per run
namespacestring–Namespace within scope (e.g., project name, team name)
prune_expiredboolean–Remove memories past their expires_at date
prune_low_qualityboolean–Remove memories with both low importance and low confidence
scopestring–Memory scope for isolation
similarity_thresholdnumber–Cosine 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
filterobject–Delete memories matching filter criteria
idstring–Delete 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
actionstring–observe demonstrated knowledge of a topic | get the profile
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Scope (default 'user').
topicstring–The topic (required for observe; optional filter for get).
weightinteger–Evidence 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
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
limitinteger–Maximum memories to export in this page (live, top-level only)
namespacestring–Namespace within scope (e.g., project name, team name)
offsetinteger–Pagination offset; use with has_more to export a large corpus in pages
scopestring–Memory 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
formatstring–Output shape: {prompt,completion} | ChatML messages | Alpaca instruction/output.
limitinteger–Max training pairs to emit.
min_confidencenumber–Quality floor on confidence_score.
min_importancenumber–Quality floor on importance_score.
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
relationshipsarray–Relationships 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_storeboolean–If true, automatically store extracted learnings as memories
categoriesarray–Which categories of learnings to extract (default: all)
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
sourcestring–Source identifier for the session (e.g., "session-2026-03-26")
tagsarray–Tags 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
hardboolean–Erasure 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_chunksboolean–If 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
depthinteger–Graph traversal depth (1-3 hops)
entitystring–Entity name to start graph traversal from
entity_typestring–Filter entities by type
include_memoriesboolean–Include linked memories in the response
limitinteger–Maximum 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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)
overwriteboolean–If 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_levelstring–Access classification level
authorstring–Who created this content
chunk_overlapinteger–Overlap between chunks in characters for context preservation
chunk_sizeinteger–Target chunk size in characters (~4 chars per token)
contentstringyesFull document content to ingest
content_typestring–Content type determines chunking strategy
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
document_typestring–Type of document (e.g., contract, policy, code, incident, decision)
metadataobject–Domain-specific metadata (e.g., {contract_type: 'NDA', parties: ['A','B']})
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
sourcestring–Origin of the content (e.g., file path, URL, system name)
tagsarray–Tags for categorization
titlestring–Document 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
limitinteger–Maximum number of insights to return (default 20)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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_levelstring–Access classification level
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
document_typestring–Section 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_scorenumber–Manual importance 0–1 (higher surfaces first in reflection/recall)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
sourcestring–Origin of the content (e.g., file path, URL, system name)
tagsarray–Tags for categorization
titlestring–Optional 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
idstring–Check one memory by ID. Omit to sweep a whole partition (scope/namespace).
limitinteger–Max source memories to inspect in a sweep
namespacestring–Sweep namespace (when no id is given)
scopestring–Sweep 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_ofstring–ISO 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…
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
document_typestring–Type of document (e.g., contract, policy, code, incident, decision)
limitinteger–Maximum results to return
namespacestring–Namespace within scope (e.g., project name, team name)
offsetinteger–Skip this many results for pagination
scopestring–Memory scope for isolation
sort_bystring–Field to sort results by
sort_orderstring–Sort 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
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
document_typestring–Type of document (e.g., contract, policy, code, incident, decision)
limitinteger–Maximum entries to return (default 500)
namespacestring–Namespace within scope (e.g., project name, team name)
offsetinteger–Skip this many entries for pagination
scopestring–Memory 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_hopsinteger–How many hops to walk out from the seed memories (1-4).
max_tokensinteger–Approximate token budget for the rendered context (~4 chars per token). Nodes are rendered until the budget is hit, then truncated with a hint.
namespacestring–Namespace 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.
scopestring–Memory scope for isolation
seed_limitinteger–Maximum 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
fieldsarray–Return 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
limitinteger–Maximum number of questions to return (default 20)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
insightstring–store: the higher-level insight you synthesized from the gathered material
limitinteger–gather: 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…
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
source_idsarray–store: ids of the source memories this insight was derived from (linked via "derived_from"; non-existent ids are skipped)
titlestring–store: 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
limitinteger–Maximum number of related memories to return
min_similaritynumber–Minimum 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
actionstring–list stale memories | preview the blast radius of a change to `id` (dry-run) | confirm `id` is current
idstring–Memory id (required for preview/confirm).
limitinteger–Max stale memories to list.
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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_levelstring–Access classification level
as_ofstring–ISO 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_decayboolean–When 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_fromstring–Filter: only memories created at/after this full ISO-8601 timestamp (e.g. 2026-03-01T00:00:00Z)
date_tostring–Filter: only memories created at/before this full ISO-8601 timestamp (e.g. 2026-03-31T23:59:59Z)
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
detail_levelstring–Controls response detail: "summary" returns titles + snippets (default, saves tokens), "full" returns complete content, "ids_only" returns just IDs and titles for browsing
document_typestring–Type of document (e.g., contract, policy, code, incident, decision)
languagestring–Content language (ISO 639-1 code)
limitinteger–Maximum results to return
max_tokensinteger–Approximate maximum response size in tokens (~4 chars per token). Results are truncated to fit within budget. Applies after detail_level projection.
min_confidencenumber–Minimum confidence score threshold (0-1)
min_groundednessnumber–Minimum 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…
namespacestring–Namespace within scope (e.g., project name, team name)
offsetinteger–Skip this many results for pagination
querystringyesSearch query — supports natural language for semantic search and keywords for exact matching
rerankboolean–Enable 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_ninteger–How many top candidates to rerank when "rerank" is true (default 50). Higher = better recall coverage but slower.
scopestring–Memory scope for isolation
search_modestring–Search mode: hybrid (vector+keyword), vector only, or keyword only
tagsarray–Filter to memories containing ALL specified tags
temporal_decayobject–Apply time-based decay to favor recent memories
use_graphboolean–Enable 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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).
titlestring–Optional 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
actionstring–save the current session state | resume the latest
branchstring–Git branch this session is on.
extraobject–Any additional caller-defined state fields.
files_touchedarray–Files in flight.
namespacestring–Namespace within scope (e.g., project name, team name)
next_stepsarray–Ordered list of what to do next.
open_questionsarray–Unresolved questions.
scopestring–Memory scope for isolation
session_keystring–Stable key for the work thread (defaults to branch, else "default").
summarystring–Where 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
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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_levelstring–Access classification level
agent_idstring–Identifier of the writing agent for multi-agent attribution
authorstring–Who created this content
contentstringyesThe text content to store as a memory
departmentstring–Department (e.g., legal, engineering, hr, sales, finance)
document_typestring–Type of document (e.g., contract, policy, code, incident, decision)
expires_atstring–Full ISO-8601 expiration timestamp, e.g. 2026-03-01T00:00:00Z (memory auto-excluded from search after this)
importance_scorenumber–Explicit importance 0-1 (governance/criticality). When omitted it is derived from content; min_importance filters operate on this value.
languagestring–Content language (ISO 639-1 code)
metadataobject–Domain-specific metadata (e.g., {contract_type: 'NDA', parties: ['A','B']})
namespacestring–Namespace within scope (e.g., project name, team name)
on_conflictstring–Write 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…
scopestring–Memory scope for isolation
sourcestring–Origin of the content (e.g., file path, URL, system name)
tagsarray–Tags for categorization
titlestring–Short title for the memory
verification_detailstring–Free text: how/when/by-what the fact was verified (e.g. "checked live UAT DB 2026-06-18").
verification_tierstring–How well this fact is verified: source_verified > tool_verified > asserted > unverified. Lowers groundedness for unverified claims. Omit ⇒ neutral.
volatilitystring–Override 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
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory 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
limitinteger–Maximum number of unlinked mentions to return
min_similaritynumber–Minimum 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_bystring–Who made this change (for version history)
contentstring–New content (will re-generate embedding)
expires_at––New full ISO-8601 expiration timestamp (e.g. 2026-03-01T00:00:00Z), or null to remove
idstringyesID of the memory to update
importance_scorenumber–Reassign importance 0-1 (governance/criticality)
metadataobject–Updated metadata (replaces existing)
tagsarray–Updated tags (replaces existing)
titlestring–New title
verification_detailstring–Free text accompanying a verification_tier change.
verification_tierstring–Set/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.
volatilitystring–Manual 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
idstring–Verify a single memory by id. Omit to verify a batch by scope/namespace.
limitinteger–Max memories to verify in batch mode (default 100)
namespacestring–Namespace within scope (e.g., project name, team name)
scopestring–Memory scope for isolation
trusted_pubkeysarray–Additional 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
tointeger–Version 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_bystring–Who 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
limitinteger–Maximum 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
actionstring–register a target | list targets | delete a target | dispatch the queue now
eventsstring–Comma-separated event types or '*' (default all): memory.created/updated/superseded/deleted/forgotten.
idstring–Target id (action=delete).
namespacestring–Only deliver events for memories in this namespace.
scopestring–Only deliver events for memories in this scope.
secretstring–Optional HMAC-SHA256 signing secret; sent as X-Memory-Signature on each delivery.
urlstring–Target 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
limitinteger–Maximum results to return
min_confidencenumber–Minimum confidence score threshold (0-1)
namespacestring–Namespace 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…
offsetinteger–Skip this many results for pagination
querystringyesSearch query — supports natural language for semantic search and keywords for exact matching
scopestring–Memory scope to search (default "project")
search_modestring–Search mode: hybrid (vector+keyword), vector only, or keyword only
tagsarray–Filter 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.

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
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 81 out of 100 on VerifyMCP. We recorded 4 known advisories against it as of 4 November 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 4 November 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.