Skip to main content
Glama
GrafeoDB

grafeo-mcp

Official
by GrafeoDB

CI codecov PyPI License

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 limit params and truncate large results

  • Embedded - no separate database server to manage

Related MCP server: M.I.M.I.R - Multi-agent Intelligent Memory & Insight Repository

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

Tool

Description

create_text_index

Create a full-text search index on a property

search_text

Keyword search over indexed string properties

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, use uv add grafeo-memory[mcp].

License

Apache-2.0

Available Tools

23 tools
batch_importA

Bulk-create nodes and edges from JSON arrays in a single call.

Use this tool when: you need to import many nodes and edges at once, e.g. loading a dataset, building a graph from structured data, or ingesting extracted entities in bulk. Do NOT use for: creating a single node or edge (use create_node / create_edge), or updating existing data (use update_node / update_edge).

Nodes are created first, then edges. Edges can reference nodes created in this batch using "@index" notation (e.g. "@0" refers to the first node in the nodes array).

Note: this operation is not atomic. If an error occurs partway through, already-created nodes/edges remain in the graph.

Args: nodes: List of node objects, each with: - labels: list of strings (required) - properties: dict of key-value pairs (optional) edges: List of edge objects, each with: - source_ref: int (existing node ID) or str ("@0", "@1", ...) referencing a node by its index in the nodes array - target_ref: int (existing node ID) or str ("@0", "@1", ...) - edge_type: str (required) - properties: dict of key-value pairs (optional)

Returns: JSON with created_nodes count, created_edges count, and a node_id_map from batch index to actual node ID.

Examples: batch_import( nodes=[ {"labels": ["Person"], "properties": {"name": "Alice"}}, {"labels": ["Person"], "properties": {"name": "Bob"}}, ], edges=[ {"source_ref": "@0", "target_ref": "@1", "edge_type": "KNOWS"}, ], )

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
edgesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: nodes created first then edges, '@index' notation for referencing batch nodes, and non-atomic operation. With no annotations, these details are crucial. Could mention more about error handling, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with clear sections: purpose, usage guidelines, behavioral note, parameter details, return description, and example. Every sentence adds value; no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all essential aspects: purpose, usage, behavior, parameters, return format, and example. Given the tool's complexity (bulk create with references and non-atomicity), the description is thorough and leaves no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully documents the internal structure of nodes and edges including required fields (labels, edge_type) and optional fields. Also explains the '@index' notation and provides an example, compensating completely for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Bulk-create nodes and edges from JSON arrays in a single call.' It explicitly distinguishes itself from siblings by noting when to use create_node/create_edge for single entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use this tool when' scenarios (loading datasets, building graphs) and 'Do NOT use for' cases (single node/edge, updates) with named alternative tools (create_node, create_edge, update_node, update_edge).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betweenness_centralityA

Compute betweenness centrality for all nodes (Brandes' algorithm).

Betweenness centrality measures how often a node lies on the shortest path between other node pairs. High-betweenness nodes are "bridges" that connect different parts of the graph.

Use this tool when: you want to find bridge or bottleneck nodes. Do NOT use this for: finding the most linked-to nodes (use pagerank) or finding communities (use louvain).

Args: normalized: If True, normalize scores by 2/((n-1)(n-2)) so they fall in [0, 1] (default True). top_k: Number of top-ranked nodes to return (default 20).

Returns: JSON array of {node_id, score, labels, properties} sorted by score descending.

Error recovery: If all scores are 0 the graph may be too small or disconnected.

ParametersJSON Schema
NameRequiredDescriptionDefault
normalizedNo
top_kNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the algorithm, output format (sorted JSON array with score, labels, properties), and error recovery advice. While it does not explicitly state it is read-only, it is implied and there are no contradictions with annotations (none provided). A slight improvement could be an explicit 'no side effects' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise and front-loaded with purpose, but the long algorithmic line and Args block could be slightly more structured. Nonetheless, it is well-organized and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and minimal schema, the description covers algorithm, parameters, output format, and error recovery, making it fully complete for the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage, but the description compensates by explaining 'normalized' (normalization formula, default True) and 'top_k' (number of top-ranked nodes, default 20), providing essential meaning that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it computes betweenness centrality using Brandes' algorithm, defines what it measures (bridge/bottleneck nodes), and distinguishes it from sibling tools like pagerank and louvain, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides 'Use this tool when' and 'Do NOT use this for' with concrete alternatives (pagerank, louvain), offering clear context for when to and when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connected_componentsA

Find connected components (treating the graph as undirected).

A connected component is a maximal set of nodes such that every pair is reachable from every other by following edges in either direction.

Use this tool when: you want to know how many disconnected subgraphs exist, or which nodes belong to the same component. Do NOT use this for: finding dense sub-communities (use louvain).

Returns: JSON object with {num_components, components} where components maps component_id -> list of node IDs.

Error recovery: If every node is its own component, the graph has no edges.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses undirected graph treatment, return format (num_components, components), and error condition (no edges). Lacks details on potential performance implications but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections for description, usage, returns, and error recovery. Every sentence is necessary and informative; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema referenced, description fully explains behavior, use cases, and error handling. Provides sufficient context given sibling tools and zero parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (schema coverage 100%), so baseline 4. Description adds value by explaining concept and return structure beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Find connected components (treating the graph as undirected)' and distinguishes from sibling tool 'louvain' by explicitly stating not to use it for dense sub-communities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (e.g., 'want to know how many disconnected subgraphs exist') and when not to use (use louvain), along with error recovery guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_edgeA

Create a directed edge (relationship) between two existing nodes.

Use this tool when: you need to connect two nodes with a typed relationship. Do NOT use this for: creating nodes (use create_node) or querying relationships (use execute_gql).

Args: source_id: The source node ID (integer). target_id: The target node ID (integer). edge_type: Relationship type string (e.g. "KNOWS", "WORKS_AT"). properties: Optional edge properties (e.g. {"since": 2020, "weight": 1.5}).

Returns: JSON with the created edge's id, source_id, target_id, edge_type, and properties.

Examples: create_edge(1, 2, "KNOWS") create_edge(1, 3, "WORKS_AT", {"since": 2020})

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes
target_idYes
edge_typeYes
propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that edges are directed, requires existing nodes, and describes return format. Does not mention error handling or node existence validation, but provides sufficient behavioral context for typical use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: one sentence for purpose, usage guidelines, then structured Args, Returns, and two examples. No wasted words, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description covers purpose, usage guidelines, parameters, and examples. It is complete for decision-making and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are described in the Args section with type hints and examples (e.g., edge_type as 'KNOWS'). Schema has 0% description coverage, so description fully compensates and adds meaning beyond titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Create a directed edge (relationship) between two existing nodes', providing a specific verb and resource. It distinguishes from siblings by explicitly mentioning not to use for node creation (create_node) or querying (execute_gql).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states when to use ('connect two nodes with a typed relationship') and when not to use, with specific alternative tools named (create_node, execute_gql).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_nodeA

Create a new node in the graph with the given labels and properties.

Use this tool when: you need to add a single new entity to the graph. Do NOT use this for: bulk inserts (use execute_gql with INSERT/CREATE statements) or creating relationships (use create_edge).

Args: labels: One or more node labels (e.g. ["Person"] or ["Person", "Employee"]). properties: Optional key-value properties (e.g. {"name": "Alice", "age": 30}). Omit or pass null for a node with no properties.

Returns: JSON with the created node's id, labels, and properties.

Examples: create_node(["Person"], {"name": "Alice", "age": 30}) create_node(["Company"], {"name": "Acme", "founded": 2010}) create_node(["Tag"]) # no properties

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsYes
propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It describes return format but lacks details on idempotency, validation, or side effects (e.g., what happens if node already exists). The examples and return info are helpful but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (when to use, args, returns, examples). However, it could be slightly more concise; the two-line examples are useful but verbose. No wasted sentences overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has output schema (not shown but present), the description adequately covers purpose, parameters, and usage. It does not mention error handling or edge cases, but given low complexity (2 params, 1 required), it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description carries full burden. It explains labels as string array and properties as optional key-value object, with examples showing usage and optionality (null for no properties). This adds significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Create a new node in the graph'. It distinguishes this tool from siblings like create_edge and execute_gql by specifying it's for single entities only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use ('add a single new entity') and when not to ('bulk inserts' or 'creating relationships'), with alternative tools named (execute_gql, create_edge).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_text_indexA

Create a full-text search index on a string property.

Call this once before using search_text on the same label + property pair. Existing nodes with the given label and property are indexed immediately; future nodes are indexed on insertion.

Use this tool when: you want to enable keyword search on a text property. Do NOT use for: vector/embedding search (use create_vector_index).

Args: label: Node label to index (e.g. "Article"). property: String property to index (e.g. "title", "content").

Returns: Confirmation string on success, or an error message.

Examples: create_text_index("Article", "title") create_text_index("Document", "content")

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes
propertyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses that existing nodes are indexed immediately and future nodes are indexed on insertion, and mentions the return type (confirmation or error).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage, args, returns, examples) but is slightly verbose. Every sentence adds value, but it could be trimmed slightly without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and sparse schema, the description is remarkably complete. It covers purpose, behavior, parameter semantics, usage context, return type, and examples, making it fully sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description provides detailed parameter explanations (e.g., 'Node label to index') and concrete examples (e.g., 'Article', 'title'). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'create' and the resource 'full-text search index' on a string property. It distinguishes from sibling tool 'create_vector_index' by explicitly contrasting vector/embedding search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'call this once before using search_text' and provides clear 'Use this tool when' and 'Do NOT use for' guidance, including an alternative (create_vector_index).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_vector_indexA

Create an HNSW vector index for fast similarity search.

Call this once before using vector_search on a label + property pair. If nodes with the given label already have vector values in the property, they are indexed immediately; future nodes are indexed on insertion.

Args: label: Node label to index (e.g. "Document"). property: Property containing embedding vectors (e.g. "embedding"). dimensions: Vector dimensionality (e.g. 1536 for OpenAI, 384 for MiniLM). If None the engine infers it from existing data. metric: Distance metric — "cosine" (default), "euclidean", "dot_product", or "manhattan". m: HNSW links per node (default 16 inside the engine). Higher values give better recall but use more memory. ef_construction: HNSW construction beam width (default 128 inside the engine). Higher values build a higher-quality index but take longer.

Returns: Confirmation string on success, or an error message.

Example call: create_vector_index("Document", "embedding", 1536, "cosine", m=32, ef_construction=200)

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes
propertyYes
dimensionsNo
metricNocosine
mNo
ef_constructionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses indexing behavior for existing and future nodes, parameter effects, and return type. It could mention idempotency or side effects, but overall good transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose, usage, parameter list, returns, example. Every sentence adds value, and it is concise without being terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 params, no annotations), the description is fairly complete. It includes an example call. It could elaborate on error cases or performance, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explains every parameter with examples, defaults, and effects (e.g., '15 for OpenAI' for dimensions). This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates an HNSW vector index for fast similarity search. It specifies the usage context (call once before vector_search on a label+property pair) and distinguishes it from siblings like create_text_index and vector_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises calling this once before using vector_search. It provides clear context but does not explicitly mention when not to use or alternatives. The usage context is effective for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_edgeA

Delete an edge from the graph.

Use this tool when: you need to remove a relationship between two nodes. Do NOT use for: deleting nodes (use delete_node) or updating edge properties (use update_edge).

Args: edge_id: The ID of the edge to delete.

Returns: Confirmation message on success, or an error message.

Examples: delete_edge(5)

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations available, and the description does not cover side effects, authorization, or irreversibility. As a destructive operation, more transparency about consequences would be beneficial. The output schema exists but is not discussed in description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise with no wasted words. Includes args section and example. Structure is front-loaded with purpose and usage, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, the description covers input, usage, and return values. However, lacks mention of destructive nature (irreversible) given no annotations. Still fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description only states 'edge_id: The ID of the edge to delete.' While this adds some meaning, it is minimal. Could include format or source of edge_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Delete an edge from the graph,' clearly identifying the verb (delete) and resource (edge). It distinguishes from siblings like create_edge, update_edge, and delete_node.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('need to remove a relationship') and when-not-to-use, referencing specific alternatives (delete_node, update_edge). This helps agent select the correct tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_nodeA

Delete a node from the graph.

Use this tool when: you need to remove a node permanently. Do NOT use for: updating properties (use update_node) or deleting edges only (use delete_edge).

Args: node_id: The ID of the node to delete. detach: If True (default), also delete all edges connected to this node (like DETACH DELETE in Cypher). If False, fail if the node has any connected edges.

Returns: Confirmation message on success, or an error message.

Examples: delete_node(42) # detach delete (remove edges too) delete_node(42, detach=False) # fail if edges exist

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYes
detachNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that deletion is permanent, that detach=True removes connected edges (like DETACH DELETE in Cypher), and that detach=False fails if edges exist. It also describes return value (confirmation or error) for both success and failure cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear structure: a one-line summary, usage guidelines, args section, returns section, and examples. Every sentence adds value and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters (1 required) and an output schema, the description covers all necessary aspects: what the tool does, when to use it, parameter details, return value, and examples. It is complete and leaves no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. It explains node_id as the ID of the node, and detach as controlling edge removal behavior with its default (True). Examples illustrate usage, adding meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (delete a node) and the resource (node in graph). It explicitly distinguishes from siblings by saying 'do NOT use for updating properties (use update_node) or deleting edges only (use delete_edge)'. This provides specific verb+resource differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use (remove a node permanently) and when not to (updating properties, deleting edges only) with alternative tool names. It also covers the detach parameter's behavior, giving clear context for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dijkstraA

Find the shortest weighted path between two nodes (Dijkstra's algorithm).

Returns the total distance and the sequence of nodes along the path.

Use this tool when: you need the shortest or cheapest path between two known nodes. Do NOT use this for: discovering important nodes (use pagerank) or finding similar content (use vector_search).

Args: source_id: Starting node ID. target_id: Destination node ID. weight_property: Edge property to use as weight (e.g. "distance", "cost"). If None every edge has weight 1.0.

Returns: JSON object with {distance, path: [{node_id, labels, properties}, ...]}. Returns an error message if the nodes are unreachable.

Error recovery: If the result is null/unreachable, check that both node IDs exist (use get_node) and that there is a connecting path in the graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes
target_idYes
weight_propertyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: returns distance and path, error if unreachable, weight_property defaults to 1.0. Includes error recovery steps, leaving little ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with front-loaded purpose, usage guidelines, and parameter details. Minor redundancy in repeating parameter info that could be inferred from schema, but justified due to lack of schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers algorithm, parameters, return format, error handling, and sibling differentiation. Provides enough context for correct agent invocation even without annotations or output schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description explains all three parameters: source_id (starting node), target_id (destination), weight_property (edge property, optional, default 1.0). Also describes return structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds the shortest weighted path between two nodes using Dijkstra's algorithm. It distinguishes from sibling tools like pagerank and vector_search, specifying the exact algorithm and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (shortest/cheapest path between known nodes) and when not to (use pagerank for important nodes, vector_search for similar content), providing clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_gqlA

Execute a GQL query against the graph database.

GQL (Graph Query Language) is the ISO/IEC standard query language. Use MATCH patterns to find nodes and relationships, INSERT to add data, and RETURN to project results.

Cypher syntax (e.g. CREATE) is automatically normalized to GQL (INSERT), so queries written in Cypher style will generally work as-is.

Use this tool when: you need to run a custom query — complex filters, multi-hop traversals, aggregations, or mutations beyond what the CRUD tools (create_node, create_edge) provide. Do NOT use this for: simple node lookups (use get_node), label browsing (use search_nodes_by_label), or one-hop exploration (use get_neighbors).

Args: query: A GQL query string (Cypher syntax is auto-normalized). limit: Maximum rows to return (default 100). Use to prevent overwhelming context windows. The query itself can also contain a LIMIT clause for server-side limiting.

Examples: MATCH (p:Person) RETURN p.name, p.age MATCH (a:Person)-[:KNOWS]->(b:Person) RETURN a.name, b.name INSERT (:Person {name: 'Alice', age: 30}) MATCH (p:Person) WHERE p.age > 25 RETURN p.name LIMIT 10

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It mentions Cypher auto-normalization and the limit parameter. However, it does not detail error behavior, potential side effects of mutations, or authentication requirements. This is a minor gap, but overall good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (overview, usage guidelines, args, examples). Every sentence adds value; there is no redundancy. The length is justified by the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of an output schema (not requiring return value explanation), the description covers purpose, usage, parameters, and examples comprehensively. It is complete for an AI agent to understand when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description's 'Args' section provides comprehensive explanations for both parameters: query (with examples of GQL/Cypher syntax) and limit (purpose, default, and advice on also using LIMIT in the query). This adds significant meaning beyond the basic schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Execute a GQL query against the graph database.' It elaborates on GQL, mentions Cypher normalization, and provides concrete examples. It distinguishes itself from sibling tools by specifying when to use this tool vs. CRUD tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly outlines when to use the tool ('complex filters, multi-hop traversals, aggregations, or mutations beyond what the CRUD tools provide') and when not to use it ('simple node lookups', 'label browsing', 'one-hop exploration'). It references alternative tools, providing clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neighborsA

Get neighboring nodes connected to a given node.

This is the primary tool for graph traversal. Use it to explore the neighborhood of a known node. Returns connected nodes with the edges that link them.

Use this tool when: you have a node ID and want to see what it connects to. Do NOT use this for: finding nodes by property (use search_nodes_by_label) or running complex multi-hop queries (use execute_gql).

Args: node_id: The ID of the node to get neighbors for. direction: "outgoing" (node-->neighbor), "incoming" (neighbor-->node), or "both" (default). Controls which direction of edges to follow. edge_type: Filter by relationship type (e.g. "KNOWS"). None returns all edge types. limit: Maximum neighbors to return (default 50).

Returns: JSON with the center node, a list of neighbors (with connecting edge info), and counts.

Examples: get_neighbors(0) get_neighbors(42, direction="outgoing") get_neighbors(1, edge_type="KNOWS", limit=10) get_neighbors(5, direction="incoming", edge_type="WORKS_AT")

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYes
directionNoboth
edge_typeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It details the return format (center node, list of neighbors, connecting edge info, counts) and explains parameter behavior (direction options, edge_type filtering, limit). However, it omits behaviors like error handling when the node_id is missing or a default limit of 50, but overall provides substantial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, args, returns, examples). It is somewhat lengthy but every sentence adds value, and the most critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, no annotations, presence of an output schema) the description is sufficiently complete: it covers purpose, parameter semantics, usage boundaries, return format, and provides multiple examples. The absence of error behavior or rate limits is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description explains all four parameters in the 'Args' section with intent, default values, and examples, adding significant meaning beyond the schema property titles and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: 'Get neighboring nodes connected to a given node.' It prominently distinguishes itself from sibling tools like `search_nodes_by_label` and `execute_gql`, making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-to-use ('when you have a node ID and want to see what it connects to') and when-not-to-use ('finding nodes by property' or 'complex multi-hop queries'), with clear alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nodeA

Get a single node by its ID.

Returns the node's labels and all properties, or a not-found message.

Use this tool when: you have a specific node ID and need its details. Do NOT use this for: searching nodes by label or property (use search_nodes_by_label or execute_gql).

Args: node_id: The numeric node ID (e.g. 0, 1, 42).

Returns: JSON with id, labels, and properties -- or an error/not-found message.

Examples: get_node(0) get_node(42)

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description discloses return type (JSON with id, labels, properties or error/not-found message) and behavior for missing IDs. Lacks explicit mention of read-only nature, but implied. Minor gap for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, followed by return info, usage advice, arg details, and examples. Every sentence adds value; no redundancy. Well-structured and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple tool with 1 param and no annotations, description adequately covers purpose, usage, return structure (with output schema present), and examples. All essential information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description fully explains the only parameter: 'node_id: The numeric node ID (e.g. 0, 1, 42).' Adds examples and clarifies it is numeric, going beyond the schema's integer type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a single node by its ID' and specifies it returns labels and properties or a not-found message. It distinguishes from sibling tools like search_nodes_by_label and execute_gql.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this tool when: you have a specific node ID and need its details' and 'Do NOT use this for: searching nodes by label or property (use search_nodes_by_label or execute_gql).' Provides clear when and when-not, with named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

graph_infoA

Get an overview of the graph database: counts, labels, edge types, and schema.

Use this tool when: you need to understand what data is in the graph before writing queries, or to verify the database state after mutations. Do NOT use this for: retrieving specific node/edge data (use get_node, search_nodes_by_label, or execute_gql).

Returns: JSON with database info (mode, node_count, edge_count, persistence), schema (labels with counts, edge_types with counts, property_keys), and detailed statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It clearly states the tool returns database info, schema, and statistics, implying a read-only operation. Could be more explicit about idempotency, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with purpose, and uses bullet points for the return section. A minor redundancy (the 'Returns:' line could be integrated) but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an output schema, the description covers use cases, non-use cases, and return details comprehensively. No gaps for the intended purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; trivially 100% schema coverage. Description adds value by detailing the return structure (JSON with mode, node_count, edge_count, persistence, labels, edge_types, property_keys, statistics), helping the agent understand output beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states 'Get an overview of the graph database: counts, labels, edge types, and schema,' and distinguishes from siblings by listing alternatives (get_node, search_nodes_by_label, execute_gql) for what not to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear when-to-use: 'when you need to understand what data is in the graph before writing queries, or to verify the database state after mutations,' and explicit when-not-to with sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

louvainA

Detect communities using the Louvain modularity-optimization algorithm.

Groups densely-connected nodes into communities. Higher resolution values produce more (smaller) communities; lower values produce fewer (larger) communities.

Use this tool when: you want to discover clusters or groups in the graph. Do NOT use this for: finding paths (use dijkstra) or ranking nodes (use pagerank).

Args: resolution: Resolution parameter (default 1.0). Values > 1 favor smaller communities, values < 1 favor larger ones.

Returns: JSON object with {modularity, num_communities, communities} where communities maps community_id -> list of node summaries. Output is truncated if it exceeds the token budget.

Error recovery: If this returns 0 communities, the graph may have no edges. Check with graph_info.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolutionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses behavior: it explains the effect of the resolution parameter, describes the return object (modularity, num_communities, communities), mentions output truncation due to token budget, and provides error recovery guidance (0 communities may indicate no edges).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (main purpose, usage, args, returns, error recovery). Each sentence adds value, though the returns section is somewhat verbose. Still, it is reasonably concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (community detection with one parameter), the description is complete: it explains the algorithm, parameter effect, return format, output truncation, and error handling. No missing information for proper invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'resolution' is fully explained in the description with its default value and impact on community size, compensating for the schema's lack of description (coverage 0%). The explanation adds clear meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it detects communities using the Louvain algorithm. Distinguishes from sibling tools like dijkstra and pagerank by specifying what it is not for, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('when you want to discover clusters or groups') and when not to use it, providing specific alternatives (dijkstra for paths, pagerank for ranking). No ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pagerankA

Run PageRank and return the top-k most important nodes.

PageRank assigns every node a score proportional to how many (and how important) other nodes link to it. Higher scores mean more connected / influential nodes.

Use this tool when: you want to find the most important or central nodes in the graph based on link structure. Do NOT use this for: finding similar nodes by content (use vector_search) or for finding shortest paths (use dijkstra).

Args: damping: Probability of following a link vs. teleporting (default 0.85). max_iterations: Upper bound on convergence iterations (default 100). tolerance: Convergence threshold (default 1e-6). top_k: How many top-ranked nodes to return (default 20). The algorithm always scores every node, but only the top-k are returned to keep the output manageable.

Returns: JSON array of {node_id, score, labels, properties} sorted by score descending. Output is truncated if it exceeds the token budget.

Error recovery: If this returns an error, verify the graph is non-empty with graph_info. PageRank requires at least one edge.

ParametersJSON Schema
NameRequiredDescriptionDefault
dampingNo
max_iterationsNo
toleranceNo
top_kNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It discloses algorithm parameters, output truncation by token budget, and prerequisite (at least one edge). Does not explicitly state read-only nature, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with intro, usage guidelines, args, returns, and error recovery sections. Each sentence earns its place; no redundancy. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given all optional parameters, presence of output schema, and no annotations, the description covers parameter semantics, return format, truncation, error recovery, and prerequisites. Sufficient for correct agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description explains all four parameters (damping, max_iterations, tolerance, top_k) with defaults, behavior, and why top_k is needed. Adds significant meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Run PageRank and return the top-k most important nodes', providing a specific verb and resource. It explains the algorithm's purpose (measuring node importance via link structure) and distinguishes from siblings like vector_search and dijkstra.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-to-use (finding important central nodes) and when-not-to-use (content similarity or shortest paths) with named alternatives. Also includes error recovery guidance on verifying graph non-emptiness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_nodes_by_labelA

Find nodes that have a specific label.

Returns node IDs and their properties, paginated by limit/offset.

Use this tool when: you want to list or browse nodes of a certain type (e.g. all Person nodes, all Company nodes). Do NOT use this for: getting a single node by ID (use get_node), or complex filtered queries (use execute_gql).

Args: label: The label to filter by (e.g. "Person", "Company"). limit: Maximum number of results to return (default 100). offset: Number of results to skip for pagination (default 0).

Returns: JSON with a list of {node_id, properties} objects, total count, and a truncation note if applicable.

Examples: search_nodes_by_label("Person") search_nodes_by_label("Company", limit=10) search_nodes_by_label("Person", limit=50, offset=50) # page 2

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description fully explains behavior: returns node IDs and properties, paginated with limit/offset, includes total count and truncation note, and gives defaults. Clearly a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections: purpose, usage guidelines, args, returns, and examples. Every sentence adds value, concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no nested objects), the description is complete. It covers input, output, and behavior. Despite having an output schema (not shown), the description explains return format, so no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description explains all three parameters (label, limit, offset) with defaults, types, and examples, fully compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Find nodes that have a specific label' and differentiates from siblings like get_node (single node by ID) and execute_gql (complex filtered queries), using specific verb+resource+scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('list or browse nodes of a certain type') and when not to use ('getting a single node by ID', 'complex filtered queries'), naming alternative tools (get_node, execute_gql).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_textA

Full-text keyword search over string properties.

Finds nodes whose text property matches the search query. Requires a text index created via create_text_index on the same label + property.

Use this tool when: you want to search for nodes by keyword or phrase. Do NOT use for: semantic/vector similarity (use vector_search), exact property matching (use execute_gql with WHERE), or browsing by label (use search_nodes_by_label).

Args: label: Node label to search within (e.g. "Article"). property: String property to search (e.g. "title"). query: Search query string (keywords or phrase). limit: Maximum number of results to return (default 20).

Returns: JSON array of {node_id, score, labels, properties} sorted by relevance score descending.

Examples: search_text("Article", "title", "graph database") search_text("Document", "content", "machine learning", limit=10)

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes
propertyYes
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses dependency on create_text_index, describes return format (JSON array sorted by relevance), but does not explicitly state that the tool is non-destructive (read-only). Annotations absent, so description carries full burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose, prerequisites, usage guidance, parameter details, return description, and examples. Every sentence adds value; concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, output schema exists), the description covers prerequisites, usage, return format, and examples completely. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description compensates by detailing each parameter (label, property, query, limit) with context (e.g., 'Node label to search within') and examples, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Full-text keyword search over string properties' clearly stating the action and resource. It distinguishes from siblings like vector_search and search_nodes_by_label, providing specific verb+resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('you want to search for nodes by keyword or phrase') and when not to use (vector_search, execute_gql, search_nodes_by_label), giving clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_edgeA

Update properties on an existing edge.

Use this tool when: you need to modify an edge's properties after creation. Do NOT use for: changing the edge type (delete and recreate), creating new edges (use create_edge), or deleting edges (use delete_edge).

Args: edge_id: The ID of the edge to update. properties: Key-value properties to set. merge: If True (default), merge with existing properties. If False, replace all properties.

Returns: JSON with the updated edge's id, source_id, target_id, edge_type, and properties.

Examples: update_edge(0, {"weight": 2.5}) update_edge(0, {"since": 2024}, merge=False)

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idYes
propertiesYes
mergeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description discloses the merge behavior (merge vs replace), return structure, and that it updates existing properties. It could mention error handling or permissions, but it's sufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one purpose line, usage guidelines, Args, Returns, and Examples. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers parameters, return shape, and usage examples. An output schema exists, but the description adds context. Given the tool's simplicity, it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description explains all three parameters: edge_id, properties (key-value), merge (with default and behavior). Examples clarify usage beyond schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'Update properties on an existing edge,' using a specific verb and resource. It distinguishes itself from create_edge and delete_edge by stating what not to use it for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it ('you need to modify an edge's properties after creation') and when not to (changing edge type, creating, deleting), naming alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_nodeA

Update properties on an existing node.

Use this tool when: you need to modify a node's properties after creation. Do NOT use for: changing labels (use execute_gql), creating new nodes (use create_node), or deleting nodes (use delete_node).

Args: node_id: The ID of the node to update. properties: Key-value properties to set. Values can be strings, numbers, booleans, or lists. merge: If True (default), merge with existing properties (new keys are added, existing keys are overwritten, unlisted keys are kept). If False, replace all properties (unlisted keys are removed).

Returns: JSON with the updated node's id, labels, and properties.

Examples: update_node(0, {"age": 31}) # merge: keep other props update_node(0, {"name": "Alice"}, merge=False) # replace all props

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYes
propertiesYes
mergeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It details the merge behavior (merge vs replace), describes return type, and provides examples. This is comprehensive behavioral disclosure beyond minimal requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured: main statement, usage guidelines in bullet style, parameter descriptions, and examples. Every sentence adds value and there is no redundancy. Highly concise for the amount of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no annotations, and an output schema exists, the description covers all necessary aspects: purpose, parameters, behavioral details, return type, and examples. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the tool description fully describes all three parameters (node_id, properties, merge) with types and behavior. Adds significant meaning not present in the schema, such as merge default and properties allowed value types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Update properties on an existing node.' It uses a specific verb and resource, and distinguishes from siblings by explicitly listing what not to use it for (changing labels, creating, deleting nodes) with sibling tool names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('when you need to modify a node's properties after creation') and when not to use ('Do NOT use for: changing labels (use execute_gql), creating new nodes (use create_node), or deleting nodes (use delete_node)'). Provides clear context and alternatives.

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. Dates show when Glama detected each change.

  1. 23 tool updatesv0.2.0
    • First observedbatch_import
    • First observedbetweenness_centrality
    • First observedconnected_components
    • First observedcreate_edge
    • First observedcreate_node
    • First observedcreate_text_index
    • First observedcreate_vector_index
    • First observeddelete_edge
    • First observeddelete_node
    • First observeddijkstra
    • First observedexecute_gql
    • First observedget_neighbors
    • First observedget_node
    • First observedgraph_info
    • First observedlouvain
    • First observedmmr_search
    • First observedpagerank
    • First observedsearch_nodes_by_label
    • First observedsearch_text
    • First observedupdate_edge
    • First observedupdate_node
    • First observedvector_graph_search
    • First observedvector_search

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from CRUD operations to various search methods and graph algorithms. Descriptions explicitly state when to use each and when not to, eliminating ambiguity.

Naming Consistency5/5

Tool names consistently follow a verb_noun pattern (e.g., create_node, delete_edge, search_text). No mixing of case styles or inconsistent conventions.

Tool Count4/5

23 tools is comprehensive for a graph database server, covering CRUD, indexing, search, analytics, and import. Slightly on the higher side but well-scoped for the domain.

Completeness5/5

The tool set covers the full lifecycle: CRUD for nodes and edges, multiple index types, diverse search methods, graph algorithms, batch import, and custom GQL queries. No obvious gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    Not graded
    quality
    C
    maintenance
    Provides AI assistants with persistent graph database memory using Neo4j, enabling task management, relationship understanding, semantic search with embeddings, file indexing, and multi-agent coordination through the Model Context Protocol.
    15
    282
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to Logseq knowledge graphs to read, write, and search pages, blocks, and journals via the Model Context Protocol. It features 17 tools for full graph management, including CRUD operations, batch block insertion, and full-text search.
    35
    Apache 2.0

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/GrafeoDB/grafeo-mcp'

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