Graph memory that dreams: Neo4j knowledge-graph memory for AI agents with hybrid search
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Reverie is KnowAll AI's Neo4j knowledge-graph memory for AI agents, served over MCP. Until @knowall-ai/reverie is published to npm, install the legacy package @knowall-ai/mcp-neo4j-agent-memory (0.2.x). The GitHub repository is now knowall-ai/mcp-reverie, and old URLs redirect.

Reverie turns an agent's memory from a pile of facts into a map of the entities in its world and how they relate, and keeps that map healthy. It is an MCP server, so any agent that speaks the Model Context Protocol (Claude Desktop, OpenClaw, Azure AI Foundry, Cursorβ¦) gets the same graph; a Hermes Agent memory-provider flavour lives in hermes-reverie.
dream tool merges duplicates safely, canonicalises labels, re-embeds, counts orphans and flags nodes that have become property dumps, so a nightly job can keep the graph clean.You can run this MCP server directly using npx:
Or add it to your Claude Desktop configuration:
Unlike traditional approaches that embed complex logic in tools, this server provides simple, atomic operations and lets the LLM handle all the intelligence:
search_memories is hybrid: keyword hits (any word of the query as a substring of any searchable content property) rank first, then semantic matches above a similarity threshold. See Search below.
This approach makes the system more powerful and adaptable, as improvements in LLM capabilities directly translate to better memory management.
search_memories now supports three modes:
hybrid (default): keyword hits score 1, then semantic matches add close variants such as Benjamin Weeks for Ben Weekskeyword: any word of the query as a substring of any searchable content property (timestamps, status and embedding fields are never matched)semantic: uses embeddings only when available, with graceful fallback to keyword behavior if embeddings are unavailableexact: case-insensitive equality on name, aliases or email; the precise lookup to run before creating a memory, so "ben weeks" finds exactly "Ben Weeks" and nothing elseArchived memories (status = 'archived') are left out of results and of list_memory_labels unless include_archived: true is passed. Returned relationships carry _start and _end node ids, so a connection's direction is always recoverable.
Use similarity_threshold (default 0.4; must be between 0 and 1, other values are rejected) to control how strict semantic matches are. Results include _score and _match on each returned memory object so callers can explain why a memory was returned.
This server now supports connecting to specific databases in Neo4j Enterprise Edition. By default, it connects to the "neo4j" database, but you can specify a different database using the NEO4J_DATABASE environment variable.
search_memories: Search and retrieve memories from the knowledge graph
Ben Weeks can also find Benjamin Weekssearch_mode = hybrid, keyword, or semanticsimilarity_threshold (default 0.4)_score and _match metadataperson and Person both work), date, depth, result limit, and sort ordercreate_memory: Create a new memory in the knowledge graph
dream canonicalises lowercase labelscreate_connection: Create relationships between memories
update_memory: Update properties of existing memories
_hint when the node exceeds the property limit: the graph is for entities and relationships, not a notebookupdate_connection: Update relationship properties
delete_memory: Remove memories and all their connections
delete_connection: Remove specific relationships
list_memory_labels: List all unique memory labels in use
query_memories: Run a read-only Cypher query
CALL subqueries, and any procedure outside a small read-only allow-list (db.labels, db.propertyKeys, db.index.*.query*, schema procedures). For belt and braces, run the server with a read-only Neo4j role where you canmemory_stats: Summarize the current graph
dream: Deterministically clean up and consolidate the graph
person β Person), merges same-named nodes within a label when APOC is available, and refreshes embeddingsname, timestamps and vectors and combines every other property (conflicting values become lists, nothing is dropped) and skips pairs whose identity fields differ (email, phone, website, company, organisation, organization), so two different "John Smith"s stay separate. The report lists every group under duplicates with what was merged and what was skipped and why. Run with dry_run: true first to reviewbloated nodes (more than REVERIE_MAX_PROPERTIES, default 30, real properties) with the keys that look like dated facts or prose, so a nightly sleep can fold them into attributes, relationships or notesdry_run for a no-write reportget_guidance: Get help on using the memory tools effectively
Neo4j Database 5.9 or newer (the dream tool uses COUNT {} and IS :: STRING); APOC for duplicate merging
docker run -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/password neo4jNode.js (v18 or higher)
Claude Desktop (for MCP integration)
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/reverie)<a href="https://allmcps.com/mcp/reverie"><img src="https://allmcps.com/api/badge/reverie?style=directory" alt="Reverie on AllMCPs" /></a>