search_documentationLABSCO SUMMARY
Similarity finds the chunk; the graph supplies the context.
Plain vector search returns the five nearest chunks and stops. Here a match can be expanded along the relationships stored in Neo4j, so the answer arrives with the neighbouring material that explains it.
What it is
A retrieval server over a pair of databases: Qdrant holds the embeddings, Neo4j holds the relationships between documents. A search can be pure semantic similarity, or hybrid - similarity first, then expanded along the graph.
What you get
- Semantic search over document embeddings held in Qdrant
- Hybrid retrieval combining vector similarity with the graph relationships around each match
- Context expansion through Neo4j, so a result arrives with what it connects to rather than alone
- The Neo4j schema and the Qdrant collection documented, so what is being searched is inspectable
Requirements
Python 3.12 or newer, Neo4j and Qdrant reachable locally, both configured in a .env - and, the part that takes the time, your documents already indexed into both. The companion repository covers building that hybrid database; without the indexing step this server has nothing to search.
Setup effort
Build from source — git clone https://github.com/rileylemm/graphrag_mcp.git
USE CASES
Answering from a documentation set by meaning
Search the embeddings for what the question is about, rather than for the words it happened to use.
Getting the context around a match, not just the match
Use the hybrid search, so the nearest chunks come back with what they are connected to.
Following a thread across documents
Start from a semantic hit and let the graph expansion pull in the related material, instead of running a fresh search for each hop.
2 tools
Listed in project docs. Your client may show a different list.
hybrid_searchBEFORE YOU INSTALL
What to know first
Tools you get
2 tools named in the project's documentation. Neither tool adds documents; both databases must be filled separately. hybrid_search follows Neo4j graph relationships from matches when expand_context is set.
Requires
- Python 3.12+
- NEO4J_PASSWORD in your environment
Where it runs
Both documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/rileylemm/graphrag_mcp.git
cd graphrag_mcpInstall dependencies with uv (reads pyproject.toml and creates the .venv that run_server.sh uses): uv sync
Copy .env.example to .env and set the database connections (NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD, QDRANT_HOST, QDRANT_PORT, QDRANT_COLLECTION)
Run the server:
uv run main.pyFor client integration: chmod +x run_server.sh, then add the configuration under MCP Clients and restart your MCP client
MCP Clients
Claude Desktop, Cursor
{
"mcpServers": {
"GraphRAG": {
"command": "<YOUR_PATH_TO_GRAPHRAG_MCP>/run_server.sh",
"args": []
}
}
}The configuration on this page does not set NEO4J_PASSWORD; the project's instructions put it in a .env file. Check which folder the server reads that file from before you rely on it.