mcp-neo4j-cypher
io.github.neo4j-contrib/mcp-neo4j-cypher
About mcp-neo4j-cypher
mcp-neo4j-cypher is an MCP server published by the GitHub account neo4j-contrib. A simple Neo4j MCP server that allows you to run Cypher queries against a Neo4j database.
It runs on your own machine: your AI client starts it from the PyPI package mcp-neo4j-cypher at version 0.5.1.
It asks for one secret: NEO4J_PASSWORD. Give it a key with the least access that still works.
It also needs NEO4J_URI and NEO4J_USERNAME set before it starts.
Version 1.0.0 was published on 7 November 2025, and the source code is public, so you can read it before installing.
Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 0 warn, 0 fail, 2 info. How we check.
What it asks for
| Variable | Required | Secret | Description |
|---|---|---|---|
NEO4J_URI | Yes | No | Neo4j connection URI |
NEO4J_USERNAME | Yes | No | Neo4j username |
NEO4J_PASSWORD | Yes | Yes | Neo4j password |
NEO4J_DATABASE | No | No | Neo4j database name |
NEO4J_NAMESPACE | No | No | Tool namespace prefix |
NEO4J_RESPONSE_TOKEN_LIMIT | No | No | Maximum tokens for read query responses |
NEO4J_READ_TIMEOUT | No | No | Timeout in seconds for read queries |
NEO4J_READ_ONLY | No | No | Allow only read-only queries (true/false) |
NEO4J_SCHEMA_SAMPLE_SIZE | No | No | Schema sample size |
Checks
| Check | Result | Detail |
|---|---|---|
| Source repository linked | Pass | https://github.com/neo4j-contrib/mcp-neo4j |
| Version pinned | Pass | Every package has an explicit version |
| Secrets requested | Info | Asks for 1 secret: NEO4J_PASSWORD |
| Known package registry | Pass | All packages come from npm, PyPI, OCI, NuGet or MCPB |
| Namespace ownership | Info | Name verified via GitHub account neo4j-contrib |
| Registry text aimed at the AI | Pass | Description and settings contain no hidden characters or instructions to the AI |
| Install scripts | Pass | mcp-neo4j-cypher 0.5.1 has no setup.py; nothing runs at install |
| Code red flags | Pass | Read 18 files in mcp-neo4j-cypher 0.5.1: no obfuscation, encoded execution, credential reads or data-collection endpoints found |
| Text aimed at the AI | Pass | No hidden characters or instructions to the AI in 18 files, including comments and the README |
Code review: Pass, with notes
We read all 821 lines in 3 files of mcp-neo4j-cypher 0.5.1 on 2026-10-31, without running it.
Lets an AI read your Neo4j graph schema and run Cypher queries against the database you configure. It only talks to that database (plus a one-time tokenizer download if you set a token limit) and has no telemetry. Write access is on by default, and the write tool can change or delete anything without asking, so start it with --read-only unless you want the AI to edit your graph.
What we found
- Note Read-only mode is off by default, so write_neo4j_cypher is available and runs any write Cypher (including DETACH DELETE of the whole graph) without confirmation. Set --read-only / NEO4J_READ_ONLY=true to remove the tool.
mcp_neo4j_cypher/utils.py:282-297; server.py:225-269 - Note read_neo4j_cypher blocks writes with a keyword regex (MERGE/CREATE/SET/DELETE/...) and also runs the query with RoutingControl.READ, so Neo4j's read access mode is the real enforcement. Read queries can still use LOAD CSV FROM 'http://...' or read-mode APOC procedures, which make the Neo4j server fetch arbitrary URLs.
mcp_neo4j_cypher/server.py:32-37,194-205 - Note On error, the full query and its params are logged and echoed back in the tool error. Sensitive parameter values would appear in logs.
mcp_neo4j_cypher/server.py:218-223,264-269 - Info sample_size is formatted into the APOC call, but it is a pydantic int, so this is not injectable.
mcp_neo4j_cypher/server.py:84 - Info HTTP/SSE mode binds 127.0.0.1 by default, has TrustedHost (localhost only) and CORS (no origins) middleware, but no authentication.
mcp_neo4j_cypher/server.py:274-343 - Info Falls back to the password 'password' when none is given (logs a warning).
mcp_neo4j_cypher/utils.py:89-99 - Info --token-limit is parsed as a string (no type=int), so using it from the CLI would raise a TypeError at truncation. This is a bug, not a security issue. server.py:347 calls async main() without arguments (dead code).
mcp_neo4j_cypher/__init__.py:45; utils.py:250-251,408 - Info pyproject.toml was not among the reviewed files; dependencies listed come from imports. Line counts use the manifest convention (newline count + 1 per file, i.e. the empty segment after a final newline is counted); every line of every file was read with the Read tool.
(package)
| Talks to | the configured Neo4j server (NEO4J_URL/NEO4J_URI, default bolt://localhost:7687): Cypher queries and params, username/password (on tool calls (driver connects lazily)) openaipublic.blob.core.windows.net (tiktoken encoding download): a download request for the gpt-4 tokenizer file; no user data (only if NEO4J_RESPONSE_TOKEN_LIMIT/--token-limit is set, on the first read query, unless the tiktoken cache already has the file (dependency behaviour)) |
|---|---|
| Keys and settings | NEO4J_URL / NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, NEO4J_DATABASE: the configured Neo4j serverNEO4J_NAMESPACE, NEO4J_TRANSPORT, NEO4J_MCP_SERVER_HOST/PORT/PATH, NEO4J_MCP_SERVER_ALLOW_ORIGINS, NEO4J_MCP_SERVER_ALLOWED_HOSTS, NEO4J_RESPONSE_TOKEN_LIMIT, NEO4J_READ_TIMEOUT, NEO4J_READ_ONLY, NEO4J_SCHEMA_SAMPLE_SIZE: not sent; local settings |
| Files on your machine | None by the package itself (no file reads or writes). tiktoken may cache its tokenizer file locally. |
| Runs programs | None. No shell, eval or dynamic imports. |
| Telemetry | None. |
| Tools | get_neo4j_schema, read_neo4j_cypher, write_neo4j_cypher (hidden when --read-only / NEO4J_READ_ONLY=true) |
| Tool descriptions | clean (short accurate descriptions; no hidden or invisible text) |
This covers the package's own code only, not the 6 packages it depends on (fastmcp, mcp, neo4j, pydantic, starlette, tiktoken). A new version drops this review until we read it again.
Popularity & health: 76 / 100
Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.
263 forks, 175 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.
What people say
No Hacker News threads link to its source code.
Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.
Facts
| Registry name | io.github.neo4j-contrib/mcp-neo4j-cypher |
|---|---|
| Publisher | GitHub account neo4j-contrib |
| How the name is verified | Name verified via GitHub account neo4j-contrib. The registry ties the name prefix to that account or domain; it does not check the code. |
| Type | Local: runs on your machine from a package |
| Packages | pypi mcp-neo4j-cypher 0.5.1 (stdio) |
| Version | 1.0.0 |
| Published | |
| Last updated | |
| Source repository | https://github.com/neo4j-contrib/mcp-neo4j |
| Website | None linked |
| Category | Databases & data (assigned by keyword rule, not by hand) |
Related servers in Databases & data
- ArcadeDB2/2Multi-Model database with built-in MCP server for SQL, Cypher,…
- pgport7/7Read-only SQL queries against a PostgreSQL database.
- custom-mcp-database7/7Run alias-based queries against PostgreSQL, MySQL, MongoDB and…
Grain SQL7/7Run SQL queries and inspect database schemas through safe, visible…
Notion7/7Search, read and write your Notion workspaces, with pages as…- LINQ to DB4/4Inspect database schemas and execute SQL queries across multiple…