Skip to main content
Glama
neo4j-labs

io.github.neo4j-labs/neo4j-mcp-canary

Official
by neo4j-labs

Neo4j MCP Canary — El canario va primero para que el resto sepamos lo que viene

Neo4j MCP Canary es una versión experimental y de evolución rápida del servidor MCP de Neo4j para clientes que quieren explorar capacidades emergentes antes de que se consideren para el servidor oficial.

Construida sobre el código fuente del servidor oficial del Model Context Protocol (MCP) para Neo4j, esta variante está aquí para explorar posibles capacidades nuevas mediante experimentación.

Al ser un proyecto de laboratorio, ten en cuenta que:

  • No cuenta con soporte.

  • Puede contener cambios incompatibles entre sus propias versiones y con el servidor oficial de Neo4j MCP.

  • Debe probarse antes de usarse.

Eres bienvenido a contribuir — siempre estamos abiertos a nuevas ideas, especialmente en este canal canario.

No des por hecho que el canario funcionará en tu situación. Prueba primero.

Requisitos previos

  • Una instancia de base de datos Neo4j en ejecución; las opciones incluyen Aura, Neo4j Desktop o autogestionada.

  • El plugin APOC instalado en la instancia de Neo4j (obligatorio: get-schema usa apoc.meta.schema).

  • Cualquier cliente compatible con MCP (p. ej. VSCode con soporte MCP).

⚠️ Problema conocido: Neo4j 5.26.18 tiene un error en APOC que hace que la herramienta get-schema falle. Esto se corrige en 5.26.19 y versiones posteriores. Si estás en 5.26.18, actualiza. Consulta #136 para más detalles.

Related MCP server: FastMCP Production-Ready Server

Comprobaciones de inicio y funcionamiento adaptativo

El servidor realiza varias comprobaciones previas al inicio para asegurarse de que tu entorno está configurado correctamente.

Modo STDIO — requisitos obligatorios

En modo STDIO, el servidor verifica lo siguiente. Si falla alguna comprobación (p. ej. configuración no válida, credenciales incorrectas, APOC ausente), el servidor no se iniciará:

  • Una conexión válida a tu instancia de Neo4j.

  • La capacidad de ejecutar consultas.

  • La presencia del plugin APOC.

Modo HTTP — verificación omitida

En modo HTTP, las comprobaciones de verificación de inicio se omiten porque las credenciales provienen de los encabezados de autenticación de cada solicitud. El servidor se inicia inmediatamente sin conectarse a Neo4j. La única excepción es el modo Query API: su comprobación de versión mínima se ejecuta al inicio en ambos modos de transporte, ya que solo necesita un GET sin autenticación y no depende de credenciales por solicitud.

Requisitos opcionales

Si falta una dependencia opcional, el servidor se inicia en modo adaptativo. Por ejemplo, si no se detecta la librería Graph Data Science (GDS), el servidor se lanza igualmente, pero desactiva automáticamente las herramientas dependientes de GDS, como list-gds-procedures. El resto de herramientas siguen disponibles.

Instalación (binario)

Lanzamientos: https://github.com/neo4j-labs/neo4j-mcp-canary/releases

  1. Descarga el archivo comprimido para tu sistema operativo/arquitectura.

  2. Extrae y coloca neo4j-mcp-canary en tu PATH.

Mac / Linux:

En Mac, es posible que se te avise la primera vez que intentes ejecutar el binario. Si es así, apruébalo mediante Ajustes del Sistema → Privacidad y seguridad.

chmod +x neo4j-mcp-canary
sudo mv neo4j-mcp-canary /usr/local/bin/

Windows (PowerShell / cmd):

move neo4j-mcp-canary.exe C:\Windows\System32

Verifica la instalación:

neo4j-mcp-canary -v

Debería imprimir la versión instalada.

Compilación desde el código fuente

Requiere Go 1.25.3+ (consulta go.mod).

Compila para tu plataforma actual con Task:

task build

Esto produce bin/neo4j-mcp-canary. Sin Task, el equivalente es:

go build -C cmd/neo4j-mcp -o ../../bin/

Compilación cruzada para macOS / Linux

Compila de forma cruzada estableciendo GOOS/GOARCH y desactivando cgo (el código es Go puro, por lo que CGO_ENABLED=0 produce un binario totalmente estático sin dependencias de ejecución en la máquina de destino):

CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_darwin_amd64
CGO_ENABLED=0 GOOS=darwin  GOARCH=arm64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_darwin_arm64
CGO_ENABLED=0 GOOS=linux   GOARCH=amd64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_linux_amd64
CGO_ENABLED=0 GOOS=linux   GOARCH=arm64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_linux_arm64

Para incrustar una versión en el binario (-v / --version), pasa una anulación de ldflags — esto es lo que hace la canalización de lanzamiento para las compilaciones etiquetadas:

go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary \
  -ldflags "-X 'main.Version=$(git rev-parse --short HEAD)'"

Sin ello, Version toma por defecto el valor "development", lo que también desactiva la telemetría independientemente de NEO4J_TELEMETRY (consulta Telemetría).

Los archivos de lanzamiento oficiales multiplataforma (incluido Windows) los genera GoReleaser según .goreleaser.yaml — consulta Instalación (binario) para descargarlos en lugar de compilarlos localmente.

Modos de transporte

El servidor Neo4j MCP Canary admite dos modos de transporte:

  • STDIO (predeterminado): comunicación MCP estándar a través de stdin/stdout para clientes de escritorio (Claude Desktop, VSCode).

  • HTTP: servidor HTTP RESTful con token Bearer por solicitud o autenticación básica para clientes basados en web y escenarios multiinquilino. Cuando no se puede usar el encabezado Authorization estándar, se puede configurar un nombre de encabezado personalizado.

Diferencias clave

Aspecto

STDIO

HTTP

Verificación de inicio

Obligatoria — el servidor verifica APOC, conectividad y consultas

Omitida — el servidor se inicia inmediatamente

Credenciales

Se establecen mediante variables de entorno

Por solicitud mediante token Bearer o encabezados de autenticación básica

Telemetría

Recopila la versión de Neo4j, la edición y la versión de Cypher al inicio

Informa unknown-http-mode — las credenciales por solicitud impiden la introspección

Consulta la Guía de configuración del cliente para obtener instrucciones de configuración para ambos modos.

Solicitudes de cliente MCP sin autenticación

De forma predeterminada, hay cuatro solicitudes que un cliente MCP puede enviar sin autenticación cuando usa el transporte HTTP(S). Algunas integraciones (AWS AgentCore, AWS Gateway, etc.) dependen de esto como mecanismo inicial de comprobación de estado:

  • ping

  • initialize

  • tools/list

  • notifications/initialize

Si no las necesitas, aplica la autenticación individualmente mediante las variables siguientes.

Variable de entorno

Indicador de CLI

Predeterminado

Propósito

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_PING

--neo4j-http-allow-unauthenticated-ping

true

Permitir comprobaciones de estado ping sin autenticación

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_TOOLS_LIST

--neo4j-http-allow-unauthenticated-tools-list

true

Permitir el listado de herramientas sin autenticación

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_INITIALIZE

--neo4j-http-allow-unauthenticated-initialize

true

Permitir initialize sin autenticación

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_NOTIFICATIONS_INITIALIZE

--neo4j-http-allow-unauthenticated-notifications-initialize

true

Permitir notifications/initialize sin autenticación

Configuración TLS/HTTPS

Cuando uses el transporte HTTP, habilita TLS para una comunicación segura mediante las variables siguientes.

Variable de entorno

Indicador de CLI

Predeterminado

Propósito

NEO4J_MCP_HTTP_TLS_ENABLED

--neo4j-http-tls-enabled

false

Habilitar TLS/HTTPS

NEO4J_MCP_HTTP_TLS_CERT_FILE

--neo4j-http-tls-cert-file

Ruta al certificado TLS (obligatorio con TLS)

NEO4J_MCP_HTTP_TLS_KEY_FILE

--neo4j-http-tls-key-file

Ruta a la clave privada TLS (obligatorio con TLS)

NEO4J_MCP_HTTP_PORT

--neo4j-http-port

443 con TLS, 80 sin TLS

Puerto del servidor HTTP

NEO4J_HTTP_AUTH_HEADER_NAME

--neo4j-http-auth-header-name

Authorization

Nombre del encabezado del que leer las credenciales

Configuración de seguridad

  • Versión mínima de TLS: TLS 1.2 (se negocia TLS 1.3 cuando está disponible)

  • Conjuntos de cifrado: los conjuntos de cifrado seguros predeterminados de Go

  • Puerto predeterminado: usa automáticamente el 443 cuando TLS está habilitado

Ejemplo

export NEO4J_URI="bolt://localhost:7687"
export NEO4J_TRANSPORT_MODE="http"
export NEO4J_MCP_HTTP_TLS_ENABLED="true"
export NEO4J_MCP_HTTP_TLS_CERT_FILE="/path/to/cert.pem"
export NEO4J_MCP_HTTP_TLS_KEY_FILE="/path/to/key.pem"

neo4j-mcp-canary
# Server listens on https://127.0.0.1:443 by default

Uso en producción: usa certificados de una CA de confianza (Let's Encrypt, la CA de tu organización, etc.) para despliegues en producción.

Para obtener instrucciones detalladas sobre generación de certificados, pruebas de TLS y despliegue en producción, consulta CONTRIBUTING.md.

Opciones de configuración

El servidor neo4j-mcp-canary se configura mediante variables de entorno, indicadores de CLI y/o un archivo de configuración opcional. Los indicadores de CLI tienen prioridad sobre las variables de entorno, y estas la tienen sobre un archivo de configuración opcional.

Variables de entorno

Conexión principal y comportamiento:

Variable de entorno

Predeterminado

Propósito

NEO4J_URI

URI de conexión a Neo4j (obligatoria)

NEO4J_USERNAME

Nombre de usuario de la base de datos (obligatorio en modo STDIO; debe estar sin definir en modo HTTP)

NEO4J_PASSWORD

Contraseña de la base de datos (obligatoria en modo STDIO; debe estar sin definir en modo HTTP)

NEO4J_DATABASE

neo4j

Nombre de la base de datos

NEO4J_READ_ONLY

false

Cuando es true, la herramienta write-cypher no se registra

NEO4J_TELEMETRY

true

Habilitar/deshabilitar la telemetría anónima

NEO4J_SCHEMA_SAMPLE_SIZE

1000

Nodos por etiqueta que APOC examina al inferir el esquema

NEO4J_LOG_LEVEL

info

debug, info, notice, warning, error, critical, alert, emergency

NEO4J_LOG_FORMAT

text

text o json

NEO4J_OUTPUT_FORMAT

json

Formato de respuesta de las herramientas enviado al cliente LLM: json o toon

NEO4J_TRANSPORT_MODE

stdio

stdio o http (sustituye al obsoleto NEO4J_MCP_TRANSPORT)

Conexión a través de la Query API en lugar de Bolt

El esquema de NEO4J_URI determina qué protocolo de red usa el servidor para comunicarse con Neo4j — no se necesita ningún indicador adicional.

  • bolt://, bolt+s://, neo4j://, neo4j+s://, etc. → el controlador Bolt (predeterminado, comportamiento sin cambios).

  • http:// o https:// → la Neo4j Query API, la interfaz de consultas basada en HTTP de Neo4j. Útil para despliegues que solo exponen HTTP o que prefieren no usar Bolt.

Query API mode requires Neo4j 2026.07 or newer (calendar-versioned releases) or 5.27-aura or newer (classic-versioned Aura releases only — a bare classic version with no -aura suffix is not supported). This floor is one release past the Query API's own general availability (2026.06): read-cypher's write-query rejection depends on the queryType field in the query response, which Neo4j only introduced in 2026.07 — a 2026.06 server has no reliable signal to classify a query as read-only before running it. The server checks the connected instance's reported version against this floor at startup (via an unauthenticated GET to the base URI) and refuses to start if it's too old, with an error naming the version it found and the minimum required.

NEO4J_USERNAME/NEO4J_PASSWORD and per-request Basic/Bearer credentials work the same way in Query API mode as they do for Bolt — see Transport Modes and Authentication Methods (HTTP Mode).

Cypher execution safeguards (see Cypher Execution Safeguards):

Environment Variable

Default

Purpose

NEO4J_CYPHER_MAX_ROWS

1000

Per-call row cap on read-cypher / write-cypher; 0 disables

NEO4J_CYPHER_MAX_BYTES

900000

Per-call byte cap (~900 KB) on the response envelope; 0 disables

NEO4J_CYPHER_TIMEOUT

30

Execution timeout in seconds; 0 disables

NEO4J_CYPHER_MAX_ESTIMATED_ROWS

1000000

EXPLAIN-time planner estimate above which read-cypher refuses a query; 0 disables

HTTP transport, TLS, and auth (see tables above).

CLI Flags

You can override any environment variable using CLI flags:

neo4j-mcp-canary \
  --neo4j-uri "bolt://localhost:7687" \
  --neo4j-username "neo4j" \
  --neo4j-password "password" \
  --neo4j-database "neo4j" \
  --neo4j-read-only false \
  --neo4j-telemetry true

Available flags:

Connection & behaviour

  • --neo4j-uri — overrides NEO4J_URI

  • --neo4j-username — overrides NEO4J_USERNAME

  • --neo4j-password — overrides NEO4J_PASSWORD

  • --neo4j-database — overrides NEO4J_DATABASE

  • --neo4j-read-only — overrides NEO4J_READ_ONLY (true / false)

  • --neo4j-telemetry — overrides NEO4J_TELEMETRY (true / false)

  • --neo4j-schema-sample-size — overrides NEO4J_SCHEMA_SAMPLE_SIZE

  • --neo4j-output-format — overrides NEO4J_OUTPUT_FORMAT (json / toon)

Cypher execution safeguards

  • --neo4j-cypher-max-rows — overrides NEO4J_CYPHER_MAX_ROWS (0 disables)

  • --neo4j-cypher-max-bytes — overrides NEO4J_CYPHER_MAX_BYTES (0 disables)

  • --neo4j-cypher-timeout — overrides NEO4J_CYPHER_TIMEOUT (seconds; 0 disables)

  • --neo4j-cypher-max-estimated-rows — overrides NEO4J_CYPHER_MAX_ESTIMATED_ROWS (0 disables)

Transport / HTTP

  • --neo4j-transport-modestdio or http

  • --neo4j-http-host — overrides NEO4J_MCP_HTTP_HOST

  • --neo4j-http-port — overrides NEO4J_MCP_HTTP_PORT

  • --neo4j-http-allowed-origins — overrides NEO4J_MCP_HTTP_ALLOWED_ORIGINS (comma-separated CORS origins)

  • --neo4j-http-tls-enabled — overrides NEO4J_MCP_HTTP_TLS_ENABLED

  • --neo4j-http-tls-cert-file — overrides NEO4J_MCP_HTTP_TLS_CERT_FILE

  • --neo4j-http-tls-key-file — overrides NEO4J_MCP_HTTP_TLS_KEY_FILE

  • --neo4j-http-auth-header-name — overrides NEO4J_HTTP_AUTH_HEADER_NAME

  • --neo4j-http-allow-unauthenticated-ping — overrides NEO4J_HTTP_ALLOW_UNAUTHENTICATED_PING

  • --neo4j-http-allow-unauthenticated-tools-list — overrides NEO4J_HTTP_ALLOW_UNAUTHENTICATED_TOOLS_LIST

  • --neo4j-http-allow-unauthenticated-initialize — overrides NEO4J_HTTP_ALLOW_UNAUTHENTICATED_INITIALIZE

  • --neo4j-http-allow-unauthenticated-notifications-initialize — overrides NEO4J_HTTP_ALLOW_UNAUTHENTICATED_NOTIFICATIONS_INITIALIZE

Run neo4j-mcp-canary --help to see the complete list with descriptions.

Configuration File

As a lowest-priority alternative to environment variables, neo4j-mcp-canary can read configuration from an optional JSON or YAML file:

neo4j-mcp-canary --config-file /etc/neo4j-mcp/config.yaml
# or
NEO4J_CONFIG_FILE=/etc/neo4j-mcp/config.yaml neo4j-mcp-canary

Keys are the lower-cased form of the environment variable they correspond to:

neo4j_uri: bolt://localhost:7687
neo4j_username: neo4j
neo4j_password: password
neo4j_read_only: false
neo4j_transport_mode: http
neo4j_http_tls_enabled: true
neo4j_cypher_max_rows: 500

The equivalent JSON is also accepted (.json extension). Only scalar values (strings, numbers, booleans) are supported — a nested object or list is a startup error. Values from CLI flags or environment variables always take precedence over the config file; a --config-file that fails to read or parse is a startup error.

Adding a new configuration parameter to the server (env var + CLI flag + config-file key, all at once) means adding one entry to the fields slice in internal/config/schema.go — see that file's doc comments for the shape.

Response Format (JSON vs TOON)

Tool responses (read-cypher, write-cypher, get-schema, list-gds-procedures) are rendered as JSON by default. Set NEO4J_OUTPUT_FORMAT (or --neo4j-output-format) to toon to render them as TOON (Token-Oriented Object Notation) instead — a compact, still human-readable format that cuts LLM token usage versus JSON, especially for the tabular row shapes these tools return:

neo4j-mcp-canary --neo4j-output-format toon
# or
NEO4J_OUTPUT_FORMAT=toon neo4j-mcp-canary

A read-cypher result as JSON:

{
  "rows": [
    { "name": "Alice", "age": 30 },
    { "name": "Bob", "age": 25 }
  ],
  "rowCount": 2,
  "truncated": false
}

The same result as TOON:

rowCount: 2
rows[2]{age,name}:
  30,Alice
  25,Bob
truncated: false

An invalid value falls back to json with a warning on stderr, the same way NEO4J_LOG_FORMAT does.

Cypher Execution Safeguards

read-cypher and write-cypher are protected by four layered safeguards that together keep an overeager LLM from hanging the MCP transport or exhausting the database. Each layer catches a different failure mode; together they act as defence in depth.

Layer

Setting

Default

When it fires

Planner estimate

NEO4J_CYPHER_MAX_ESTIMATED_ROWS

1000000

Before execution — query refused if the planner's root EstimatedRows exceeds the threshold

Execution timeout

NEO4J_CYPHER_TIMEOUT

30s

During execution — query cancelled after the deadline

Row cap

NEO4J_CYPHER_MAX_ROWS

1000

During streaming — response truncated at the row limit

Byte cap

NEO4J_CYPHER_MAX_BYTES

900000

During streaming — response truncated when the envelope grows past ~900 KB

Set any value to 0 to disable that specific layer.

Truncation envelope

When either the row cap or the byte cap fires, the tool returns the rows it has already collected plus a truncation envelope:

{
  "rows": [ /* ... */ ],
  "rowCount": 1000,
  "truncated": true,
  "truncationReason": "rows",
  "maxRows": 1000,
  "hint": "Results were truncated at 1000 rows. Add a LIMIT clause or a more selective filter and retry for a complete result."
}

Callers (including LLM agents) can read truncated / truncationReason / hint programmatically and retry with a tighter query rather than seeing an opaque transport-level failure.

Timeout and cancellation errors

When NEO4J_CYPHER_TIMEOUT fires, the tool returns a classified error that names the configured limit and offers tool-specific remediation (bound variable-length patterns, add WHERE filters, or LIMIT for read-cypher; reduce batch size, narrow the MATCH, or use apoc.periodic.iterate for write-cypher). Caller cancellation (as distinct from timeout) surfaces as a concise cancelled message without remediation guidance.

Planner estimate refusal

The planner-estimate guard reads the root EstimatedRows of an EXPLAIN plan before the query runs. Because Neo4j folds LIMIT into the root estimate, a legitimate MATCH ... LIMIT 100 query passes cleanly with an estimate of ~100, while a bare MATCH on a multi-million-row label is refused before it starts.

Authentication Methods (HTTP Mode)

When using HTTP transport mode, the Neo4j MCP Canary server supports two authentication methods to accommodate different deployment scenarios.

Bearer Token Authentication

Bearer token authentication enables seamless integration with Neo4j Enterprise Edition and Neo4j Aura environments that use SSO/OAuth/OIDC for identity management. This method is ideal for:

  • Enterprise deployments with centralised identity providers (Okta, Azure AD, etc.)

  • Neo4j Aura databases configured with SSO

  • Organisations requiring OAuth 2.0 compliance

  • Multi-factor authentication scenarios

Example:

curl -X POST http://localhost:8080/mcp \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

The bearer token is obtained from your identity provider and passed to Neo4j for authentication. The MCP server acts as a pass-through, forwarding the token to Neo4j's authentication system.

Basic Authentication

Traditional username/password authentication suitable for:

  • Neo4j Community Edition

  • Development and testing environments

  • Direct database credentials without SSO

Example:

curl -X POST http://localhost:8080/mcp \
  -u neo4j:password \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

Client Configuration

To configure MCP clients (VSCode, Claude Desktop, etc.) to use the Neo4j MCP Canary server, see:

📘 Client Setup Guide – Complete configuration for STDIO and HTTP modes.

Tools & Usage

Provided tools:

Tool

ReadOnly

Purpose

Notes

get-schema

true

Introspect labels, relationship types, property keys

Uses apoc.meta.schema. Sampling controlled by NEO4J_SCHEMA_SAMPLE_SIZE.

read-cypher

true

Execute arbitrary read-only Cypher

Rejects writes, schema/admin DDL, EXPLAIN, and PROFILE. See Cypher Execution Safeguards.

write-cypher

false

Execute arbitrary Cypher (write mode)

Caution: LLM-generated queries can cause harm. Use only in development environments. Not registered when NEO4J_READ_ONLY=true.

list-gds-procedures

true

List GDS procedures available in the Neo4j instance

Disabled automatically if GDS is not installed.

give-feedback

true

Submit free-text feedback about the MCP server itself

For feedback on the server (tools, behaviour, docs), not on Cypher/database issues. Limited to 300 characters. See Feedback.

Read-only mode flag

Enable read-only mode by setting NEO4J_READ_ONLY=true (accepted: true / false; default: false).

You can also use the CLI flag:

neo4j-mcp-canary \
  --neo4j-uri "bolt://localhost:7687" \
  --neo4j-username "neo4j" \
  --neo4j-password "password" \
  --neo4j-read-only true

When enabled, write tools (e.g. write-cypher) are not exposed to clients.

Query classification

read-cypher prepends EXPLAIN to the caller's query to classify it as read or write before executing. Consequences:

  • Operaciones de escritura (CREATE, MERGE, DELETE, SET, REMOVE, ...) — rechazadas con un mensaje que dirige al llamante a write-cypher.

  • Operaciones de esquema/DDL (CREATE INDEX, DROP CONSTRAINT, ...) — rechazadas, mismo mensaje.

  • Comandos de administración (SHOW USERS, SHOW DATABASES, ...) — rechazados, mismo mensaje.

  • Prefijo EXPLAIN — rechazado con un mensaje específico que indica que la protección contra consultas descontroladas ya la proporcionan el guardián de estimación del planificador y el tiempo de espera de ejecución, y que apunta a write-cypher para un plan perfilado.

  • Prefijo PROFILE — rechazado con un mensaje que dirige al llamante a write-cypher.

  • Comandos SHOW de solo lectura (SHOW INDEXES, SHOW CONSTRAINTS, SHOW PROCEDURES, SHOW FUNCTIONS) — permitidos.

Si la consulta envuelta produce un error de sintaxis, el servidor elimina el prefijo interno EXPLAIN del texto del error, del desplazamiento de columna y de la alineación del cursor antes de devolverlo, de modo que el error se lea como si la consulta original del llamante se hubiera enviado directamente.

Formato de respuesta para read-cypher / write-cypher

Los tipos del driver se envuelven en estructuras JSON en camelCase que siguen las convenciones de Cypher:

  • Nodos: { "elementId": "...", "labels": [...], "properties": {...} }

  • Relaciones: { "elementId": "...", "startElementId": "...", "endElementId": "...", "type": "...", "properties": {...} }

  • Caminos: { "nodes": [...], "relationships": [...] }

  • Puntos: { "x": ..., "y": ..., "srid": ... } (y z para 3D)

  • Date / Time / DateTime / LocalTime / LocalDateTime / Duration: cadenas ISO 8601

Los identificadores numéricos obsoletos id / startId / endId no se exponen — elementId / startElementId / endElementId son los únicos identificadores devueltos.

Comentarios

give-feedback permite a un agente enviar comentarios de texto libre sobre el propio servidor MCP — positivos o negativos — como un único argumento de cadena feedback, limitado a 300 caracteres (aplicado tanto en el esquema de herramienta anunciado como por el manejador, en caso de que un cliente no valide el esquema antes de enviar). Está pensado para comentarios sobre las herramientas, el comportamiento o la documentación del servidor, no para informar de errores de Cypher o de la base de datos.

Los comentarios se envían como un evento de Mixpanel junto con la otra telemetría del servidor, por lo que solo se registran cuando la telemetría está activada (consulta Telemetría) — la llamada a la herramienta en sí siempre tiene éxito en cualquier caso.

Guía de uso

Lecciones de las pruebas canary que ayudan a un LLM (o a un humano) a sacar el máximo partido a read-cypher:

  1. Agrega en la base de datos. count, sum, avg, collect, reduce, percentileCont, stDev y reducciones similares se condensan en una sola fila y no se ven afectadas por el límite de filas. Una consulta como UNWIND range(1, 50000) AS i RETURN sum(i) se ejecuta sin problemas; el mismo rango transmitido fila a fila se trunca en el límite de filas.

  2. Usa siempre LIMIT en consultas exploratorias. El límite de filas truncará los resultados de un MATCH sin LIMIT; el campo hint del envoltorio de truncamiento indicará al llamante que añada un LIMIT. Prefiere un LIMIT que hayas elegido tú a uno impuesto por el servidor.

  3. Acota la proyección de RETURN para nodos con muchas propiedades. Cuando un registro contiene muchas propiedades (p. ej., un nodo Company completo con 19 campos), el límite de bytes se activa antes que el de filas. Devuelve solo los campos que necesites (RETURN c.name, c.companyNumber) en lugar del nodo completo.

  4. Usa parámetros, incluidos los mapas anidados. Los marcadores de posición de parámetros ($name) se vinculan desde el objeto params; el acceso anidado funciona ($config.thresholds.pr). La ausencia de parámetros obligatorios produce un error claro ParameterMissing; los parámetros adicionales se ignoran silenciosamente.

  5. Sé explícito con los tipos en las comparaciones. Las comparaciones entre tipos distintos, como t.amount > "foo", se evalúan como null y filtran silenciosamente todo — sin error, solo un conjunto de resultados vacío. Valida los tipos de los parámetros entrantes en el lado del llamante cuando la forma del resultado te sorprenda.

  6. SHOW INDEXES / SHOW CONSTRAINTS están permitidos. Útiles antes de escribir una consulta que dependa de un índice, o para depurar por qué una coincidencia es lenta.

  7. EXPLAIN y PROFILE no se exponen en read-cypher. La protección contra consultas descontroladas ya la gestionan el guardián de estimación del planificador y el tiempo de espera de ejecución. Si necesitas un plan perfilado con estadísticas de ejecución, usa write-cypher con PROFILE.

  8. Cuidado con las cargas útiles duplicadas al devolver caminos. RETURN p, nodes(p), relationships(p) triplica la carga útil serializada. Devuelve el camino o sus componentes, no ambos.

  9. Las consultas de larga duración devuelven un error clasificado. Cuando NEO4J_CYPHER_TIMEOUT se activa, el error menciona el valor del tiempo de espera y sugiere medidas correctivas (acotar patrones de longitud variable, añadir filtros WHERE, usar LIMIT) en lugar de un context deadline exceeded crudo del driver.

  10. OPTIONAL MATCH para datos faltantes. Cuando se busca por ID y algunos IDs pueden no existir, OPTIONAL MATCH devuelve nulls para los que no se encuentran en lugar de eliminar filas — mejor para búsquedas por lotes.

  11. Los valores por defecto están calibrados, no son arbitrarios. La estimación del planificador de 1000 filas / ~900 KB / 30s / 1M cubre la gran mayoría de las consultas exploratorias y de producción. Auméntalos para cargas de trabajo de exportación masiva; redúcelos cuando atiendas despliegues de agentes de alto tráfico.

Ejemplos de prompts en lenguaje natural

Prompts para probar en Copilot o en cualquier otro cliente MCP:

  • "¿Qué contiene mi instancia de Neo4j? Enumera todas las etiquetas de nodo, los tipos de relación y las claves de propiedad."

  • "Encuentra todos los nodos Person y muestra sus relaciones principales, limitado a 50 resultados."

  • "¿Qué índices y restricciones existen en mi base de datos?"

  • "Resume el grafo de transacciones: recuento total, importe medio y los 5 clientes principales por PageRank."

Consejos de seguridad

  • Usa un usuario de Neo4j con permisos restringidos para la exploración.

  • Revisa el Cypher generado por LLM antes de ejecutarlo en bases de datos de producción.

  • Mantén NEO4J_READ_ONLY=true para cualquier despliegue que no deba mutar el grafo.

  • Deja las salvaguardas de Cypher en sus valores por defecto a menos que tengas una razón específica para cambiarlas.

Registro

El servidor utiliza registro estructurado con soporte para múltiples niveles de registro y formatos de salida.

Configuración

Nivel de registro (NEO4J_LOG_LEVEL, valor por defecto: info)

Controla la verbosidad. Soporta todos los niveles de registro de MCP: debug, info, notice, warning, error, critical, alert, emergency.

Formato de registro (NEO4J_LOG_FORMAT, valor por defecto: text)

  • text — legible para humanos (valor por defecto)

  • json — JSON estructurado (útil para la agregación de registros)

Telemetría

Por defecto, neo4j-mcp-canary recopila datos de uso anónimos para ayudar a mejorar el producto. Esto incluye información como las herramientas utilizadas, el sistema operativo y la arquitectura de la CPU. No se recopila información personal ni sensible.

Para desactivar la telemetría, establece NEO4J_TELEMETRY=false (valores aceptados: true / false; valor por defecto: true). También puedes usar la bandera de CLI --neo4j-telemetry.

Documentación

📘 Guía de configuración del cliente – Configura VSCode, Claude Desktop y otros clientes MCP (modos STDIO y HTTP) 📚 Guía de contribución – Flujo de trabajo de contribución, entorno de desarrollo, mocks y pruebas

Problemas / comentarios: abre un issue de GitHub con detalles de reproducción (omite datos sensibles).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables LLMs to perform semantic and fulltext searches within Neo4j while executing complex, search-augmented Cypher queries for GraphRAG applications. It provides tools for database schema discovery and supports multi-provider embeddings to facilitate advanced graph traversals.
    5
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server that enables users to interact with Neo4j databases through health checks and Cypher query tools. It features a structured, containerized architecture with built-in support for Azure deployments and environment-driven configuration.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Neo4j graph database operations, enabling Cypher queries, node/relationship management, and schema discovery.
    1
    BSD 3-Clause
  • A
    license
    Not graded
    quality
    C
    maintenance
    Production-ready MCP server for Neo4j graph databases, enabling natural language to Cypher query translation with enterprise security and async performance.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/neo4j-labs/neo4j-mcp-canary'

If you have feedback or need assistance with the MCP directory API, please join our Discord server