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.
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.
- Create named project and decision entities.
- Store a short observation with its source or approval context.
- 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.
- Create each component before creating relationships.
- Add narrowly scoped observations.
- 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.
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.
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.
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.
Follow the evidence
Official sources.
- Memory reference documentation ↗github.com
- Current reference-server status ↗github.com
- License terms ↗github.com
- Implementation ↗github.com