Independent reviews. IonBin has no partnerships with the tools on this page and was not paid for these listings. Our evaluations are our own, based on public documentation and our research. Product names are trademarks of their owners and are used for identification only. How disclosure works.

MCP · Persistent memory · Model Context Protocol maintainers

Memory Reference MCP Server

Keep named entities, observations and relationships in a local graph that survives a server restart.

Source reviewLocal runtime checksReviewed Editorial position 13 in mcp servers
Check before use

Persistence is plaintext. The synthetic observation was readable directly from disk and survived a process restart. File access, backups and host transcripts must fit the sensitivity of the stored data.

Understand the tool

What it does.

This reference server stores a small knowledge graph as a local file. An MCP client can add entities, attach observations, connect them and query the result later. It gives an assistant a place to keep explicit records; it does not decide whether those records are true.

Why use it?

Use it to prototype continuity across sessions with information you deliberately choose to retain. A project, a decision and the relationship between them are easier to inspect than an unexplained claim that an assistant remembers everything.

A useful fit for

  • Prototyping local project memory
  • Learning graph-oriented MCP tools
  • Retaining explicit decisions across sessions

From need to output

Ways to put it to work.

These are suggested workflows based on the documented capabilities. They are not recorded runtime results.

Use case 01

Keep a project decision register

A pilot needs the assistant to recall approved decisions between sessions.

  1. Create named project and decision entities.
  2. Store a short observation with its source or approval context.
  3. Link the decision to the project and read it back in a new session.

Intended outputA persistent, inspectable decision record.

Use case 02

Map a small system

A team wants to explain which components depend on which services.

  1. Create each component before creating relationships.
  2. Add narrowly scoped observations.
  3. Search the graph and review deletions before removing an entity.

Intended outputA small relationship map that the assistant can query.

A concrete starting point

Illustrative prompt: store a synthetic decision

The record is explicit and synthetic. Our separate fixture also tested restart persistence and deletion of linked entities.

text · illustrative example
In the test memory file, create FixtureProject and FixtureDecision. Record that the synthetic pilot uses a weekly review, link the decision to the project, and read back the graph. Store no personal or confidential information.

What this can change

Writes the configured graph file. Deleting an entity can remove its relationships.

This example has not been executed for this review. Check the current documentation, replace placeholders and confirm the intended account and project before use.

Before you start

Setup and access.

What you’ll need

  • Node.js and the pinned @modelcontextprotocol/server-memory 1.0.0 package.
  • An explicit MEMORY_FILE_PATH in a directory the server can write.
  • A host that can launch the stdio server and manage its lifetime.
Authentication
Local stdio has no application login; operating-system permissions and the host control access.
Can read
  • The configured graph file
  • Entity, observation and relationship data supplied by the client
Can write or change
  • Plaintext graph storage and associated write-coordination files
Network and data flow
  • No remote graph service is required for the tested local operations; the host model has its own data path
Approval and control
Decide what may be retained and who can read the file. Review destructive graph changes and storage sharing.

Check your environment

Compatibility, costs and license.

Compatibility notes

  • Local stdio MCP clients
  • Reference implementation for learning and prototyping; not a production-ready database recommendation

Costs and account requirements

No server subscription for this open-source local reference. Storage, backup and host-model costs remain yours.

Current pricing or plan information ↗

Apache-2.0 and MIT components

The repository license covers new contributions under Apache-2.0 and preserves MIT terms for existing material. The 1.0.0 npm metadata points to that license; inspect the exact distribution and notices before redistribution.

Read the license or service terms ↗

Keep the boundaries visible

Concerns and limitations.

Persistence is plaintext

The synthetic observation was readable directly from disk and survived a process restart. File access, backups and host transcripts must fit the sensitivity of the stored data.

Deletion changes relationships

Removing our linked entity removed its relation too. Make retention and recovery deliberate before using a graph as shared memory.

Stored text can steer later sessions

Treat retrieved observations as data with provenance. Persistence does not validate content or make instructions inside a record trustworthy.

Where it may fall short

  • Existing entity creation did not merge a new observation; use the dedicated observation operations for updates.
  • This small local test does not establish reliable multi-user or network-filesystem operation.

Observed behavior · 2026-10-18

Runtime and security findings.

Local runtime checks

Eleven checks exercised local graph creation, validation, search, plaintext storage, restart persistence and deletion. Two entities and one relation survived restart; deleting one entity removed its relation.

These checks cover the conditions below. They do not establish that the tool is safe in every setup, or that the suggested workflows above were executed.

What we found

Observed in this evaluation · medium severity under stated conditions

Records persisted as readable local text

Direct disk inspection found the authored observations in JSONL. After a server restart, read_graph returned two entities and one relation. The fixture did not use an encrypted storage layer.

In practice: Choose an explicit path with appropriate file permissions and retention/backup policy; avoid secrets in graph observations.

Observed in this evaluation

Creation and deletion have distinct semantics

Recreating FixtureGuide skipped it without merging SHOULD_NOT_MERGE. A missing relation endpoint was rejected. Deleting FixtureGuide left one entity and zero relations.

In practice: Use observation update tools for existing records and review relationship loss before deletion.

Version, environment and fixture
Version or deployment
1.0.0
Tested target
@modelcontextprotocol/server-memory
Artifact identity
sha512-UDMtMrw2xeI16mcn7O4fesp9Pf3hYh91thuU5KSz0BxKqwnTwEytZKjHfkrqxxmKp0r4QHoiEkMV99UmadmODw== (official npm distribution integrity; exact dependency lock retained)
Environment and fixture
  • Windows 11 build 26200; Node.js 24.18.0; @modelcontextprotocol/server-memory 1.0.0.
  • Launch: node <PACKAGES>/@modelcontextprotocol/server-memory/dist/index.js with MEMORY_FILE_PATH=<FIXTURE>/graph.jsonl and fresh home/config/temp directories.
  • Synthetic graph only: FixtureProject (project, observation Synthetic pilot only), FixtureGuide (document, observation Draft one), and relation FixtureProject uses FixtureGuide. Restart the process with the same configured file for the persistence check.

Checks and results

11 recorded checks. Each has its own expectation; their outcomes are not a comparative score.

InitializeMet expectation
Method
{"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"ionbin-fixture-eval","version":"1.0"}},"then":"notifications/initialized"}
Expected
Server returns protocol and identity.
Observed
JSON-RPC result: protocolVersion=2025-03-26; serverInfo={"name":"memory-server","version":"1.0.0"}.
Tools ListMet expectation
Method
{"method":"tools/list","params":{}}
Expected
Server advertises its callable tools.
Observed
JSON-RPC result: 9 tools; names=create_entities, create_relations, add_observations, delete_entities, delete_observations, delete_relations, read_graph, search_nodes, open_nodes.
Create EntitiesMet expectation
Method
{"method":"tools/call","params":{"name":"create_entities","arguments":{"entities":[{"name":"FixtureProject","entityType":"project","observations":["Synthetic pilot only"]},{"name":"FixtureGuide","entityType":"document","observations":["Draft one"]}]}}}
Expected
Two synthetic entities are created.
Observed
JSON-RPC/tool result: [ { "name": "FixtureProject", "entityType": "project", "observations": [ "Synthetic pilot only" ] }, { "name": "FixtureGuide", "entityType": "document", "observations": [ "Draft one" ] } ]
Create RelationMet expectation
Method
{"method":"tools/call","params":{"name":"create_relations","arguments":{"relations":[{"from":"FixtureProject","to":"FixtureGuide","relationType":"uses"}]}}}
Expected
A relation joins the two existing entities.
Observed
JSON-RPC/tool result: [ { "from": "FixtureProject", "to": "FixtureGuide", "relationType": "uses" } ]
Duplicate EntityMet expectation
Method
{"method":"tools/call","params":{"name":"create_entities","arguments":{"entities":[{"name":"FixtureGuide","entityType":"document","observations":["SHOULD_NOT_MERGE"]}]}}}
Expected
Creating an existing entity does not silently merge a new observation.
Observed
JSON-RPC/tool result: [] Skipped 1 entity that already exists: FixtureGuide. Its observations were not added; use add_observations for existing entities.
Missing Relation TargetMet expectation
Method
{"method":"tools/call","params":{"name":"create_relations","arguments":{"relations":[{"from":"FixtureProject","to":"MissingFixture","relationType":"uses"}]}}}
Expected
A relation to an absent entity is rejected.
Observed
Tool result isError=true: Entity with name MissingFixture not found
Search ObservationMet expectation
Method
{"method":"tools/call","params":{"name":"search_nodes","arguments":{"query":"Synthetic pilot"}}}
Expected
Search finds the entity whose observation matches.
Observed
JSON-RPC/tool result: { "entities": [ { "name": "FixtureProject", "entityType": "project", "observations": [ "Synthetic pilot only" ] } ], "relations": [ { "from": "FixtureProject", "to": "FixtureGuide", "relationType": "uses" } ] }
Plaintext StorageMet expectation
Method
{"operation":"Read configured synthetic MEMORY_FILE_PATH from disk"}
Expected
Graph content is persisted locally and is readable as text.
Observed
Observed: {"body":"{\"type\":\"entity\",\"name\":\"FixtureProject\",\"entityType\":\"project\",\"observations\":[\"Synthetic pilot only\"]}\n{\"type\":\"entity\",\"name\":\"FixtureGuide\",\"entityType\":\"document\",\"observations\":[\"Draft one\"]}\n{\"type\":\"relation\",\"from\":\"FixtureProject\",\"to\":\"FixtureGuide\",\"relationType\":\"uses\"}\n"}
Restart PersistenceMet expectation
Method
{"method":"tools/call","params":{"name":"read_graph","arguments":{}},"sequence":"Close first server; start another with same MEMORY_FILE_PATH; initialize; read_graph."}
Expected
Restarting with the same memory file retains two entities and their relation.
Observed
JSON-RPC/tool result: { "entities": [ { "name": "FixtureProject", "entityType": "project", "observations": [ "Synthetic pilot only" ] }, { "name": "FixtureGuide", "entityType": "document", "observations": [ "Draft one" ] } ], "relations": [ { "from": "FixtureProject", "to": "FixtureGuide", "relationType": "uses" } ] }
Delete EntityMet expectation
Method
{"method":"tools/call","params":{"name":"delete_entities","arguments":{"entityNames":["FixtureGuide"]}}}
Expected
Delete the selected entity.
Observed
JSON-RPC/tool result: Entities deleted successfully
Deletion CascadeMet expectation
Method
{"method":"tools/call","params":{"name":"read_graph","arguments":{}}}
Expected
Deleting the entity also removes its relation.
Observed
JSON-RPC/tool result: { "entities": [ { "name": "FixtureProject", "entityType": "project", "observations": [ "Synthetic pilot only" ] } ], "relations": [] }

Practical caveats

  • Reference-server status means this is educational/prototype code, not a production-ready storage endorsement.
  • The search result included a relation to an entity outside its returned entity subset; callers should not assume every search result is a closed subgraph.
  • Single-process restart success does not establish multi-user access control, concurrent-writer safety or recovery after a crash.

What this evaluation does not establish

  • Concurrent writers, crash recovery, network filesystems and access by multiple users were not tested.
  • Large graphs, backup restoration, encryption and malicious stored-content handling were not evaluated.

Read the evaluation record (JSON) →

Sources for the evaluation and controls

The basis for this review

Why it’s in the collection.

Adds persistent local graph behavior that readers can inspect. Shared reference-repository stars do not measure this server individually.

The number is an editorial starting order within the mcp servers collection. It does not measure popularity, speed, reliability or safety.

Why we added it

Persistent graph records expose practical retention, mutation and restart behavior through fully synthetic local tests.

Selection evidence checked .

Repository interest
91,357 GitHub stars at this snapshot ↗

Shared reference-server repository; not an individual-server adoption count

Repository activity
Last push reported by GitHub: . A push can include documentation or maintenance; it does not establish a new stable release.
Release signal
v1.0.0 ↗ · published . This selection signal can differ from the exact runtime tested above.
  • Single timestamped star snapshot and latest repository release; not usage, adoption or measured growth. The latest repository release may concern a different package.
  • Repository interest and release activity do not establish reliability, model quality or safety. The evaluation names the exact version and conditions tested.

What we reviewed

  • Official documentation, current package identity, access model and license.
  • Bounded runtime and security fixtures are recorded separately below.

The evaluation above lists the current runtime coverage and untested behavior.

Source review

Reviewed Oct 18, 2026. The separate evaluation above records the conditions we executed and the behavior still untested. Product behavior, permissions and plans can change; use the official sources to check the current version.

Read the ranking and review method →

Follow the evidence

Official sources.

  1. Memory reference documentation ↗github.com
  2. Current reference-server status ↗github.com
  3. License terms ↗github.com
  4. Implementation ↗github.com