grafeo-mcp
Enables AI agents to interact with an embedded graph database (GrafeoDB) via the Model Context Protocol, providing tools for graph CRUD, GQL queries, full-text and vector search, and graph algorithms.
README
grafeo-mcp
MCP server that exposes GrafeoDB - an embedded graph database - to AI agents via the Model Context Protocol.
One install, zero infrastructure. The MCP server is the database.
Features
- 23 tools - graph CRUD, GQL queries, batch import, full-text search, vector search, MMR, hybrid retrieval, PageRank, Dijkstra, Louvain and more
- 3 resources -
graph://schema,graph://stats,graph://nodes/{id} - 4 workflow prompts - guide agents through exploration, knowledge extraction, graph analysis and similarity search
- GQL with Cypher auto-normalization - agents trained on Cypher syntax work out of the box
- Schema-first - agents discover the graph structure before querying
- Token-aware - all tools have
limitparams and truncate large results - Embedded - no separate database server to manage
Quickstart
# Install
uv tool install grafeo-mcp
# Or with pip
pip install grafeo-mcp
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"grafeo": {
"command": "grafeo-mcp",
"env": {
"GRAFEO_DB_PATH": "/path/to/your/graph.db"
}
}
}
}
Claude Code
Add to .mcp.json in your project root:
{
"mcpServers": {
"grafeo": {
"command": "grafeo-mcp",
"env": {
"GRAFEO_DB_PATH": "./graph.db"
}
}
}
}
VS Code / Copilot
Add to .vscode/mcp.json:
{
"servers": {
"grafeo": {
"command": "grafeo-mcp",
"env": {
"GRAFEO_DB_PATH": "${workspaceFolder}/graph.db"
}
}
}
}
HTTP transport
For remote or multi-client setups:
grafeo-mcp streamable-http
Environment Variables
| Variable | Description | Default |
|---|---|---|
GRAFEO_DB_PATH |
Path to the database file. Creates it if it doesn't exist | In-memory |
Tools
Query
| Tool | Description |
|---|---|
execute_gql |
Run GQL queries (Cypher syntax auto-normalized to GQL) |
Graph CRUD & Traversal
| Tool | Description |
|---|---|
create_node |
Create a node with labels and properties |
create_edge |
Create a directed edge between two nodes |
get_node |
Retrieve a node by ID |
update_node |
Update properties on an existing node |
delete_node |
Delete a node (with optional detach) |
update_edge |
Update properties on an existing edge |
delete_edge |
Delete an edge by ID |
get_neighbors |
Explore a node's neighborhood (1-hop) |
search_nodes_by_label |
Find nodes by label with pagination |
graph_info |
Schema, stats, labels, edge types, indexes |
Batch Import
| Tool | Description |
|---|---|
batch_import |
Bulk-create nodes and edges from JSON arrays |
Full-Text Search
| Tool | Description |
|---|---|
create_text_index |
Create a full-text search index on a property |
search_text |
Keyword search over indexed string properties |
Vector Search
| Tool | Description |
|---|---|
vector_search |
k-NN similarity search (HNSW) |
mmr_search |
Diversity-aware search (Maximal Marginal Relevance) |
create_vector_index |
Create HNSW index on a label + property |
vector_graph_search |
Hybrid: vector search + graph neighborhood expansion |
Graph Algorithms
| Tool | Description |
|---|---|
pagerank |
Rank nodes by importance |
dijkstra |
Shortest weighted path between two nodes |
louvain |
Community detection (Louvain modularity) |
betweenness_centrality |
Find bridge/bottleneck nodes |
connected_components |
Find disconnected subgraphs |
Resources
| URI | Description |
|---|---|
graph://schema |
Rich schema: labels, properties, edge types |
graph://stats |
Counts, memory, disk, config info |
graph://nodes/{node_id} |
Node details + connection summary |
Prompts
| Prompt | Description |
|---|---|
explore_graph |
Guided exploration of the graph structure |
knowledge_extraction |
Extract entities and relationships from text |
graph_analysis |
Structural analysis: communities, PageRank, hubs |
similarity_search |
Vector-powered semantic search with graph context |
Which tool when?
| I want to... | Use this tool | Not this |
|---|---|---|
| Add a single node | create_node |
execute_gql, batch_import |
| Add a single edge | create_edge |
execute_gql |
| Load many nodes and edges at once | batch_import |
create_node in a loop |
| Look up a node by ID | get_node |
execute_gql |
| Update a node's properties | update_node |
execute_gql |
| Delete a node | delete_node |
execute_gql |
| Update an edge's properties | update_edge |
execute_gql |
| Delete an edge | delete_edge |
execute_gql |
| Browse nodes of a type | search_nodes_by_label |
execute_gql |
| Explore one hop from a node | get_neighbors |
execute_gql |
| Run a complex or multi-hop query | execute_gql |
multiple get_neighbors |
| Search by keyword in text | search_text |
execute_gql |
| Find similar nodes by embedding | vector_search |
execute_gql |
| Find similar nodes + graph context | vector_graph_search |
vector_search + get_neighbors |
| Find the most important nodes | pagerank |
execute_gql |
| Find shortest path between two nodes | dijkstra |
execute_gql |
| Detect communities | louvain |
execute_gql |
| Understand the graph before querying | graph_info |
search_nodes_by_label |
Batch reference syntax
The batch_import tool lets edges reference nodes created in the same batch using @N notation, where N is the zero-based index into the nodes array:
batch_import(
nodes=[
{"labels": ["Person"], "properties": {"name": "Alice"}}, # @0
{"labels": ["Person"], "properties": {"name": "Bob"}}, # @1
],
edges=[
{"source_ref": "@0", "target_ref": "@1", "edge_type": "KNOWS"},
],
)
You can also mix batch references with existing node IDs: {"source_ref": "@0", "target_ref": 42, ...}.
Cypher normalization
The execute_gql tool automatically normalizes common Cypher syntax to GQL so agents trained on Cypher work out of the box. Currently the following transformations are applied:
| Cypher keyword | GQL equivalent |
|---|---|
CREATE |
INSERT |
Keywords that are shared between Cypher and GQL (such as MATCH, RETURN, WHERE, WITH, LIMIT, DETACH DELETE) pass through unchanged. Cypher-only keywords like MERGE or OPTIONAL MATCH are not supported and will produce a clear error message from the query engine.
Development
git clone https://github.com/GrafeoDB/grafeo-mcp
cd grafeo-mcp
uv sync
uv run pytest # Run tests
uv run ruff check . # Lint
uv run ruff format . # Format
uv run ty check # Type check
See Also
- grafeo-memory includes a built-in MCP server (
grafeo-memory-mcp) that wraps the high-level memory API — extract, reconcile, search, summarize. If you need AI memory management rather than raw graph access, useuv add grafeo-memory[mcp].
License
Apache-2.0
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.