Neo4j GraphRAG MCP Server
The Neo4j GraphRAG MCP Server enables LLMs to interact with Neo4j databases through semantic search, fulltext search, graph traversal, and write operations for GraphRAG applications.
Schema Discovery (
get_neo4j_schema_and_indexes): Retrieve the graph schema, vector indexes, fulltext indexes, and property size warnings to guide efficient querying.Semantic Vector Search (
vector_search): Search Neo4j vector indexes using natural language queries embedded via LiteLLM (OpenAI, Azure, Bedrock, Cohere, Ollama, etc.), with support for pre-filtering by property values.Fulltext Keyword Search (
fulltext_search): Search fulltext indexes using Lucene query syntax, including boolean operators (AND/OR), wildcards, fuzzy matching, and exact phrases.Read-Only Cypher Queries (
read_neo4j_cypher): Execute arbitrary read-only Cypher queries with optional parameters.Search-Augmented Cypher Queries (
search_cypher_query): Combine vector and/or fulltext search with Cypher graph traversal using$vector_embeddingand$fulltext_textplaceholders for pattern matching, filtering, and aggregation.Write Cypher Queries (
write_neo4j_cypher): Execute write operations (CREATE, MERGE, SET, DELETE, etc.) with a summary of changes made.Multimodal Image Retrieval (
read_node_image): Retrieve base64-encoded images stored on Neo4j nodes as inline images, enabling visual analysis alongside node properties.
All responses include automatic sanitization and token-limit protection to ensure production-ready performance.
Supports Amazon Bedrock embedding models for performing search-augmented Cypher queries and vector searches.
Extends Neo4j databases with vector search, fulltext search, and the ability to execute read-only Cypher queries for GraphRAG applications.
Enables local semantic search capabilities by utilizing Ollama for embedding generation.
Integrates OpenAI embedding models to enable semantic similarity searches within Neo4j vector indexes.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Neo4j GraphRAG MCP ServerFind movies about space travel and list their directors and genres"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Neo4j GraphRAG MCP Server
An MCP server that extends Neo4j with vector search, fulltext search, search-augmented Cypher queries, write operations, and multimodal image retrieval for GraphRAG applications.
Inspired by the Neo4j Labs
mcp-neo4j-cypherserver. This server adds vector search, fulltext search, and the innovativesearch_cypher_querytool for combining search with graph traversal.
Overview
This server enables LLMs to:
π Search Neo4j vector indexes using semantic similarity
π Search fulltext indexes with Lucene syntax
β‘ Combine search with Cypher queries via
search_cypher_queryπΈοΈ Execute read-only Cypher queries
βοΈ Execute write Cypher queries (CREATE, MERGE, SET, DELETE)
πΌοΈ Retrieve images stored in Neo4j nodes (multimodal β returns the image directly to the LLM)
Built on LiteLLM for multi-provider embedding support (OpenAI, Azure, Bedrock, Cohere, etc.).
Related: For the official Neo4j MCP Server, see neo4j/mcp. For Neo4j Labs MCP Servers (Cypher, Memory, Data Modeling), see neo4j-contrib/mcp-neo4j.
Related MCP server: Neo4j YASS MCP
Installation
# Using pip
pip install mcp-neo4j-graphrag
# Using uv (recommended)
uv pip install mcp-neo4j-graphragConfiguration
Claude Desktop
Edit the configuration file:
macOS/Linux:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"neo4j-graphrag": {
"command": "uvx",
"args": ["mcp-neo4j-graphrag"],
"env": {
"NEO4J_URI": "neo4j+s://demo.neo4jlabs.com",
"NEO4J_USERNAME": "recommendations",
"NEO4J_PASSWORD": "recommendations",
"NEO4J_DATABASE": "recommendations",
"OPENAI_API_KEY": "sk-...",
"EMBEDDING_MODEL": "text-embedding-ada-002"
}
}
}
}Note:
uvxautomatically downloads and runs the package from PyPI. No local installation needed!
Cursor
Edit ~/.cursor/mcp.json or .cursor/mcp.json in your project. Use the same configuration as above.
Reload Configuration
Claude Desktop: Quit and restart the application
Cursor: Reload the window (Cmd/Ctrl + Shift + P β "Reload Window")
Tools
The examples below use the Neo4j demo recommendations database (movies, actors, directors), which is the same database referenced in the Configuration section above.
get_neo4j_schema_and_indexes
Discover the graph schema, vector indexes, and fulltext indexes.
π‘ The agent should automatically call this tool first before using other tools to understand the schema and indexes of the database.
Example prompt:
"What is inside the database?"
vector_search
Semantic similarity search using embeddings.
Parameters: text_query, vector_index, top_k, return_properties, pre_filter
Use pre_filter to restrict results to nodes matching exact property values (e.g. {"genre": "Drama"}).
Example prompt:
"What movies are about artificial intelligence?"
fulltext_search
Keyword search with Lucene syntax (AND, OR, wildcards, fuzzy).
Parameters: text_query, fulltext_index, top_k, return_properties
Example prompt:
"Find movies with 'space' or 'galaxy' in the title or plot"
read_neo4j_cypher
Execute read-only Cypher queries.
Parameters: query, params
Example prompt:
"Show me all genres and how many movies are in each"
search_cypher_query
Combine vector/fulltext search with Cypher queries. Use $vector_embedding and $fulltext_text placeholders.
Parameters: cypher_query, vector_query, fulltext_query, params
Example prompt:
"In one query, what are the directors and genres of the movies about 'time travel adventure'?"
write_neo4j_cypher
Execute write Cypher queries (CREATE, MERGE, SET, DELETE, etc.). Returns a summary of counters (nodes created, properties set, etc.).
Parameters: query, params
Example prompt:
"Add a user rating of 4.5 for the movie 'Inception'"
read_node_image
Retrieve a base64-encoded image stored on a Neo4j node and return it as an inline image. Useful for graph databases that store page scans, diagrams, or photos directly on nodes. The LLM receives both the image and selected node properties, enabling visual analysis of graph-stored content.
Parameters: node_element_id, image_property, mime_type, return_properties
Note: This tool requires a database that stores images directly on nodes (as base64). The demo
recommendationsdatabase does not β it stores external poster URLs instead. See docs/ADVANCED.md for a full example using a document graph where page images are embedded on nodes.
Example prompt:
"Show me page 3 of the AbbVie pipeline document and describe what you see"
Environment Variables
Variable | Required | Default | Description |
| Yes |
| Neo4j connection URI |
| Yes |
| Neo4j username |
| Yes |
| Neo4j password |
| No |
| Database name |
| No |
| Embedding model (see below) |
Embedding Providers
Set EMBEDDING_MODEL and the corresponding API key:
Provider | Model Format | API Key Variable |
OpenAI |
|
|
Azure |
|
|
Bedrock |
|
|
Cohere |
|
|
Ollama |
| (none - local) |
Advanced Topics
See docs/ADVANCED.md for:
Comparison with Neo4j Labs
mcp-neo4j-cypherserverProduction features (output sanitization, token limits)
Detailed tool documentation including
write_neo4j_cypher,read_node_image, andvector_searchfiltering
License
MIT License
Available Tools
5 toolsfulltext_searchFulltext SearchARead-onlyIdempotent
Performs fulltext search on a Neo4j fulltext index using Lucene query syntax.
Lucene Syntax Supported:
Boolean: "legal AND compliance", "privacy OR security"
Wildcards: "compli*", "te?t"
Fuzzy: "complience~"
Phrases: ""exact phrase""
Automatic Sanitization (always applied):
Large lists (β₯128 items) β replaced with placeholders
Large strings (β₯10K chars) β truncated with suffix
Total response limited to 8000 tokens (results dropped if needed)
Property Selection:
Default (no return_properties): Returns ALL properties (sanitized)
With return_properties: Returns ONLY specified properties
Example: return_properties="pageNumber,id" β returns only these two
Check get_neo4j_schema_and_indexes for property warnings to avoid large fields
Returns node/relationship IDs, labels/types, properties (sanitized), and relevance scores.
| Name | Required | Description | Default |
|---|---|---|---|
| text_query | Yes | The text query to search for. Supports Lucene query syntax (AND, OR, wildcards, fuzzy, etc.). | |
| fulltext_index | Yes | The name of the fulltext index to search. Use get_neo4j_schema_and_indexes to see available indexes. | |
| top_k | No | The number of most relevant results to return. | |
| return_properties | No | Optional: Comma-separated list of properties to return (e.g., "pageNumber,id"). If not specified, returns all properties with automatic sanitization (large values are truncated). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses substantial behavior: automatic sanitization of large lists/strings, a hard 8000-token response limit, and the difference in property return when return_properties is specified vs. not. It also clarifies that results may be dropped to enforce limits, which is critical for an agent to understand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Lucene syntax, sanitization, property selection, return format). Every section contributes essential information without fluff. Despite being longer than typical descriptions, it is appropriately sized for a tool with this many behavioral nuances, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description sufficiently explains return values (IDs, labels/types, properties, relevance scores). It also covers sanitization limits, property selection, and points to a sibling tool for index metadata. The description leaves few gaps for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all four parameters (100% coverage), so baseline is 3. The description adds meaningful semantics, especially for return_properties: it explains default behavior (returns all sanitized properties) and the effect of specifying a comma-separated list. The example 'pageNumber,id' further clarifies usage, exceeding baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Performs fulltext search on a Neo4j fulltext index using Lucene query syntax.' This precisely distinguishes it from sibling tools like vector_search (semantic search) and get_neo4j_schema_and_indexes (schema inspection), while also detailing supported query features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (fulltext search on a Neo4j index) and even directs users to get_neo4j_schema_and_indexes for property warnings and index names. However, it does not explicitly state when *not* to use it or contrast with alternatives like vector_search, leaving some ambiguity for an agent comparing search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_neo4j_schema_and_indexesGet Neo4j Schema & IndexesARead-onlyIdempotent
Returns Neo4j graph schema with search indexes and property size warnings.
IMPORTANT: Call this tool BEFORE using any search tools (vector_search, fulltext_search, search_cypher_query).
This tool provides:
Vector & fulltext indexes (for search)
Node/relationship schemas with property types
Warnings for large properties (helps choose efficient return_properties)
Property size warnings help you avoid token limits when using search tools. For example, if a property has warning "avg ~100-200KB", avoid returning it unless necessary.
You should only provide a sample_size value if requested by the user, or tuning performance.
| Name | Required | Description | Default |
|---|---|---|---|
| sample_size | No | The sample size used to infer the graph schema and property sizes. Larger samples are slower but more accurate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about sample_size affecting speed/accuracy and warns about token limits from large properties, going beyond the annotations. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded, followed by a bulleted breakdown and a concrete example. It is moderately concise and well-structured, though slightly verbose with some redundancy between the bullet points and the follow-up example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description conveys the key outputs (indexes, schemas, warnings) and explains why they matter. It gives enough context for an agent to understand when to call it, what to expect, and how to use sample_size effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides complete coverage of sample_size with a description of its effect on speed and accuracy. The description adds guidance on when to provide it (only if requested by user or for performance tuning), which is extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns Neo4j graph schema with search indexes and property size warnings. It uses a specific verb ('Returns') and resource ('Neo4j graph schema'), and distinguishes itself from sibling search tools by positioning itself as a prerequisite step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this tool BEFORE using vector_search, fulltext_search, or search_cypher_query, providing clear when-to-use guidance. It also explains how property size warnings help choose return_properties, reinforcing practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_neo4j_cypherRead Neo4j CypherBRead-onlyIdempotent
Execute a read Cypher query on the Neo4j database.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The Cypher query to execute. | |
| params | No | The parameters to pass to the Cypher query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates the read-only nature already captured by annotations (readOnlyHint, idempotentHint, destructiveHint). It adds no extra context about query execution, result formatting, error handling, or any potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence conveys the purpose without wasted words. It is front-loaded with the verb and resource, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and the annotations cover safety. However, the description is minimalβit doesn't mention what the query returns or that params is optional (though the schema does). Given no output schema and no usage guidance, the description could provide a bit more context about result expectations or common use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete descriptions for both parameters (query and params), so the baseline is 3. The description does not elaborate on parameter usage or add any additional semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the action ('execute') and resource ('read Cypher query on the Neo4j database'), easily distinguishing it from siblings like write_neo4j_cypher and the specialized search tools. The 'read' qualifier immediately signals its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to choose this tool over alternatives. It doesn't mention that raw Cypher should be used for arbitrary reads or that search tools are for specific query patterns. There are no explicit exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cypher_querySearch-Augmented Cypher QueryARead-onlyIdempotent
Execute a Cypher query that uses vector and/or fulltext search indexes.
This powerful tool allows you to:
Use vector search ($vector_embedding) and/or fulltext search ($fulltext_text) in Cypher
Post-filter large result sets (fetch 100-1000, filter with WHERE)
Combine search with graph traversal
Aggregate over search results
Example:
search_cypher_query(
cypher_query='''
CALL db.index.vector.queryNodes('chunk_embedding_vector', 500, $vector_embedding)
YIELD node, score
WHERE score > 0.75
MATCH (node)-[:BELONGS_TO]->(d:Document)
WHERE d.year >= 2020
RETURN node.chunkId, d.title, score
ORDER BY score DESC
LIMIT 20
''',
vector_query="student requirements"
)Placeholders:
$vector_embedding: Replaced with embedding vector$fulltext_text: Replaced with text string for fulltext
| Name | Required | Description | Default |
|---|---|---|---|
| cypher_query | Yes | Cypher query using $vector_embedding and/or $fulltext_text placeholders. | |
| vector_query | No | Text query to embed for vector search. Use $vector_embedding placeholder in Cypher. | |
| fulltext_query | No | Text query for fulltext search. Use $fulltext_text placeholder in Cypher. | |
| params | No | Additional parameters for the Cypher query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations by explaining placeholder substitution (e.g., $vector_embedding replaced with embedding vector) and typical fetch sizes (100-1000). It also describes post-filtering behavior with WHERE. This extra detail is valuable and not redundant with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a bulleted list, an example, and a placeholder section. It is somewhat long due to the example, but every section serves a purpose. The front-loading of the core statement is good, and the example is necessary for a complex tool. It is concise enough given the tool's complexity, but not as tight as a two-sentence description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description compensates with a rich example that shows the return shape and usage patterns. It covers the main combinations (vector/fulltext, post-filtering, traversal, aggregation) and the placeholder mechanism. Minor gaps exist, such as not explaining the 'params' object's possible contents or behavior when both vector and fulltext are used simultaneously, but overall it is sufficiently complete for a 4-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters, so the baseline is 3. The description adds semantic value by explaining how the placeholders in cypher_query relate to the vector_query and fulltext_query parameters, including the exact replacement behavior. It also demonstrates usage via the example. However, the 'params' object is not elaborated beyond its schema description, so the added value is not maximal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a Cypher query enhanced with vector and/or fulltext search indexes. It lists four specific capabilities and distinguishes itself from sibling tools like vector_search and fulltext_search by combining search with graph traversal, post-filtering, and aggregation. The verb 'execute' and resource 'Cyper query' are explicit, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when you need to post-filter large result sets, combine search with traversal, or aggregate over search results. However, it lacks explicit exclusions or direct comparisons to alternatives, such as 'use read_neo4j_cypher for non-search queries.' The example implies but does not explicitly state the alternative scenarios, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vector_searchVector Similarity SearchARead-onlyIdempotent
Performs vector similarity search on a Neo4j vector index.
This tool embeds your text query using OpenAI and searches the specified vector index. Returns node IDs, labels, node properties (automatically sanitized), and similarity scores.
Automatic Sanitization (always applied):
Embedding property used by the vector index β automatically excluded (vector_search only)
Large lists (β₯128 items) β replaced with placeholders
Large strings (β₯10K chars) β truncated with suffix
Total response limited to 8000 tokens (results dropped if needed)
Property Selection:
Default (no return_properties): Returns ALL properties (sanitized)
With return_properties: Returns ONLY specified properties
Example: return_properties="pageNumber,id" β returns only these two
Check get_neo4j_schema_and_indexes for property warnings to avoid large fields
Performance Optimization: Internally fetches max(top_k Γ 2, 100) results to avoid local maximum problems in kANN algorithms.
| Name | Required | Description | Default |
|---|---|---|---|
| text_query | Yes | The text query to search for. This will be embedded and used for similarity search. | |
| vector_index | Yes | The name of the vector index to search in. Use get_neo4j_schema_and_indexes to see available indexes. | |
| top_k | No | The number of most similar results to return. | |
| return_properties | No | Optional: Comma-separated list of properties to return (e.g., "pageNumber,id"). If not specified, returns all properties with automatic sanitization (large values are truncated). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it details automatic sanitization rules (exclusion of embedding property, handling of large lists/strings, token limits), property selection behavior (default vs. specified properties), and performance optimization (fetching extra results for kANN algorithms). Annotations cover read-only/idempotent traits, but the description enriches this with operational specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Automatic Sanitization, Property Selection, Performance Optimization) and front-loaded core functionality. It's appropriately detailed for a complex tool, though slightly verbose; every sentence adds value, such as explaining sanitization rules and optimization strategies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, rich annotations, and 100% schema coverage, the description is highly complete: it covers purpose, usage guidelines, behavioral traits, parameter effects, and references to sibling tools. No output schema exists, but the description adequately explains return values (node IDs, labels, properties, scores) and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description adds valuable semantics: it explains how return_properties affects property selection with examples, clarifies that text_query is embedded via OpenAI, and provides context on top_k optimization. However, it doesn't add syntax details beyond the schema for parameters like vector_index.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs vector similarity search on a Neo4j vector index, embedding text queries using OpenAI. It distinguishes from sibling tools like fulltext_search by specifying vector-based search with embedding, and from get_neo4j_schema_and_indexes by focusing on search execution rather than schema discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: it references get_neo4j_schema_and_indexes to find available indexes and check property warnings, and distinguishes itself from fulltext_search by emphasizing vector-based similarity search with embedding. It also advises on performance considerations for top_k parameter usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.3.0- First observed
fulltext_search - First observed
get_neo4j_schema_and_indexes - First observed
read_neo4j_cypher - First observed
search_cypher_query - First observed
vector_search
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose with no overlap: fulltext_search uses Lucene queries, vector_search uses embeddings, search_cypher_query combines both with graph traversal, read_neo4j_cypher handles general read queries, and get_neo4j_schema_and_indexes provides metadata. The descriptions explicitly differentiate their use cases and when to apply each, preventing confusion.
All tool names follow a consistent snake_case pattern with clear verb_noun or noun_verb structures: fulltext_search, vector_search, search_cypher_query, read_neo4j_cypher, get_neo4j_schema_and_indexes. The naming is predictable and readable, making it easy for agents to infer functionality.
With 5 tools, this server is well-scoped for Neo4j GraphRAG operations. It covers essential search methods (fulltext, vector, hybrid), general querying, and schema inspection without being overly sparse or bloated. Each tool serves a unique and necessary function in the workflow.
The toolset provides strong coverage for search and querying in a Neo4j GraphRAG context, including schema inspection, multiple search types, and flexible Cypher execution. A minor gap is the lack of write operations (e.g., create/update nodes), but this aligns with a read-focused RAG server, and agents can work around this limitation.
Maintenance
Related MCP Connectors
The Grafbase MCP server sits in front of a GraphQL API and exposes an MCP protocol-compliant interface that allows AI agents and LLMs to explore and query GraphQL APIs using natural language. It provides tools to search schemas, introspect types and fields, and execute GraphQL queries while minimizing context bloat by returning only relevant schema subsets, with built-in support for authentication, authorization, and configurable access control.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables graph database interactions with Neo4j, allowing users to access and manipulate graph data through natural language commands.-
- AlicenseNot gradedqualityCmaintenanceProduction-ready MCP server for Neo4j graph databases, enabling natural language to Cypher query translation with enterprise security and async performance.MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for indexing source code from repositories into a Neo4j graph database and enabling Graph RAG-based search and traversal of functions via natural language queries.-
- AlicenseAqualityBmaintenanceMCP server for Neo4j that provides abstract graph operations for LLMs, enabling safe and consistent interaction with Neo4j databases through tools like search, insert, update, delete, and schema introspection.8MIT