grafeo-mcp
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@grafeo-mcpfind all Person nodes with name 'Alice'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 resultsEmbedded - 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-mcpClaude 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-httpEnvironment Variables
Variable | Description | Default |
| Path to the database file. Creates it if it doesn't exist | In-memory |
Tools
Query
Tool | Description |
| Run GQL queries (Cypher syntax auto-normalized to GQL) |
Graph CRUD & Traversal
Tool | Description |
| Create a node with labels and properties |
| Create a directed edge between two nodes |
| Retrieve a node by ID |
| Update properties on an existing node |
| Delete a node (with optional detach) |
| Update properties on an existing edge |
| Delete an edge by ID |
| Explore a node's neighborhood (1-hop) |
| Find nodes by label with pagination |
| Schema, stats, labels, edge types, indexes |
Batch Import
Tool | Description |
| Bulk-create nodes and edges from JSON arrays |
Full-Text Search
Tool | Description |
| Create a full-text search index on a property |
| Keyword search over indexed string properties |
Vector Search
Tool | Description |
| k-NN similarity search (HNSW) |
| Diversity-aware search (Maximal Marginal Relevance) |
| Create HNSW index on a label + property |
| Hybrid: vector search + graph neighborhood expansion |
Graph Algorithms
Tool | Description |
| Rank nodes by importance |
| Shortest weighted path between two nodes |
| Community detection (Louvain modularity) |
| Find bridge/bottleneck nodes |
| Find disconnected subgraphs |
Resources
URI | Description |
| Rich schema: labels, properties, edge types |
| Counts, memory, disk, config info |
| Node details + connection summary |
Prompts
Prompt | Description |
| Guided exploration of the graph structure |
| Extract entities and relationships from text |
| Structural analysis: communities, PageRank, hubs |
| Vector-powered semantic search with graph context |
Which tool when?
I want to... | Use this tool | Not this |
Add a single node |
|
|
Add a single edge |
|
|
Load many nodes and edges at once |
|
|
Look up a node by ID |
|
|
Update a node's properties |
|
|
Delete a node |
|
|
Update an edge's properties |
|
|
Delete an edge |
|
|
Browse nodes of a type |
|
|
Explore one hop from a node |
|
|
Run a complex or multi-hop query |
| multiple |
Search by keyword in text |
|
|
Find similar nodes by embedding |
|
|
Find similar nodes + graph context |
|
|
Find the most important nodes |
|
|
Find shortest path between two nodes |
|
|
Detect communities |
|
|
Understand the graph before querying |
|
|
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 |
|
|
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 checkSee 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
Available Tools
23 toolsbatch_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"}, ], )
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| edges | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| normalized | No | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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})
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes | ||
| edge_type | Yes | ||
| properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | ||
| properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes | ||
| dimensions | No | ||
| metric | No | cosine | |
| m | No | ||
| ef_construction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| edge_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ||
| detach | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes | ||
| weight_property | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ||
| direction | No | both | |
| edge_type | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| resolution | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
mmr_searchA
Find diverse nearest neighbors using Maximal Marginal Relevance (MMR).
MMR balances relevance to the query with diversity among results, avoiding redundant near-duplicate results. This is ideal for RAG pipelines where you want broad coverage rather than 10 variations of the same paragraph.
Use this tool when: you need diverse vector search results for RAG or when vector_search returns too many near-duplicates. Use vector_search when: you want the absolute closest matches regardless of diversity.
Args: label: Node label to search within (e.g. "Document"). property: Property that holds the embedding vector (e.g. "embedding"). query_vector: The query embedding as a list of floats. k: Number of diverse results to return (default 10). fetch_k: Initial candidates from HNSW before MMR re-ranking (default: 4*k). Higher values give MMR more to choose from. lambda_mult: Balance between relevance and diversity. 0.0 = maximize diversity, 1.0 = maximize relevance. Default: 0.5 (balanced). For RAG, try 0.3-0.7. ef: HNSW search beam width. Leave as None for index default.
Returns: JSON array of {node_id, distance, labels, properties} ordered by MMR selection (not pure distance).
Example call: mmr_search("Document", "embedding", [0.12, -0.34, ...], k=5, lambda_mult=0.3)
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes | ||
| query_vector | Yes | ||
| k | No | ||
| fetch_k | No | ||
| lambda_mult | No | ||
| ef | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description fully carries the burden. It details the MMR algorithm's balancing of relevance and diversity, explains the effect of lambda_mult, fetch_k, and ef, and notes that results are ordered by MMR selection, not pure distance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with intro, usage advice, parameter details, return description, and example. Very informative, though slightly verbose in parameter explanations; still earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: algorithm behavior, parameter roles, return format (JSON array of objects with fields), and example invocation. Output schema exists, so return details are sufficient. Complements sibling tools like vector_search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description comprehensively explains each parameter: label/property/query_vector (required), k, fetch_k (with default derivation from k), lambda_mult (with recommended range for RAG), and ef. Adds context like default values and tuning advice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Find diverse nearest neighbors using MMR') and explicitly distinguishes from sibling tool 'vector_search' by contrasting use cases ('Use this tool when... Use vector_search when...').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear 'when to use' (diverse results for RAG, avoiding near-duplicates) and 'when not to use' (use vector_search for absolute closest matches), with explicit alternatives.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| damping | No | ||
| max_iterations | No | ||
| tolerance | No | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes | ||
| query | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| edge_id | Yes | ||
| properties | Yes | ||
| merge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ||
| properties | Yes | ||
| merge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
vector_graph_searchA
Hybrid search: find similar nodes by vector, then expand their graph neighborhood.
This is the most powerful search tool — it combines semantic similarity (vector search) with graph structure (neighbor expansion). Use it when you want to find relevant nodes AND understand their context.
Step 1: Vector search finds the top-k most similar nodes. Step 2: For each result, expands outward by expand_depth hops.
Use this tool when: you need both semantic relevance AND graph context. Use vector_search when: you only need the similar nodes themselves. Use get_neighbors when: you already have a node and want to explore around it.
Args: label: Node label to search (must have a vector index). property: Property holding the embedding vector. query_vector: The query embedding as a list of floats. k: Number of nearest seed nodes to return (default 5). expand_depth: How many hops to expand from each seed (default 1). Use 0 to skip expansion (equivalent to plain vector_search). expand_edge_type: Optional edge type filter. If provided, only edges of this type are followed during expansion.
Returns: JSON object with "seeds" (vector results) and "neighbors" (expanded context), truncated if the output is large.
Example call: vector_graph_search("Article", "embedding", [0.1, ...], k=3, expand_depth=2, expand_edge_type="CITES")
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes | ||
| query_vector | Yes | ||
| k | No | ||
| expand_depth | No | ||
| expand_edge_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the two-step process (vector search then expansion), defaults, and optional edge filtering. It mentions output truncation. However, it does not discuss potential performance implications or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, step-by-step explanation, and an example. It is moderately long but every sentence adds value, and the structure aids readability. Slightly verbose but justified for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, hybrid search) and the presence of an output schema, the description is complete. It explains the multi-step process, parameter defaults, return structure ('seeds' and 'neighbors'), and includes an example. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning: label must have a vector index, query_vector is a list of floats, expand_depth can be 0 to skip expansion. The example clarifies usage. Some parameters (property, k) are briefly described but could include more nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as hybrid search combining vector similarity and graph expansion. It explicitly distinguishes from sibling tools like vector_search and get_neighbors, making it easy for an AI agent to select the right tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: 'Use this tool when: you need both semantic relevance AND graph context. Use vector_search when: you only need the similar nodes themselves. Use get_neighbors when: you already have a node and want to explore around it.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vector_searchA
Find the k nearest nodes by vector similarity (HNSW index).
Use this tool when you have an embedding vector and want to find semantically similar nodes. Requires a vector index created via create_vector_index on the same label + property.
Do NOT use this for keyword or property search — use search_nodes_by_label or execute_gql for that.
Args: label: Node label to search within (e.g. "Document"). property: Property that holds the embedding vector (e.g. "embedding"). query_vector: The query embedding as a list of floats. k: Number of nearest neighbors to return (default 10). ef: HNSW search beam width. Higher values improve recall at the cost of speed. Leave as None to use the index default.
Returns: JSON array of {node_id, distance, labels, properties} sorted by distance ascending (most similar first).
Example call: vector_search("Document", "embedding", [0.12, -0.34, ...], k=5)
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| property | Yes | ||
| query_vector | Yes | ||
| k | No | ||
| ef | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains HNSW index usage, ef parameter trade-off, and return format. However, it doesn't mention error behavior (e.g., missing index) or performance nuances beyond ef, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (purpose, usage guidelines, args, returns, example). Every sentence adds value; no fluff. Front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no annotations, and an output schema (context says true), the description covers functionality, prerequisites, parameters, return format, and example. Lacks only minor details like error conditions or ef formula, but overall strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must explain parameters fully. It does so for all 5 parameters: label, property, query_vector, k (with default 10), and ef (with default None). Example call demonstrates usage pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Find the k nearest nodes by vector similarity (HNSW index).' It distinguishes from sibling tools like search_nodes_by_label (keyword search) and execute_gql (general queries), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when you have an embedding vector and want semantically similar nodes'), when not to use ('Do NOT use for keyword or property search'), and even requires a prerequisite: vector index created via create_vector_index. Example call reinforces correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
23 tool updates
v0.2.0- First observed
batch_import - First observed
betweenness_centrality - First observed
connected_components - First observed
create_edge - First observed
create_node - First observed
create_text_index - First observed
create_vector_index - First observed
delete_edge - First observed
delete_node - First observed
dijkstra - First observed
execute_gql - First observed
get_neighbors - First observed
get_node - First observed
graph_info - First observed
louvain - First observed
mmr_search - First observed
pagerank - First observed
search_nodes_by_label - First observed
search_text - First observed
update_edge - First observed
update_node - First observed
vector_graph_search - First observed
vector_search
TDQS
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.
Tool names consistently follow a verb_noun pattern (e.g., create_node, delete_edge, search_text). No mixing of case styles or inconsistent conventions.
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.
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
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
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Graph-native persistent memory for AI agents — 33 MCP tools, zero-LLM writes.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceAllows AI models to query and interact with FalkorDB graph databases through the Model Context Protocol (MCP) specification.34040MIT- AlicenseNot gradedqualityCmaintenanceProvides 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.15282MIT
- AlicenseNot gradedqualityDmaintenanceConnects 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.35Apache 2.0
- AlicenseAqualityBmaintenanceA self-contained, in-memory graph database for AI Agents. Provides semantic code understanding through the Model Context Protocol (MCP).62MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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