Labsco
MCP SERVER

Neo4j

by cxt9

Run Cypher against Neo4j with read and write kept explicitly apart, and pick up different credentials per project from a local .env.

NoSQL, Graph & Key-Value Stores
Summary
Per-directory credentials, so one install covers every project.

Most database servers make you register a new entry per database. Here the `.env` in whichever folder you opened decides the target, which means the plugin is installed once and the graph follows the project. The explicit read/write mode is the other good call — it means a destructive statement cannot slip through as a read because it happened to end in RETURN. The macOS PATH caveat in the troubleshooting section is real: GUI apps do not read your shell rc file, so install with pipx or into a system path.

What it is

A Neo4j MCP server that also ships as a Claude Code plugin. The design decision worth knowing: it inherits the client's working directory and loads a `.env` from there, so the same installed plugin talks to a different database depending on which project folder you opened. One consolidated query tool covers Cypher, with the read/write distinction as an explicit argument rather than something inferred from the statement.

What you get
  • Any Cypher query run with an explicit `mode` of read or write — write is required for CREATE, MERGE, SET and DELETE even when they also return rows — returning records, a record count, a truncation flag and statistics — `cypher_query`
  • The graph's labels, relationship types and property keys, which is where you start on a database you did not build — `get_database_schema`
  • A connectivity check returning the server agent string and Bolt protocol version, for when the failure is the connection rather than the query — `test_database_connection`
  • Full result serialization that preserves node and relationship `element_id`, labels, types and Neo4j temporal and spatial values, rather than flattening them to strings
  • A result-size guard with a truncation flag, so a runaway `MATCH (n)` returns a capped result you can see was capped — raise `limit` on the call or `NEO4J_DEFAULT_RESULT_LIMIT` in the environment
  • Two readable resources and a help prompt: `neo4j://schema`, `neo4j://connection` and `cypher_query_help`
Requirements

A reachable Neo4j database — local, Docker or Aura — and Python 3.10+. Install the package from a clone with `pip install -e .`, which puts a `neo4j-mcp-server` console script on your PATH; the plugin shells out to it by name, so it has to be there. Credentials come from environment variables or a `.env` in the working directory: `NEO4J_HOST`, `NEO4J_PORT`, `NEO4J_USERNAME`, `NEO4J_PASSWORD`, `NEO4J_DATABASE`, with `NEO4J_URI_SCHEME` and `NEO4J_ENCRYPTED` for Aura and TLS. Leave username and password blank for an unauthenticated local instance rather than setting them to defaults. Both stdio and SSE transports are supported.

Setup effort

One command plus a key — neo4j-mcp-server, then supply credentials