tigergraph-mcp
OfficialThis server lets AI agents interact with TigerGraph through 69 MCP tools, covering schema and graph management, graph data CRUD, querying, bulk loading, vector search, data-source integration, and multi-environment connection handling.
Graph/schema management: list, create, drop, clear graphs; get/update schema; validate schema names; show global schema and graph details.
Node & edge operations: add/get/delete/has nodes and edges individually or in batches; get node edges, neighbors, degrees, and edge/vertex counts.
Querying: run interpreted or installed GSQL/openCypher queries; install/drop/show/inspect queries; manage query descriptions; generate GSQL/Cypher from natural language (optional LLM).
Bulk loading: create and run loading jobs from files or inline data, including from data sources (S3, GCS, Azure, Snowflake, BigQuery, PostgreSQL, Iceberg, Kafka); monitor and drop loading jobs.
Vector capabilities: add/drop/list vector attributes; upsert or bulk-load vectors from CSV/JSON; run top-k similarity search; fetch vectors; check index status.
Data sources: create/update/get/drop data sources, preview sample data, and list supported source types.
Connections & multi-environment support: use named profiles, route calls per profile, inspect connections, and authenticate per MCP session (HTTP/SSE).
Discovery & guidance: discover relevant tools, get workflow templates, and request detailed tool info.
Deployment controls: serve over stdio or HTTP/SSE, restrict tools via allowed/blocked selectors, and optionally log tool calls.
Allows creating and managing PostgreSQL data sources to load data into TigerGraph.
Allows creating and managing Snowflake data sources to load data into TigerGraph.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tigergraph-mcpshow me the schema of the graph"
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.
tigergraph-mcp
Model Context Protocol (MCP) server for TigerGraph — lets AI agents interact with TigerGraph through the MCP standard. All tools use pyTigerGraph's async APIs for optimal performance.
Table of Contents
Related MCP server: Memgraph MCP Server
Requirements
Python 3.10 through 3.14
MCP SDK 1.x or 2.x — the server works with either generation of the
mcppackage. Client code differs between them; see MCP SDK over HTTP.TigerGraph 4.1 or later — Install from the TigerGraph Downloads page or use TigerGraph Savanna for a managed cloud instance.
Recommended: TigerGraph 4.2+ to enable TigerVector and advanced hybrid retrieval features.
Installation
Install with pip:
pip install tigergraph-mcpOr with conda (from the tigergraph channel):
conda install -c tigergraph tigergraph-mcpThis installs:
pyTigerGraph>=2.0.4— the TigerGraph Python SDKmcp>=1.0.0— the MCP SDKpydantic>=2.0.0— for data validationclick— for the CLI entry pointpython-dotenv>=1.0.0— for loading.envfiles
To serve over HTTP (--transport streamable-http or sse), also install a web stack:
pip install uvicorn starletteTo enable the tigergraph__generate_gsql and tigergraph__generate_cypher tools (LLM-powered query generation), install the optional [llm] extras (pip only):
pip install "tigergraph-mcp[llm]"Getting Started
TigerGraph-MCP supports multiple AI agent frameworks. Choose the one that fits your workflow:
LangGraph (Recommended)
LangGraph is ideal for building stateful, agent-based workflows with complex tool chaining. Setup guide and full chatbot example:
CrewAI
CrewAI provides a simpler starting point for basic agentic workflows with a web-based UI:
GitHub Copilot Chat (VS Code)
For quick tasks or straightforward tool invocations directly in your editor:
Usage
Running the MCP Server
stdio (default — single user, one IDE/agent)
tigergraph-mcpThe server talks MCP over its own stdin and stdout: it reads JSON-RPC messages from standard input and writes replies to standard output, then exits when standard input closes. Run it in a terminal and it simply waits for messages — there is no prompt and no human-facing console. You normally never start it this way; the MCP client (Claude Code, Cursor, GitHub Copilot Chat, a LangChain agent) spawns it as a subprocess and owns the pipes. Running it by hand is mainly useful for checking that it starts:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"manual","version":"1"}}}' \
| tigergraph-mcpBecause the client owns the process, credentials must reach it as environment variables —
from a .env file, or from the client's own env mapping. This is the right mode for any
single-user IDE integration.
With a custom .env file:
tigergraph-mcp --env-file /path/to/.envWith verbose logging:
tigergraph-mcp -v # INFO level
tigergraph-mcp -vv # DEBUG levelOr programmatically:
from tigergraph_mcp import serve
import asyncio
asyncio.run(serve())Streamable HTTP / SSE (multi-user, shared server)
tigergraph-mcp --transport streamable-http --host 0.0.0.0 --port 8000
# legacy SSE shape:
tigergraph-mcp --transport sse --host 0.0.0.0 --port 8000Here the server binds the chosen port and serves MCP over HTTP, staying up until you
stop it — a long-lived service you start once, not a process a client spawns. Many clients
connect to it concurrently, each getting its own isolated TigerGraph connections, and it
does not read standard input at all. Requires uvicorn and starlette.
HTTP Mode End-to-End walks through configuring, starting, and connecting to one.
Configuration
The MCP server reads connection configuration from environment variables. You can set these either directly or in a .env file.
Using a .env File (Recommended)
Create a .env file in your project directory:
# .env — Username/Password authentication
TG_HOST=http://localhost
TG_GRAPHNAME=MyGraph # Optional — can be omitted if the database has multiple graphs
TG_USERNAME=tigergraph
TG_PASSWORD=tigergraph
TG_RESTPP_PORT=9000
TG_GS_PORT=14240Or use an API token instead of username/password:
# .env — API Token authentication
TG_HOST=http://localhost
TG_GRAPHNAME=MyGraph
TG_API_TOKEN=your_api_token_hereWhen TG_API_TOKEN (or TG_JWT_TOKEN) is set, the server uses token-based authentication (Authorization: Bearer <token>) and ignores username/password. You can obtain a token via pyTigerGraph's getToken() method or by directly calling TigerGraph's token generation endpoint.
When only username/password are provided and the TigerGraph instance requires a token for RESTPP endpoints, pyTigerGraph auto-mints one on the first 401 response and transparently retries the request — no manual token setup needed.
The server loads the .env file automatically. Environment variables take precedence over .env values.
Environment Variables
Variable | Default | Description |
|
| TigerGraph host |
| (empty) | Graph name (optional) |
|
| Username |
|
| Password |
| (empty) | GSQL secret (optional) |
| (empty) | API token (optional) |
| (empty) | JWT token (optional) |
|
| REST++ port |
|
| GSQL port |
|
| SSL port |
|
| Whether using TigerGraph Cloud |
| (empty) | Path to certificate (optional) |
|
| Log one line per tool call |
|
| Caller identity in those lines: |
Multiple Connection Profiles
Define named profiles in your .env to work with multiple TigerGraph environments without changing any code.
Defining profiles
Each named profile uses a <PROFILE>_ prefix on the standard TG_* variables. Only variables that differ from the default need to be set.
# .env
# Default profile (no prefix) — password auth
TG_HOST=http://localhost
TG_USERNAME=tigergraph
TG_PASSWORD=tigergraph
TG_GRAPHNAME=MyGraph
# Staging profile — token auth
STAGING_TG_HOST=https://staging.example.com
STAGING_TG_API_TOKEN=staging_token_here
STAGING_TG_TGCLOUD=true
# Production profile — password auth
PROD_TG_HOST=https://prod.example.com
PROD_TG_USERNAME=admin
PROD_TG_PASSWORD=prod_secret
PROD_TG_GRAPHNAME=ProdGraph
PROD_TG_TGCLOUD=trueProfiles are discovered automatically at startup. Any variable matching <PROFILE>_TG_HOST registers a new profile. Values not set for a named profile fall back to the default profile's values.
Selecting the default profile
# Switch to staging for this run
TG_DEFAULT_PROFILE=staging tigergraph-mcp
# Or set permanently in .env
TG_DEFAULT_PROFILE=prodTG_DEFAULT_PROFILE names the profile used when a call does not specify one. If it is not set, the unprefixed TG_* variables are the default profile. TG_PROFILE is accepted as an alias.
Omitting the profile argument and passing profile="default" mean the same thing — the default profile — in both stdio and HTTP mode.
Switching profiles per call
Every tool accepts an optional profile argument, so an agent can route individual calls to different environments without restarting the server. Connections are pooled per profile and reused across calls. list_connections reports the configured profiles, which one is the default, and which are currently connected — in HTTP mode scoped to the calling session.
User: Compare the vertex count of MyGraph between staging and prod.
Agent:
→ get_vertex_count(profile="staging", graph_name="MyGraph")
→ get_vertex_count(profile="prod", graph_name="MyGraph")
User: Show me the schema on staging, then run this GSQL on prod:
SHOW VERTEX Person
Agent:
→ get_graph_schema(profile="staging", graph_name="MyGraph")
→ gsql(profile="prod", command="SHOW VERTEX Person")Helping the agent pick the right environment
Users normally name an environment the way it is configured — "staging", "the prod
cluster". list_connections reports each profile's name and its host, so the agent can
also resolve the occasional bare hostname or URL to the profile that reaches it:
{
"default_profile": "dev",
"profiles": [
{"profile": "dev", "host": "http://localhost", "username": "tigergraph", "is_default": true, "connected": true},
{"profile": "prod", "host": "https://mycompany.i.tgcloud.io", "username": "analyst", "is_default": false, "connected": false},
{"profile": "staging", "host": "https://tg-staging.example.com", "username": "analyst", "is_default": false, "connected": false}
]
}Note that prod's host carries no hint of the profile name, so a user who names that
host cannot be served by guessing from profile names alone.
A system prompt that puts that to work:
You are a TigerGraph assistant. The tigergraph-mcp server may be configured
with several environments, each identified by a profile name.
Discovering profiles
- Call `list_connections` before your first data access, and again whenever
the user mentions an environment you have not seen.
- Each profile reports its name, host, and username, which one is the
default, and which are already connected.
- Never invent or hardcode a profile name.
Choosing one
- Users normally name an environment, not a machine. If the user names a
profile ("use staging", "on the prod cluster"), use that profile.
- If the user names a host or URL instead, match it against the `host`
field. Several profiles may share one host, differing only in the user
they connect as. In that case run the request against every matching
profile and report the results per profile, rather than asking which
one was meant.
- If nothing matches what the user named, say so and list the configured
profiles with their hosts. Do not guess.
- If the user says nothing about an environment, use the default profile
and mention which one you used.
Using one
- Pass `profile="<name>"` on every tool call meant for that environment.
- A single turn may use different profiles when the user compares
environments.
Reporting
- Answer about the environments the user asked about. Do not list the
profiles you considered and skipped, and do not narrate the lookup.
- Name the environment alongside each answer, so the user knows which
one it came from — especially when reporting more than one.With that prompt, a site named in plain language resolves to a profile:
User: How many vertices does MyGraph have on staging?
Agent:
→ get_vertex_count(profile="staging", graph_name="MyGraph")
"On staging: 1,204 vertices."
User: And on mycompany.i.tgcloud.io? # a host, not an environment
Agent: # tool calls, not shown to the user
→ list_connections() # prod and prod_ro share that host
→ get_vertex_count(profile="prod", graph_name="MyGraph")
→ get_vertex_count(profile="prod_ro", graph_name="MyGraph")
Agent replies:
"Two profiles reach that host:
prod (as analyst): 1,204 vertices
prod_ro (as readonly): 1,204 vertices"The reply names the environment behind each number and says nothing about dev or
staging, which the user did not ask about.
Omitting profile, or passing "default", uses the default profile — TG_DEFAULT_PROFILE if set (or its alias TG_PROFILE), otherwise the unprefixed TG_* variables.
HTTP Mode End-to-End
Run one shared server that several people or services connect to. Five steps.
1. Install with the web stack
pip install tigergraph-mcp uvicorn starlette2. Describe your TigerGraph sites
Put the environments in an env file. The unprefixed TG_* variables are the default
profile; each <NAME>_TG_* group adds another. Credentials here are optional — include
them for a shared or demo deployment, omit them to require every client to send its own:
# /etc/tigergraph-mcp/.env
TG_DEFAULT_PROFILE=prod
PROD_TG_HOST=https://mycompany.i.tgcloud.io
PROD_TG_USERNAME=analyst
PROD_TG_PASSWORD=...
STAGING_TG_HOST=https://tg-staging.example.com
STAGING_TG_USERNAME=analyst
STAGING_TG_PASSWORD=...3. Start the server
tigergraph-mcp --transport streamable-http \
--host 0.0.0.0 --port 8000 \
--env-file /etc/tigergraph-mcp/.envIt binds the port and serves until stopped, so run it under systemd, a container, or whatever supervises your services. Put a reverse proxy or API gateway in front for TLS and to control who may reach the URL.
4. Check that it is up
curl -s -o /dev/null -w '%{http_code}\n' -X POST http://localhost:8000/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'Response | Meaning |
| Up, and the default profile's credentials work |
| Up, but the request does not name a reachable site (e.g. an unknown profile) |
| Up, but no usable credentials — the client must send them |
| Up, but TigerGraph itself could not be reached |
| You omitted the trailing slash on |
connection refused | The server is not running |
5. Point a client at it
The URL is http://<host>:<port>/mcp/ — keep the trailing slash. Credentials, when the
client supplies them, travel as X-TG-* headers; omit them to use the server's default
profile as configured.
Cursor, VS Code, or any editor using mcp.json:
{
"servers": {
"tigergraph-mcp-server": {
"type": "http",
"url": "http://localhost:8000/mcp/",
"headers": {
"X-TG-Profile": "staging"
}
}
}
}The scheme is whatever the server is reachable on. tigergraph-mcp itself serves plain
HTTP and does not terminate TLS, so use http:// when connecting to it directly. A
deployed instance normally sits behind a reverse proxy that adds TLS, in which case the
URL is the proxy's — https://my-tg-mcp.internal/mcp/. Credentials travel in headers, so
anything beyond localhost should be https://.
To connect as yourself rather than as the profile's configured user, add your own credentials — keeping secrets out of the file by referencing the environment:
"headers": {
"X-TG-Host": "https://mycompany.i.tgcloud.io",
"X-TG-Api-Token": "${env:TG_API_TOKEN}"
}Python, LangChain, or any MCP SDK client: see Client Examples for
runnable versions of both. The HTTP client API differs between MCP SDK generations, so
check which one you have with pip show mcp:
# MCP SDK 2.x
import httpx2
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
async with httpx2.AsyncClient(headers={"X-TG-Profile": "staging"}) as http_client:
async with streamable_http_client(
"http://localhost:8000/mcp/", http_client=http_client
) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
await session.call_tool("tigergraph__list_graphs", {})# MCP SDK 1.x
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client(
"http://localhost:8000/mcp/", headers={"X-TG-Profile": "staging"}
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
await session.call_tool("tigergraph__list_graphs", {})Which connection a request gets
Profiles come from the server's env file, exactly as in Multiple Connection
Profiles above. A request picks one with X-TG-Profile,
and any other X-TG-* header overrides that profile's value for that session only:
Headers sent | Connection used |
| that profile's topology and its configured credentials |
| that profile's topology, the caller's identity |
Credential headers only | the default profile's topology, the caller's identity |
No headers | the default profile exactly as configured |
Whether profiles carry credentials at all is your decision when writing the env file. Credentials there are a shared identity usable by anyone who can reach the server, which suits a demo or single-user deployment; an env file with topology only forces every caller to identify itself, which is what you want when several people share the server.
Recognised headers mirror the TG_* variables used in stdio mode:
Header | Env-var equivalent |
| selects a server-side profile ( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Once connected, a tool call may still name any configured profile with its profile
argument; that connection opens in the calling session and is never shared with another.
Serving several users
Each session gets its own connections, so concurrent users never share state or credentials. Two patterns work:
Each person's editor connects directly, with their own profile or credentials in
mcp.json— the configuration shown above.An application connects on its users' behalf, opening one session per logged-in user with that user's credentials in the headers, held for their lifetime so the LLM never sees credentials. A working reference is in
examples/multi_user_backend/.
Two settings matter for a long-running server: TG_HTTP_SESSION_IDLE_TIMEOUT (default
900s) reclaims connections from sessions that have gone quiet, and
TG_HTTP_ALLOWED_PROFILES=demo,staging narrows which profiles clients may name.
Access control to the endpoint itself is the deployment's responsibility — the server checks TigerGraph credentials, not who may reach the URL. Put a reverse proxy or API gateway in front, which is also where TLS belongs.
The authenticate tool can re-point a live session mid-conversation, which is not needed
when credentials arrive as headers.
Serving a Subset of the Tools
All 69 tools are offered by default. An agent carries every tool it is given on every request, so a deployment that only needs some of them can say so:
# only the tools that read
tigergraph-mcp --allowed-tools read-only
# a task-shaped subset
tigergraph-mcp --allowed-tools schema,query
# everything except the ones that remove data
tigergraph-mcp --blocked-tools destructiveTG_ALLOWED_TOOLS and TG_BLOCKED_TOOLS do the same from the environment or an env file;
the flags win where both are set.
A selector is a comma-separated list of:
Selector | Meaning |
| a category |
| the tools that change nothing |
| the tools that may remove or overwrite something |
| one tool, with or without the prefix |
--blocked-tools is applied after --allowed-tools, so
--allowed-tools schema --blocked-tools drop_graph serves the schema tools without that one.
An unrecognised selector stops the server at startup rather than quietly serving a short
list, and a selection that leaves nothing to serve is likewise an error.
Roughly what each choice costs an agent:
Served | Tools | ~Tokens |
everything | 69 | 29,100 |
| 37 | 12,400 |
| 21 | 9,100 |
Note that discovery and utility are not added automatically. If you narrow by category,
include them where the agent needs to discover tools or route calls by profile:
--allowed-tools schema,query,discovery,utility.
Per-session narrowing over HTTP
A client may restrict its own session with an X-TG-Tools header, using the same
selectors:
{
"servers": {
"tigergraph-mcp-server": {
"type": "http",
"url": "http://localhost:8000/mcp/",
"headers": {
"X-TG-Profile": "prod",
"X-TG-Tools": "read-only"
}
}
}
}This only ever narrows. A session cannot reach a tool the deployment withheld, so asking
for destructive on a server started with --blocked-tools destructive yields no tools
rather than the blocked ones.
What a tool declares about itself
Every tool carries the MCP behavioural hints, which is how an editor decides whether to run something silently or ask first:
"annotations": {
"title": "Drop graph",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
}These reach the client, not the model, so they cost nothing in context. read-only and
destructive selectors resolve from the same classification. Tools that execute
caller-supplied query text — gsql, run_query, run_installed_query — are marked
destructive, because what they do depends on the text they are given.
Logging Tool Calls
Nothing is logged about tool calls by default. A shared deployment usually wants a record of what has been run against an instance:
tigergraph-mcp --transport streamable-http --log-tool-callsOne line per call goes to stderr:
tool call tool=tigergraph__drop_graph session=b1f2c3 host=https://mycompany.i.tgcloud.ioWho made the call is a separate opt-in, because a TigerGraph account name generally
identifies a person. It requires --log-tool-calls — on its own it does nothing, and the
server says so at startup:
# the connection profile the call used
tigergraph-mcp --log-tool-calls --log-caller profile
# the TigerGraph account as well
tigergraph-mcp --log-tool-calls --log-caller username
| Line carries |
| tool, session, host |
| the above, plus the connection profile |
| the above, plus the account name and how it authenticated |
tool call tool=tigergraph__drop_graph session=b1f2c3 host=https://mycompany.i.tgcloud.io profile=prod user=alice auth=passwordTG_LOG_TOOL_CALLS and TG_LOG_CALLER_IDENTITY do the same from the environment or an env
file; the flags win where both are set. TG_LOG_CALLER_IDENTITY is gated the same way, so
leaving it in an env file has no effect until tool-call logging is turned on — and turning
it on later will not silently start writing account names.
Two things to know before turning on username:
Callers who authenticate with a token or a GSQL secret appear as
user=-. TigerGraph tokens do not tell the server which account is behind them, so there is no name to record.The logs then contain personal data. Whatever retention, access, and disclosure rules apply to your other logs apply to these.
profileis the smaller disclosure and is often enough — it says which configured connection was used without naming anyone.
In stdio mode there is a single configured identity for the process, so every line carries the same profile and account. The record is more useful over HTTP, where each session authenticates separately.
Never logged, at any setting: passwords, GSQL secrets, API and JWT tokens, and tool arguments — arguments hold query text and vertex payloads, which is graph data rather than an audit record. Access to the endpoint itself is still the deployment's concern; a reverse proxy is where request-level access logs belong.
Using with Existing Connection
from pyTigerGraph import AsyncTigerGraphConnection
from tigergraph_mcp import ConnectionManager
async with AsyncTigerGraphConnection(
host="http://localhost",
graphname="MyGraph",
username="tigergraph",
password="tigergraph",
) as conn:
ConnectionManager.set_default_connection(conn)
# ... run MCP tools ...
# HTTP connection pool is released on exitClient Examples
Hold one session for the run.
MultiServerMCPClient(...)connects nothing, andawait client.get_tools()opens a session only to list the tools, then closes it — the returned tools carry a connection config, so each tool call opens a new session. Over stdio that spawns atigergraph-mcpprocess per call; over HTTP it creates a session, a connection, and a credential check per call. Binding tools to a session held open byclient.session(...)reuses one process (or one session and its pooled connection) for the whole run — in a measured 8-call agent run, 1 session instead of 9, and roughly 4× faster. Useget_tools()only for one-shot scripts.
LangChain / LangGraph over stdio
The client starts tigergraph-mcp as a subprocess and passes credentials as env vars.
import asyncio
from pathlib import Path
from dotenv import dotenv_values
from langchain.chat_models import init_chat_model
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
env_dict = dotenv_values(dotenv_path=Path(".env").expanduser().resolve())
client = MultiServerMCPClient(
{
"tigergraph-mcp-server": {
"transport": "stdio",
"command": "tigergraph-mcp",
"args": ["-vv"],
"env": env_dict,
},
}
)
async def main():
# One session for the whole run; every tool call reuses it.
async with client.session("tigergraph-mcp-server") as session:
tools = await load_mcp_tools(session)
agent = create_react_agent(init_chat_model("openai:gpt-4.1-mini"), tools)
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": "Which graphs are available?"}]}
)
print(result["messages"][-1].content)
asyncio.run(main())create_react_agent is one option; init_chat_model(...).bind_tools(tools) works too if
you are driving the model yourself. Either way, build the agent inside the session so
the tools stay bound to it.
Note: Instead of loading a
.envfile, you can pass credentials directly in theenvmapping:"env": { "TG_HOST": "http://localhost", "TG_USERNAME": "tigergraph", "TG_PASSWORD": "tigergraph", "TG_GRAPHNAME": "MyGraph" }Either way the credentials must be in
env: the subprocess does not inherit your shell environment.
LangChain / LangGraph over HTTP
The server is already running elsewhere; the client only connects. Credentials travel as headers, so nothing about TigerGraph needs to be configured on this side.
import asyncio
from langchain.chat_models import init_chat_model
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
client = MultiServerMCPClient(
{
"tigergraph-mcp-server": {
"transport": "streamable_http",
"url": "http://localhost:8000/mcp/", # trailing slash required
"headers": {
# Omit these entirely to use the server's default profile.
"X-TG-Profile": "staging",
"X-TG-Username": "my_user",
"X-TG-Password": "my_password",
},
},
}
)
async def main():
async with client.session("tigergraph-mcp-server") as session:
tools = await load_mcp_tools(session)
agent = create_react_agent(init_chat_model("openai:gpt-4.1-mini"), tools)
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": "How many vertices are in MyGraph?"}]}
)
print(result["messages"][-1].content)
asyncio.run(main())MCP SDK over stdio
stdio_client does not pass your environment to the subprocess — it forwards only a
minimal safe set (HOME, PATH, SHELL, …). Credentials must be supplied explicitly
via env, or the server will fall back to its defaults and try http://127.0.0.1.
import asyncio
from pathlib import Path
from dotenv import dotenv_values
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import get_default_environment, stdio_client
env_dict = dotenv_values(dotenv_path=Path(".env").expanduser().resolve())
async def main():
server_params = StdioServerParameters(
command="tigergraph-mcp",
args=["-vv"],
env={**get_default_environment(), **env_dict},
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[t.name for t in tools.tools]}")
result = await session.call_tool("tigergraph__list_graphs", arguments={})
for content in result.content:
print(content.text)
asyncio.run(main())MCP SDK over HTTP
The HTTP client API changed between MCP SDK generations. Check yours with pip show mcp
— a fresh pip install currently gets 2.x. In 1.x the function took headers and yielded
three values; in 2.x it takes an http_client carrying the headers and yields two.
# MCP SDK 2.x
import asyncio
import httpx2
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
URL = "http://localhost:8000/mcp/" # trailing slash required
HEADERS = { # omit to use the default profile
"X-TG-Profile": "staging",
}
async def main():
async with httpx2.AsyncClient(headers=HEADERS) as http_client:
async with streamable_http_client(URL, http_client=http_client) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[t.name for t in tools.tools]}")
# Every call reuses this session's pooled connection.
result = await session.call_tool("tigergraph__list_graphs", arguments={})
for content in result.content:
print(content.text)
# Route one call to another configured profile.
await session.call_tool(
"tigergraph__list_graphs", arguments={"profile": "prod"}
)
asyncio.run(main())# MCP SDK 1.x
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
URL = "http://localhost:8000/mcp/"
HEADERS = {"X-TG-Profile": "staging"}
async def main():
async with streamablehttp_client(URL, headers=HEADERS) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("tigergraph__list_graphs", arguments={})
for content in result.content:
print(content.text)
asyncio.run(main())Available Tools
Global Schema Operations
tigergraph__get_global_schema— Get the complete global schema via GSQLLS
Graph Operations
tigergraph__list_graphs— List all graph names in the databasetigergraph__create_graph— Create a new graph with schematigergraph__drop_graph— Drop a graph and its schematigergraph__clear_graph_data— Clear all data from a graph (keeps schema)
Schema Operations
tigergraph__get_graph_schema— Get schema as structured JSONtigergraph__show_graph_details— Show schema, queries, loading jobs, and data sources
Node Operations
tigergraph__add_node/tigergraph__add_nodestigergraph__get_node/tigergraph__get_nodestigergraph__delete_node/tigergraph__delete_nodestigergraph__has_nodetigergraph__get_node_edges
Edge Operations
tigergraph__add_edge/tigergraph__add_edgestigergraph__get_edge/tigergraph__get_edgestigergraph__delete_edge/tigergraph__delete_edgestigergraph__has_edge
Query Operations
tigergraph__run_query— Run an interpreted querytigergraph__run_installed_query— Run an installed querytigergraph__install_query/tigergraph__drop_querytigergraph__show_query/tigergraph__get_query_metadata/tigergraph__is_query_installedtigergraph__update_query_description/tigergraph__get_query_description— Set or read query and per-parameter descriptions (TigerGraph 4.0+)tigergraph__get_neighbors
Loading Job Operations
tigergraph__create_loading_job— from files, or from adata_source+querypair to load the result of a SQL query against a warehousetigergraph__run_loading_job_with_file/tigergraph__run_loading_job_with_datatigergraph__get_loading_jobs/tigergraph__get_loading_job_statustigergraph__drop_loading_job
Statistics Operations
tigergraph__get_vertex_count/tigergraph__get_edge_counttigergraph__get_node_degree
GSQL Operations
tigergraph__gsql— Execute raw GSQLtigergraph__generate_gsql— Generate GSQL from natural language (requires[llm])tigergraph__generate_cypher— Generate openCypher from natural language (requires[llm])
Vector Schema Operations
tigergraph__add_vector_attribute/tigergraph__drop_vector_attributetigergraph__list_vector_attributes/tigergraph__get_vector_index_status
Vector Data Operations
tigergraph__upsert_vectorstigergraph__load_vectors_from_csv/tigergraph__load_vectors_from_jsontigergraph__search_top_k_similarity/tigergraph__fetch_vector
Data Source Operations
tigergraph__create_data_source/tigergraph__update_data_sourcetigergraph__get_data_source/tigergraph__drop_data_sourcetigergraph__get_all_data_sources/tigergraph__drop_all_data_sourcestigergraph__get_data_source_types— List supported types and their configuration keystigergraph__preview_sample_data
Supported data source types:
Family | Types |
Object storage |
|
Data warehouse |
|
Lakehouse |
|
Streaming |
|
Each type takes different configuration keys. Call tigergraph__get_data_source_types
for the required keys and a worked example, or see
Loading from a data warehouse.
Credentials in config are sent to TigerGraph but masked in tool responses, so they
do not appear in a conversation transcript.
Connection / Session
tigergraph__list_connections/tigergraph__show_connection— Inspect configured profilestigergraph__authenticate— Register per-session TigerGraph credentials (HTTP/SSE mode)
Discovery & Navigation
tigergraph__discover_tools— Search for tools by description or keywordstigergraph__get_workflow— Get step-by-step workflow templatestigergraph__get_tool_info— Get detailed information about a specific tool
LLM-Friendly Features
Structured Responses
Every tool returns a consistent JSON structure:
{
"success": true,
"operation": "get_node",
"summary": "Found vertex 'p123' of type 'Person'",
"data": { ... },
"suggestions": ["View connected edges: get_node_edges(...)"],
"metadata": { "graph_name": "MyGraph" }
}Error responses include actionable recovery hints:
{
"success": false,
"operation": "get_node",
"error": "Vertex not found",
"suggestions": ["Verify the vertex_id is correct"]
}Rich Tool Descriptions
Each tool includes detailed descriptions with use cases, common workflows, tips, warnings, and related tools.
Token Optimization
Responses are designed for efficient LLM token usage — no echoing of input parameters, only new information (results, counts, boolean answers).
Tool Discovery
# Find the right tool
result = await session.call_tool("tigergraph__discover_tools",
arguments={"query": "how to add data to the graph"})
# Get a workflow template
result = await session.call_tool("tigergraph__get_workflow",
arguments={"workflow_type": "data_loading"})
# Get detailed tool info
result = await session.call_tool("tigergraph__get_tool_info",
arguments={"tool_name": "tigergraph__add_node"})Notes
Transport: stdio by default
Error Detection: GSQL operations include error detection for syntax and semantic errors
Connection Management: Connections are pooled by profile and reused across requests; pool is released at server shutdown
Performance: Persistent HTTP connection pool per profile; async non-blocking I/O;
v.outdegree()for O(1) degree counting; batch operations for multiple vertices/edges
Available Tools
69 toolstigergraph__add_edgeAIdempotent
Add a single edge (relationship) to a TigerGraph graph connecting two vertices.
Use When: • Creating a relationship between two entities • Connecting vertices in the graph • Building graph structure • Adding individual relationships
Quick Start:
{
"source_vertex_type": "Person",
"source_vertex_id": "user1",
"edge_type": "FOLLOWS",
"target_vertex_type": "Person",
"target_vertex_id": "user2",
"attributes": {"since": "2024-01-15"}
}Common Workflow:
Ensure both source and target vertices exist (use 'add_node')
Call 'add_edge' to create relationship
Optionally add edge attributes (like timestamps)
Verify with 'get_neighbors' or 'get_node_edges'
Tips: • Both vertices must exist before adding edge • Edge type must match schema definition • For multiple edges, use 'add_edges' (more efficient) • Edge attributes are optional
Related Tools: add_edges, add_node, get_neighbors, delete_edge
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edge. | |
| attributes | No | Edge attributes. Example: {'weight': 0.5, 'date': '2023-01-01'} | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| source_vertex_id | Yes | ID of the source vertex. | |
| target_vertex_id | Yes | ID of the target vertex. | |
| source_vertex_type | Yes | Type of the source vertex. | |
| target_vertex_type | Yes | Type of the target vertex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds valuable context such as the requirement that both vertices must exist, the edge type must match the schema, and that attributes are optional. It does not contradict the annotations, and the additional tips go beyond what annotations provide.
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 (Use When, Quick Start, Common Workflow, Tips, Related Tools). Every section is informative and earns its place; it is appropriately detailed without being verbose.
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 mutation tool with no output schema, the description covers the essential context: what the tool does, when to use it, prerequisites, workflow, alternatives, and verification steps. Nothing an agent needs to call it correctly is missing.
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 100% description coverage for all parameters. The description adds a quick-start JSON example that shows how parameters combine, and explicitly notes that attributes are optional, adding semantic value beyond the schema's per-field 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 states precisely that the tool adds a single edge connecting two vertices, and the 'Use When' section gives concrete scenarios. It clearly distinguishes from add_edges (multiple edges) and related tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists when to use the tool, provides a step-by-step workflow, and names the alternative add_edges for batch operations. It also states prerequisites (vertices must exist) and how to verify the result with get_neighbors/get_node_edges, leaving no ambiguity about usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__add_edgesAIdempotent
Add multiple edges (relationships) to a TigerGraph graph in a single batch operation. More efficient than calling 'add_edge' multiple times.
Use When: • Loading multiple relationships • Building graph connections in bulk • Importing relationship data from files • Initial graph construction
Quick Start:
{
"edge_type": "FOLLOWS",
"edges": [
{"from_type": "Person", "from_id": "u1", "to_type": "Person", "to_id": "u2"},
{"from_type": "Person", "from_id": "u2", "to_type": "Person", "to_id": "u3"}
]
}Common Workflow:
Add all vertices first with 'add_nodes'
Use 'add_edges' to create relationships
Verify with 'get_edge_count'
Tips: • All edges in one call must be same edge type • All referenced vertices must exist • Batch size: 1000-5000 edges per call is optimal • Much faster than individual 'add_edge' calls
Related Tools: add_edge, add_nodes, get_edge_count
| Name | Required | Description | Default |
|---|---|---|---|
| edges | Yes | List of edges. Each edge is a dict with source and target info. Must specify 'source_id' (or 'source_vertex_id') and 'target_id' (or 'target_vertex_id'). Can also optionally specify 'source_type' and 'target_type' per edge if different from defaults, though batch edges usually share types. All edges in one batch MUST have the same source/target types due to API limitations. Example: [{'source_id': 'u1', 'target_id': 'p1', 'date': '2023'}] | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edges. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotency and non-destructiveness. The description goes further by disclosing operational constraints: all edges must share the same edge type, vertices must pre-exist, optimal batch size is 1000-5000 edges, and batch calls are faster than repeated add_edge calls. This adds meaningful behavior beyond the structured annotations, though it doesn't address failure semantics.
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, bullet lists, a code example, and a front-loaded purpose. It is fairly long but each section serves a distinct purpose, with only minor redundancy between 'more efficient' and 'much faster than individual add_edge calls.'
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 batch write tool, the description covers when to use it, how to sequence it with add_nodes and get_edge_count, preconditions, and batch constraints. It does not explain return values or partial-failure behavior, but with no output schema and rich annotations, the provided context is largely 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 description coverage is 100%, so the baseline is 3. The description adds a Quick Start example and tips, but the example uses keys like 'from_type', 'from_id', 'to_type', and 'to_id,' which conflict with the schema's documented 'source_id' and 'target_id' keys. This inconsistency undermines the added value and prevents a higher score.
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 first sentence clearly states the tool's function: 'Add multiple edges (relationships) to a TigerGraph graph in a single batch operation.' It also distinguishes itself from the sibling add_edge tool by emphasizing batch efficiency, so an agent can immediately tell them apart.
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 When' conditions, a 'Common Workflow' section, and named related tools. It clearly frames this tool as the batch alternative to add_edge and includes prerequisites like 'All referenced vertices must exist,' giving an agent concrete guidance on when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__add_nodeAIdempotent
Add a single node (vertex) to a TigerGraph graph. This performs an upsert operation - creates a new vertex if it doesn't exist, or updates attributes if it does.
Use When: • Creating a single new entity (user, product, document, etc.) • Updating an existing vertex's attributes • You have individual entities to add (not batch loading)
Quick Start:
{
"vertex_type": "Person",
"vertex_id": "user123",
"attributes": {"name": "Alice", "age": 30}
}Common Workflow:
Call 'show_graph_details' to understand vertex types and attributes
Use 'add_node' to create individual vertices
Call 'get_node' to verify the vertex was created
Use 'add_edge' to connect this vertex to others
Tips: • For multiple vertices: Use 'add_nodes' instead (more efficient) • Primary key is required (usually the 'id' attribute) • Attribute names must match the schema exactly (case-sensitive) • This is an upsert: existing vertices are updated, not duplicated
More Examples:
// Add a product
{
"vertex_type": "Product",
"vertex_id": "prod456",
"attributes": {"name": "Laptop", "price": 999.99, "category": "Electronics"}
}
// Add a document with minimal attributes
{
"vertex_type": "Document",
"vertex_id": "doc789",
"attributes": {"title": "Report Q4 2024"}
}Related Tools: • add_nodes - Batch insert multiple vertices • get_node - Retrieve a vertex by ID • delete_node - Remove a vertex • has_node - Check if vertex exists
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vertex_id | Yes | ID of the vertex (primary key value). Format: String or integer depending on schema. Example: 'user123', 'product_456', or 12345 Note: Must be unique within the vertex type. | |
| attributes | No | Vertex attributes as key-value pairs. Keys must match the vertex type schema. Values should match the expected data types. Example: {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'} Tip: Use 'show_graph_details' to see required attributes and types. | |
| graph_name | No | Name of the graph. If not provided, uses the default connection. Tip: Use 'list_graphs' to see available graphs. | |
| vertex_type | Yes | Type of the vertex (must exist in graph schema). Example: 'Person', 'Product', 'Company' Tip: Use 'show_graph_details' to see available vertex types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by revealing the upsert behavior, stating that existing vertices are updated rather than duplicated, and emphasizing exact schema matching. However, it does not clarify whether omitted attributes are preserved or overwritten on an update, which is important for a mutation tool that can modify existing data. This is the main transparency gap.
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 headings, code examples, and a front-loaded purpose statement. It is longer than strictly necessary, with some redundancy between the 'Use When' bullets and the 'Tips' section, but every major section still serves a useful role for a complex graph 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?
For a 5-parameter mutation tool with no output schema, the description supplies a discovery workflow, practical examples, and routing to verification via get_node. It does not describe return values or failure behavior on schema violations, but the included workflow compensates sufficiently for a tool of this complexity.
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 100%, so the baseline is 3, but the description adds a full quick-start payload and concrete examples that show how vertex_type, vertex_id, and attributes fit together. The tips about the primary key requirement and case-sensitive attribute names also add practical meaning beyond the schema, though the schema already handles most parameter documentation.
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 first sentence states a specific verb and resource: 'Add a single node (vertex) to a TigerGraph graph.' It immediately clarifies the upsert semantics and explicitly contrasts with batch loading, distinguishing it from sibling tools like add_nodes. An agent can tell exactly what this tool does without opening the schema.
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 'Use When' section gives clear criteria for single-entity creation or update, and the tips explicitly say to use add_nodes for multiple vertices. The 'Common Workflow' and 'Related Tools' sections further guide the agent to show_graph_details, verify with get_node, and connect with add_edge, leaving little ambiguity about when and how to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__add_nodesAIdempotent
Add multiple nodes (vertices) to a TigerGraph graph in a single batch operation. This is significantly more efficient than calling 'add_node' multiple times.
Use When: • Loading multiple vertices of the same type • Importing data from CSV, JSON, or database • Initial data population • Bulk updates to existing vertices
Quick Start:
{
"vertex_type": "Person",
"vertices": [
{"id": "user1", "name": "Alice", "age": 30},
{"id": "user2", "name": "Bob", "age": 25}
]
}Common Workflow:
Call 'show_graph_details' to understand the schema
Prepare your data with primary keys and attributes
Use 'add_nodes' to load vertices in batches
Call 'get_vertex_count' to verify loading
Use 'add_edges' to create relationships
Tips: • Set 'vertex_id' to match your schema's primary key name (default: 'id') • For SARGraph: vertex_id='ACCOUNT_ID' for Account vertices • All vertices must be the same type • For very large datasets (>10K vertices), consider using loading jobs • Batch size: 1000-5000 vertices per call is optimal
Warning: Common Mistakes: • Missing primary key in one or more vertices • Using wrong vertex_id name (check schema with show_graph_details) • Mixing different vertex types in one call • Attribute name typos (must match schema exactly) • Wrong data types (e.g., string instead of int)
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vertices | Yes | List of vertices to add. Each vertex must contain the primary key field (specified by 'vertex_id' parameter) and other attributes matching the schema. Example with default vertex_id='id': ```json [ {"id": "user1", "name": "Alice", "age": 30}, {"id": "user2", "name": "Bob", "age": 25} ] ``` Example with vertex_id='ACCOUNT_ID': ```json [ {"ACCOUNT_ID": 1001, "COUNTRY": "US", "ACCOUNT_TYPE": "savings"}, {"ACCOUNT_ID": 1002, "COUNTRY": "UK", "ACCOUNT_TYPE": "checking"} ] ``` Note: All vertices will be processed in a single batch operation for efficiency. | |
| vertex_id | No | Name of the primary key field in the vertex dictionaries. This tells the tool which field contains the vertex ID. Default: 'id'. Set to match your schema's primary key name. Examples: 'id', 'ACCOUNT_ID', 'TX_ID' | id |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Type of the vertices (all vertices must be the same type). Example: 'Person', 'Product' Tip: Use 'show_graph_details' to see available types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the description only needs to add context. It adds optimal batch sizes (1000-5000), the requirement that all vertices share the same type, and the fact that bulk updates to existing vertices are possible (consistent with idempotent upsert). This is useful behavioral detail beyond the structured fields.
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 organized with clear headings: Use When, Quick Start, Common Workflow, Tips, Warning. It is verbose but each section contributes useful guidance, and the key purpose and efficiency claim are front-loaded. It could be tightened slightly but 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?
For a tool with 5 parameters, no output schema, and moderate complexity, this description covers everything an agent needs: purpose, use cases, workflow, parameter tips, and common pitfalls. It also references related tools for verification (show_graph_details, get_vertex_count, add_edges). The only minor gap is not describing the return value, but that is often omitted.
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 100%, so the baseline is 3. The description adds real value by giving a specific SARGraph example (ACCOUNT_ID), batch size recommendations, and common mistakes to avoid, which go beyond the parameter descriptions. This helps the agent choose correct values for vertex_id and structure the vertices array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add multiple nodes (vertices) to a TigerGraph graph in a single batch operation.' It immediately distinguishes from the sibling 'add_node' by noting it is 'significantly more efficient than calling add_node multiple times.' This makes the tool's purpose unmistakable and well-differentiated.
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 a dedicated 'Use When' list covering loading multiple vertices, importing data, initial population, and bulk updates. It also names alternatives: single-node 'add_node' for fewer inserts and loading jobs for datasets over 10K vertices. These explicit conditions and exclusions give the agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__add_vector_attributeA
Add a vector attribute to an existing vertex type. Creates a schema change job to ALTER VERTEX with ADD VECTOR ATTRIBUTE.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Similarity metric: 'COSINE', 'L2' (Euclidean), or 'IP' (inner product). | COSINE |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| dimension | Yes | Dimension (length) of the vector. Max 4096 for Community, 32768 for Enterprise. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vector_name | Yes | Name of the vector attribute. | |
| vertex_type | Yes | Name of the vertex type to add the vector attribute to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations by clarifying that this is a DDL operation that creates a schema change job to ALTER VERTEX. This helps the agent understand it is a schema mutation rather than a data operation, although it does not disclose whether the job is asynchronous or what the return payload looks like.
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?
Two concise sentences with the primary action front-loaded and the technical mechanism in the second sentence. No filler or redundant restatement of the tool name.
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 definition is complete enough for correct invocation: the action is clear, all parameters are documented, and the annotations indicate a non-read-only, non-idempotent mutation. The main gap is that it does not explain the post-call behavior or how to verify the schema change, but this is not critical for selecting and calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all six parameters with descriptions, so schema coverage is 100%. The description adds minimal parameter-level detail beyond that, but none is strictly needed because the schema carries the semantic weight.
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 action and resource: adding a vector attribute to an existing vertex type. It also names the underlying mechanism (schema change job / ALTER VERTEX), which clearly separates it from related sibling tools like drop_vector_attribute or list_vector_attributes.
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 intended use is implied and reasonably clear: extend an existing vertex type with a vector attribute. However, the description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention alternatives such as update_schema for non-vector schema changes or upsert_vectors for loading vector data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__authenticateAIdempotent
Register TigerGraph credentials for the current MCP session.
Re-points one of the session's connections at a TigerGraph instance. Omit profile to replace the default profile's connection, or name a profile to replace only that one, leaving the session's other profiles untouched. Stdio mode uses env-var profiles instead and does not need this tool.
Either api_token/jwt_token OR username + password must be supplied. The credentials live only in the session's in-memory connection pool and are dropped on disconnect.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | TigerGraph host URL, e.g. https://acme.tgcloud.io. | |
| secret | No | TigerGraph GSQL secret (alternative to password auth). | |
| gs_port | No | GSQL Server port (default 14240). | |
| profile | No | Profile whose connection these credentials replace. Omit, or pass 'default', to replace the default profile's connection. Only this profile is affected; other profiles in the session keep theirs. | |
| password | No | TigerGraph password (password auth). | |
| ssl_port | No | SSL port (default 443). | |
| tg_cloud | No | True if connecting to TigerGraph Cloud. | |
| username | No | TigerGraph username (password auth). | |
| api_token | No | TigerGraph REST++ API token (token auth). | |
| cert_path | No | Path to a CA bundle for TLS verification. | |
| graphname | No | Default graph for this session. | |
| jwt_token | No | TigerGraph JWT token (token auth). | |
| restpp_port | No | REST++ port (default 9000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds valuable context: credentials live only in the session's in-memory connection pool and are dropped on disconnect. It also clarifies that omitting profile replaces the default profile's connection, and that other profiles are untouched. This goes beyond the annotations without contradicting them.
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 and front-loaded with the core purpose, then explains the profile behavior, stdio exception, and auth requirements. It's a bit long but every sentence earns its place; no filler or repetition.
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 credential-registration tool with 13 parameters and no output schema, the description covers the essential context: what the tool does, when it's needed, how profiles work, and the auth alternatives. It doesn't explain return values, but the tool's purpose is clear enough that an agent can call it correctly. The stdio exception and in-memory scope are valuable additions.
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 100%, so the schema already documents all 13 parameters. The description adds some meaning by explaining the auth alternatives (api_token/jwt_token OR username+password) and the profile semantics, but it doesn't add much detail beyond what the schema already provides. Baseline 3 is appropriate.
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 ('Register') and resource ('TigerGraph credentials for the current MCP session'), and clearly distinguishes this from sibling tools like list_connections and show_connection. It also explains the re-pointing behavior, which makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (to register credentials for a session), when not to use it (stdio mode uses env-var profiles and does not need this tool), and how to target a specific profile vs the default. It also states the required auth alternatives (api_token/jwt_token OR username+password), which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__clear_graph_dataADestructiveIdempotent
Clear all data (vertices and edges) from a specific graph while keeping its schema structure intact. This is a destructive operation that removes all graph data.
Use When: • Resetting a graph to empty state • Clearing test data before loading production data • Starting data reload with same schema
Quick Start:
{
"graph_name": "MyGraph",
"confirm": true
}WARNING: • Deletes ALL vertices and edges in the graph • Operation is PERMANENT and cannot be undone • Must set 'confirm': true to execute • Schema (vertex/edge types) remains intact
Tips: • Preserves schema, only clears data • To delete everything including schema, use 'drop_graph' • Always backup important data first • Can specify 'vertex_type' to clear only specific type
Related Tools: drop_graph, get_vertex_count, delete_nodes
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be True to confirm the deletion. This is a destructive operation. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | No | Type of vertices to clear. If not provided, clears all data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations that already flag destructive behavior, the description adds critical operational warnings: the operation is permanent, cannot be undone, requires 'confirm': true, and preserves schema. This goes above what the structured annotations provide and fully discloses the destructive nature.
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, use cases, quick start, warnings, and tips. It is somewhat long, but every section earns its place for a destructive tool where caution is essential.
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 destructive tool with no output schema, the description covers all the operational context an agent needs: what gets cleared, what remains, confirmation requirement, permanence, and related tools. Nothing essential is missing for correct 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?
Schema description coverage is 100%, so the input schema already explains each parameter. The description adds a quick-start example and reinforces that 'confirm' must be true, but it does not add substantial new meaning beyond the schema definitions.
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: clear all data (vertices and edges) from a graph while preserving schema. It also explicitly distinguishes itself from 'drop_graph' by clarifying that the schema remains intact, making the intended operation 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?
The 'Use When' section lists concrete scenarios like resetting a graph or clearing test data. It also gives an explicit alternative: use 'drop_graph' to delete everything including schema, which helps an agent choose correctly among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__create_data_sourceA
Create a new data source for loading data from object storage (S3, GCS, Azure Blob), a data warehouse (Snowflake, BigQuery, PostgreSQL), an Iceberg catalog, or Kafka. Call 'get_data_source_types' first if unsure which keys a type needs; if the server rejects the request, the response includes the keys that type requires.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | Configuration for the data source, without the 'type' key. Key names are type-specific: Snowflake takes 'connection.url', 'connection.user', and 'connection.password'; S3 takes 'access.key' and 'secret.key'. Call 'get_data_source_types' for each type's required keys and an example. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| data_source_name | Yes | Name of the data source. | |
| data_source_type | Yes | Type of data source, normally one of: 's3' (Amazon S3), 'gcs' (Google Cloud Storage), 'abs' (Azure Blob Storage), 'kafka' (External Kafka), 'kafka_v2' (External Kafka (v2 connector)), 'mirrormaker' (Kafka MirrorMaker), 'iceberg' (Apache Iceberg), 'snowflake' (Snowflake), 'bigquery' (Google BigQuery), 'postgresql' (PostgreSQL). 'azure_blob' is accepted as an alias for 'abs'. Any other value is passed to TigerGraph unchanged, which decides whether it is valid. Call 'get_data_source_types' for the configuration keys each type needs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false, destructiveHint=false), but the description adds no additional behavioral context beyond the schema's hints—no mention of idempotency, potential side effects, or authorization requirements. While the description mentions server rejection, it doesn't cover failure modes or partial states. With annotations already covering safety profile, the description adds some value (server rejection behavior), but not rich depth.
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 a single, information-dense sentence that front-loads the core purpose and lists supported sources efficiently. It could be slightly more structured, but it is concise and avoids redundancy.
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 no output schema and complex type-specific configuration, the description, combined with the schema's parameter details, provides sufficient guidance for invocation. It includes cross-references to sibling tools for further detail, covering the main gap (type-specific keys) without overloading the description. The only minor omission is a concrete example, but that is delegated appropriately.
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 100%, so the schema already provides detailed descriptions for all parameters, including type-specific config keys and profile guidance. The description adds minimal extra value beyond reinforcing the need to call get_data_source_types. Baseline of 3 is appropriate since schema carries the load.
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 (create a new data source) and the resource (data source), and enumerates the supported sources (S3, GCS, Azure Blob, Snowflake, etc.). It distinguishes itself from sibling tools like update_data_source and get_data_source_types, and even references the latter for guidance.
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 instructs to call 'get_data_source_types' first if unsure about required keys, providing a clear alternative for usage. It also hints at behavior on server rejection (response includes required keys), giving practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__create_graphA
Create a new graph in the TigerGraph database with its schema (vertex types and edge types). Each graph has its own independent schema.
Use When: • Creating a new graph from scratch • Setting up a graph with specific vertex and edge types • Initializing a new project or data model • Defining the structure before loading data
Quick Start:
{
"graph_name": "SocialNetwork",
"vertex_types": [
{
"name": "Person",
"primary_id": "id",
"primary_id_type": "STRING",
"attributes": [
{"name": "name", "type": "STRING"},
{"name": "age", "type": "INT"}
]
}
],
"edge_types": [
{
"name": "FOLLOWS",
"from_vertex": "Person",
"to_vertex": "Person",
"directed": true,
"attributes": [
{"name": "since", "type": "STRING"}
]
}
]
}Common Workflow:
Use 'list_graphs' to check if graph name is available
Design your vertex types and edge types
Call 'create_graph' with the schema
Use 'show_graph_details' to verify it was created correctly
Start loading data with 'add_node' and 'add_edge'
Vertex Primary Key Options:
• Default: auto-generates PRIMARY_ID id STRING with primary_id_as_attribute
• Explicit PRIMARY_ID: set primary_id (string) and primary_id_type on vertex type
• PRIMARY KEY mode: set primary_key: true on one attribute (not GraphStudio compatible)
• Composite key: set primary_id to a list of attribute names, e.g. ["title", "year"]
All listed attributes must exist in the attribute list (not GraphStudio compatible)
• The key is always queryable as a regular attribute
Tips: • Define all vertex types before edge types • Edge types reference vertex types by name • Set 'directed': false on edge types for undirected edges (default: directed) • Consider using 'get_workflow' for step-by-step guidance
Related Tools: list_graphs, show_graph_details, drop_graph
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_types | No | List of edge type definitions for this graph. | |
| graph_name | Yes | Name of the new graph to create. | |
| vertex_types | Yes | List of vertex type definitions for this graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: graphs have independent schemas, primary_id has multiple modes with GraphStudio compatibility caveats, the key remains queryable as an attribute, and vertex types should be defined before edge types. This materially helps an agent predict side effects and constraints. No contradiction with the provided annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear headings, a code example, bullet lists, and a workflow. Every section adds actionable information, and the core purpose statement is front-loaded. The length is justified by the complexity of defining a graph schema.
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 no output schema and four parameters, the description covers the essential context: when to use it, how to shape the schema payload, what primary key options exist, compatibility caveats, and how to verify the result with sibling tools. Nothing critical for an agent to invoke it correctly is missing.
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?
Even though the schema already describes all four parameters at a high level, the description deeply enriches the meaning of vertex_types and edge_types with a full JSON quick-start example, primary key options, composite key rules, and the directed edge default. The edge_types parameter, which is only loosely typed as an object array in the schema, is clarified considerably.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a new graph in the TigerGraph database with its schema (vertex types and edge types).' It clearly distinguishes this tool from siblings like list_graphs, drop_graph, and update_schema by framing it as the creation/initialization operation.
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?
A dedicated 'Use When' section lists concrete conditions such as 'Creating a new graph from scratch' and 'Defining the structure before loading data.' The 'Common Workflow' explicitly names related tools like list_graphs, show_graph_details, add_node, and add_edge, giving the agent a clear call sequence and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__create_loading_jobA
Create a loading job from structured configuration. The job defines how to load data from files into vertices and edges. Each file config specifies: file alias, separator, header, EOL, and mappings. Node mappings define which columns map to vertex attributes. Edge mappings define source/target columns and edge attributes. Optionally run the job immediately and drop it after execution.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | List of file configurations. Each file must have a 'file_alias' and 'node_mappings' and/or 'edge_mappings'. Example: [{'file_alias': 'f1', 'node_mappings': [...]}] | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| run_job | No | If True, run the loading job immediately after creation. | |
| job_name | Yes | Name for the loading job. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| drop_after_run | No | If True, drop the job after running (only applies if run_job=True). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (all false), so the description must carry the burden. It discloses that the job can be run immediately and dropped, which is useful, but it does not mention side effects like overwriting existing jobs, required permissions, or failure behavior. This is a moderate disclosure for a creation 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 (5 sentences) and front-loads the core purpose. Each sentence adds relevant information without redundancy, making it easy to scan and understand quickly.
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?
There is no output schema, and the description does not explain what the tool returns or any prerequisites (e.g., needing an existing graph or schema). It also omits error conditions and the implications of the run_job/drop_after_run flags beyond their existence. For a tool with complex nested configuration, this is adequate but not fully 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 description coverage is 100%, so all parameters are documented in the schema. The description adds only a high-level summary of file config, node mappings, and edge mappings, which largely repeats the schema. It provides marginal value beyond the schema, so a baseline 3 is appropriate.
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 creates a loading job and summarizes what the job does (loads data from files into vertices and edges). It distinguishes from siblings like run_loading_job_with_file and drop_loading_job by focusing on the creation aspect, though it doesn't explicitly name alternatives.
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 implies this tool is for creating (and optionally running) loading jobs, but it does not explicitly state when to use it versus other loading job tools. It does mention the run_job and drop_after_run options, which gives some guidance on optional behavior, but lacks explicit exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__delete_edgeADestructiveIdempotent
Delete a single edge (relationship) from a TigerGraph graph.
Use When: • Removing a specific relationship • Disconnecting two vertices • Graph maintenance
Quick Start:
{
"source_vertex_type": "Person",
"source_vertex_id": "user1",
"edge_type": "FOLLOWS",
"target_vertex_type": "Person",
"target_vertex_id": "user2"
}Warning: • Operation is permanent • Does not delete the vertices, only the edge
Related Tools: delete_edges, add_edge, has_edge
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edge. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| source_vertex_id | Yes | ID of the source vertex. | |
| target_vertex_id | Yes | ID of the target vertex. | |
| source_vertex_type | Yes | Type of the source vertex. | |
| target_vertex_type | Yes | Type of the target vertex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation destructive, read-write, and idempotent. The description adds value by warning that the operation is permanent and clarifying that it deletes only the edge, not the connected vertices. This goes beyond the annotation flags without contradicting them.
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 Use When, Quick Start, Warning, and Related Tools sections, and the main action is front-loaded. The content is mostly purposeful, though the 'Graph maintenance' bullet is slightly generic and the Quick Start block adds length without being strictly necessary.
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 straightforward single-edge delete, the description covers the effect, permanence, scope, and required arguments via the example. It does not specify behavior when the edge does not exist or describe the response/return value, but given the simple operation and strong schema/annotations, these are minor 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 100%, so the schema already documents all seven parameters. The description contributes a Quick Start JSON example showing how the five required parameters fit together, but it does not add deeper meaning about profile, graph_name, or vertex ID semantics 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 opening sentence names a specific verb ('Delete'), a specific resource ('edge'), and a scope qualifier ('single') that distinguishes it from sibling tools like delete_edges. The Related Tools line reinforces the distinction by naming delete_edges, add_edge, and has_edge.
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 'Use When' section gives concrete scenarios such as removing a specific relationship or disconnecting two vertices. It does not explicitly state when to prefer delete_edges or has_edge, but the 'single edge' qualifier and Related Tools list make the intended context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__delete_edgesADestructiveIdempotent
Delete multiple edges (relationships) from a TigerGraph graph.
Use When: • Removing multiple relationships • Bulk edge deletion • Graph restructuring
Quick Start:
{
"edge_type": "FOLLOWS",
"edges": [
{"from_type": "Person", "from_id": "u1", "to_type": "Person", "to_id": "u2"},
{"from_type": "Person", "from_id": "u2", "to_type": "Person", "to_id": "u3"}
]
}Warning: • Operation is permanent and cannot be undone • Does not delete vertices
Related Tools: delete_edge, add_edges
| Name | Required | Description | Default |
|---|---|---|---|
| edges | Yes | List of edges with source and target vertex IDs. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edges. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds specifics: a warning that the operation is permanent and cannot be undone, and that it does not delete vertices. This clarifies the destructive scope beyond the generic annotation, adding value.
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 efficiently organized with a clear intro, 'Use When' bullet points, a compact JSON example, a warning section, and related tools. It is front-loaded with the purpose, avoids redundancy, and every section serves a practical function.
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 destructive bulk operation, the description covers usage conditions, provides a working example, warns about irreversibility and vertex behavior, and lists related tools. Parameter definitions are in the schema. Minor gaps like not elaborating on profile/graph_name usage (though schema covers them) or return behavior (no output schema) are acceptable here.
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?
While schema coverage is 100%, the schema's description for 'edges' is vague ('List of edges with source and target vertex IDs'). The Quick Start example explicitly shows nested fields (from_type, from_id, to_type, to_id), giving agents concrete understanding of the required structure. This meaningfully enhances parameter semantics 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 a precise statement: 'Delete multiple edges (relationships) from a TigerGraph graph.' It specifies the verb (delete), resource (edges), and scope (multiple), clearly distinguishing from the sibling delete_edge (singular) without ambiguity.
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?
A dedicated 'Use When' section lists concrete scenarios (removing multiple relationships, bulk edge deletion, graph restructuring) and related tools (delete_edge, add_edges) are mentioned. However, it does not explicitly state when not to use (e.g., for a single edge) or give a comparative decision rule between delete_edges and delete_edge, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__delete_nodeADestructiveIdempotent
Purpose: Delete a single vertex (node) from the graph by its ID.
When to Use:
Remove a specific vertex from the graph
Clean up obsolete data
Delete test data
Remove entities based on business logic
Important Notes:
Warning: This operation is permanent and cannot be undone
Connected edges will also be deleted (CASCADE behavior)
Verify the vertex exists before deletion if needed
Common Workflows:
Safe delete:
has_node()→delete_node()→ verify withget_node()Bulk delete: Use
delete_nodes()with WHERE clause instead
Tips:
Use has_node() first to verify existence
Consider the impact on connected edges
For multiple deletions, use delete_nodes() for better performance
Related Tools:
delete_nodes: Delete multiple vertices at once
has_node: Check if vertex exists before deletion
get_node: Verify deletion completed
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vertex_id | Yes | The unique identifier of the vertex to delete | |
| graph_name | No | Name of the graph (uses default if not specified) | |
| vertex_type | Yes | The type of the vertex to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds genuinely new behavioral context: the operation is 'permanent and cannot be undone', and 'Connected edges will also be deleted (CASCADE behavior)'. It also advises verifying existence beforehand. These details go well beyond the structured hints and alert the agent to irreversible side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections (Purpose, When to Use, Important Notes, Common Workflows, Tips, Related Tools) and front-loaded purpose. Each section earns its place for a destructive operation; however, there is minor redundancy — the Tips section partially repeats the Workflows section ('Use has_node() first' and 'use delete_nodes() for better performance' both appear twice). Slight tightening would make it flawless.
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 destructive nature, 4 parameters, and no output schema, the description is remarkably complete: it covers what the tool does, when to use it, irreversible consequences, CASCADE edge behavior, a safe-delete workflow, and the relevant alternatives. No output schema exists, so not detailing return values is acceptable. An agent has everything needed to invoke this tool correctly and safely.
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 100%, with all four parameters (profile, vertex_id, graph_name, vertex_type) already documented in the input schema. The description adds nothing meaningful about parameter semantics — it notes deletion 'by its ID' but does not elaborate on vertex_id format, vertex_type usage, or how profile/graph_name affect the operation. Per the rubric, baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete a single vertex (node) from the graph by its ID' — a specific verb, resource, and scope of deletion. It explicitly distinguishes itself from delete_nodes by emphasizing 'single', and the Related Tools section reinforces the contrast. An agent can immediately tell this tool apart from its plural counterpart without inspecting the sibling definitions.
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?
A dedicated 'When to Use' section lists concrete scenarios: removing a specific vertex, cleaning up obsolete data, deleting test data, and business-logic removal. It also gives explicit alternatives: 'delete_nodes()' for bulk deletion with WHERE clauses, and a safe-delete workflow ('has_node() → delete_node() → verify with get_node()'). The guidance is actionable and leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__delete_nodesADestructiveIdempotent
Purpose: Delete multiple vertices (nodes) from the graph in a single operation.
When to Use:
Bulk deletion of vertices matching criteria
Delete specific set of vertices by IDs
Clear all vertices of a type
Data cleanup operations
Important Notes:
Warning: This operation is permanent and cannot be undone
Warning: Omitting WHERE will delete ALL vertices of the specified type
Connected edges will also be deleted (CASCADE behavior)
More efficient than multiple delete_node() calls
Usage Modes:
By WHERE clause:
delete_nodes(vertex_type='Person', where='age > 70')By ID list:
delete_nodes(vertex_type='Person', vertex_ids=['id1', 'id2'])Delete all:
delete_nodes(vertex_type='TempData')(no where/ids)
Safety Tips:
ALWAYS test WHERE clause with get_nodes() first
Use get_vertex_count() to verify expected deletion count
Consider backing up data before bulk deletions
Related Tools:
delete_node: Delete a single vertex
get_nodes: Preview vertices before deletion
get_vertex_count: Check deletion impact
| Name | Required | Description | Default |
|---|---|---|---|
| where | No | Filter condition to select vertices to delete. Use TigerGraph WHERE syntax. Examples: - 'age > 70' - 'status == "inactive"' - 'created_date < "2020-01-01"' Warning: If omitted, ALL vertices of this type will be deleted! | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph (uses default if not specified) | |
| vertex_ids | No | Optional list of specific vertex IDs to delete (alternative to WHERE clause) | |
| vertex_type | Yes | The type of vertices to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes further by warning that deletion is permanent and cannot be undone, that omitting WHERE deletes ALL vertices of the type, and that connected edges are deleted via CASCADE. These are critical behavioral details that an agent needs to know before invoking a destructive operation. It adds context beyond the annotations without contradiction.
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-organized with clear sections: Purpose, When to Use, Important Notes, Usage Modes, Safety Tips, and Related Tools. It front-loads the purpose and critical warnings (permanence, cascade) before diving into modes. Each sentence contributes actionable information, and the structure makes it easy to scan. No redundancy or filler.
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 destructive bulk operation, the description is complete. It covers all usage modes, safety precautions, the cascade behavior, and references related tools for preview and verification. It even includes examples for WHERE clauses. There is no output schema, but that is not necessary for a deletion tool. An agent has everything needed to invoke it correctly and safely.
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 100%, so parameters are already well-documented. The description adds value by explaining usage modes (by WHERE, by ID list, delete all) and providing concrete examples of WHERE syntax (e.g., 'age > 70'). It also clarifies the relationship between where and vertex_ids as alternatives, which is not fully explicit in the schema. This goes beyond the schema baseline of 3.
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 purpose is explicitly stated as 'Delete multiple vertices (nodes) from the graph in a single operation.' It clearly identifies the verb (delete), resource (vertices/nodes), and scope (multiple, single operation). It also distinguishes itself from the sibling delete_node by noting it handles bulk deletion and is more efficient, making it easy for an 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 'When to Use' section lists specific scenarios: bulk deletion, deletion by IDs, clearing all vertices of a type, and data cleanup. It also explicitly names alternatives (delete_node for single vertex, get_nodes for preview, get_vertex_count for impact) and provides safety tips like testing with get_nodes first. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__discover_toolsARead-onlyIdempotent
Discover which TigerGraph tools are relevant for your task.
Use this tool when:
You're unsure which tool to use for your goal
You want to explore available capabilities
You need suggestions for accomplishing a task
Returns:
List of recommended tools with descriptions
Use cases and complexity ratings
Prerequisites and related tools
Example parameters
Example: task_description: 'I want to add multiple users to the graph'
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tools to return (default: 5) | |
| category | No | Filter by category: 'schema', 'data', 'query', 'vector', 'loading', 'utility'. Leave empty to search all categories. | |
| task_description | Yes | Describe what you want to accomplish in natural language. Examples: - 'add multiple users to the graph' - 'find similar documents using embeddings' - 'understand the graph structure' - 'load data from a CSV file' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by detailing the output contents (recommended tools, use cases, complexity ratings, prerequisites, related tools, example parameters), which is not apparent from the schema alone. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear headers and a concrete example, making it easy to scan. It is slightly longer than strictly necessary but each section adds value, and the core purpose is front-loaded. It earns a 4 for its organized, informative layout without being bloated.
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 3 parameters, no output schema, and no nested objects, the description is complete. It covers when to use, what to expect as output, and provides an example invocation. Nothing an agent needs to decide whether and how to call it is missing.
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 100%, so all three parameters (limit, category, task_description) are already well described in the schema. The description adds an example for task_description and clarifies the default behavior of limit and category, but this is marginal beyond the schema. The baseline of 3 applies because the schema handles the documentation adequately.
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 a specific verb ('Discover') and resource ('TigerGraph tools'), and it is unambiguous about its purpose as a meta-tool for tool selection. It distinguishes itself from all sibling tools, which perform specific operations, making it obvious when this one is needed.
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 lists three concrete scenarios for use: when unsure which tool to use, when exploring capabilities, and when needing suggestions. This gives clear guidance on when to invoke it, and since it is a unique discovery tool, no alternatives are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_all_data_sourcesADestructiveIdempotent
Drop all data sources. WARNING: This is a destructive operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be True to confirm dropping all data sources. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the destructive nature already captured by destructiveHint=true, so it adds no new behavioral context beyond the annotation. It does not disclose irreversibility, effects on dependent objects, or the idempotentHint already present. With annotations carrying the safety profile, the warning is adequate but not additive.
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 extremely concise—two sentences with no filler words. The primary action is front-loaded and the warning immediately follows. Every word earns its place, keeping the message crisp and actionable.
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?
As a bulk destructive operation, the description lacks details on irreversible consequences or what happens to associated resources after all data sources are dropped. However, the schema explains the confirm guard and profile selection, and annotations already flag destructiveness. This reaches the minimum viable level for a simple tool with rich schema coverage.
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?
Both confirm and profile parameters are fully described in the input schema, with schema coverage at 100%. The description adds no parameter-specific meaning, such as the requirement to set confirm=true to proceed. Baseline 3 is appropriate because the schema handles parameter documentation.
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 'Drop all data sources' with a specific verb and resource scope. The word 'all' distinguishes it from the sibling tool drop_data_source, which targets a single data source. The warning about destructiveness adds further clarity about the operation's impact.
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 no guidance on when to use this tool versus alternatives such as drop_data_source for removing a single data source. No explicit exclusions, prerequisites, or condition-based selection criteria are given. The destructive warning implies caution but does not explain usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_data_sourceADestructiveIdempotent
Drop (delete) a data source.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| data_source_name | Yes | Name of the data source to drop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description's 'Drop (delete)' aligns with the destructive nature. The description adds minimal behavioral context beyond the annotations, but the annotations carry the safety profile. No contradiction exists; the description is consistent with the destructive and idempotent hints.
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 a single, efficient sentence that states the action and resource with zero waste. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.
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 destructive tool with full schema coverage and annotations indicating destructive and idempotent behavior, the description is mostly complete. However, it lacks explicit guidance on irreversible consequences or when to prefer this over drop_all_data_sources, which would be useful for an agent deciding between similar tools.
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 100%, so the schema already documents all three parameters. The description adds no additional parameter-level meaning beyond what the schema provides, which is acceptable given the high coverage. The baseline of 3 applies because the description doesn't need to compensate.
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 'Drop (delete) a data source' clearly states the verb (drop/delete) and the resource (data source), distinguishing it from related tools like drop_all_data_sources and drop_graph. It is concise and unambiguous, though it doesn't explicitly contrast with siblings.
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 implies a destructive operation on a specific data source, and the schema's profile/graph_name parameters provide context for connection selection. However, it does not explicitly state when to use this tool versus alternatives like drop_all_data_sources or update_data_source, nor does it mention prerequisites or consequences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_graphADestructiveIdempotent
Drop (delete) a graph and its schema from the TigerGraph database. This permanently removes the graph, its schema, and all data.
Use When: • Removing a graph that's no longer needed • Cleaning up test graphs • Starting fresh with a new schema
Quick Start:
{
"graph_name": "TestGraph"
}Warning: DANGER: • This deletes EVERYTHING: schema, vertices, edges, queries, loading jobs • Operation is PERMANENT and cannot be undone • Double-check the graph_name before executing • Consider using 'clear_graph_data' if you only want to remove data
Tips: • Use 'list_graphs' first to confirm the graph name • For production graphs, always backup first • To keep schema but clear data, use 'clear_graph_data'
Related Tools: create_graph, clear_graph_data, list_graphs
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | Yes | Name of the graph to drop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, but the description goes much further by specifying that schema, vertices, edges, queries, and loading jobs are all deleted, that the operation is permanent and cannot be undone, and that extra caution is required. It also advises backing up production graphs. This gives the agent a clear and accurate risk profile.
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 headings: purpose, use cases, quick start, warning, and tips. It front-loads the critical information and then expands helpfully without rambling. Every section adds operational value, especially the bolded permanence warning.
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 destructive two-parameter tool with no output schema, the description covers the action, the risk, the prerequisites, and the safer alternative. It also tells the agent to list graphs first to confirm the name. The optional profile parameter is sufficiently covered by the schema, so nothing essential is missing.
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 100%, so the baseline applies. The description adds a Quick Start JSON example showing graph_name and a warning to double-check its value, but it does not add substantial new semantics about the parameters themselves. The profile parameter is fully explained in the schema already.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Drop (delete) a graph and its schema from the TigerGraph database.' It clearly distinguishes itself from clear_graph_data by noting the difference between dropping the whole graph vs. just clearing data. This leaves no ambiguity about what the tool does.
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 'Use When' section explicitly lists the intended scenarios, and both 'Related Tools' and the tips name clear_graph_data and list_graphs as alternatives. It also gives concrete guidance to confirm the graph name first and to use clear_graph_data when only data removal is needed. This is exemplary when-vs-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_loading_jobBDestructiveIdempotent
Drop (delete) a loading job from the graph.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| job_name | Yes | The name of the loading job to drop. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide destructiveHint=true, so the description adds little beyond restating that this deletes a loading job. It does not disclose irreversibility, effects on active loading processes, or behavior if the job does not exist. No extra behavioral context is provided beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to the meaning, and the parenthetical '(delete)' usefully clarifies the technical term 'drop'.
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 destructive tool with full schema coverage and clear annotations, the description is nearly complete for selecting and invoking the tool. It could mention that the action is permanent or advise listing loading jobs first, but the combination of schema and annotations covers the essential call requirements.
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 100%, and the schema already documents job_name, profile, and graph_name clearly. The description adds no parameter-level details, but with full schema coverage this is acceptable.
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 a specific verb ('Drop (delete)') and resource ('a loading job'), so an agent can tell this is the deletion tool for loading jobs. It does not explicitly contrast with related drop tools (drop_graph, drop_query, drop_data_source), but the resource noun is specific enough to avoid confusion.
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?
No guidance is given about when to use this tool versus alternatives such as get_loading_jobs or create_loading_job. There is no warning to list/verify jobs before deleting, and no mention of whether dropping affects running jobs. Usage context is only implied by the destructive name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_queryADestructiveIdempotent
Drop (delete) an installed query from TigerGraph.
Use When: • Removing queries no longer needed • Cleaning up test queries • Before re-installing a modified query
Quick Start:
{
"query_name": "oldQuery"
}Warning: • Permanently deletes the installed query • Cannot be undone • Any code calling this query will fail
Tips: • Use 'show_query' first to review before dropping • Cannot drop queries being used by other queries
Related Tools: install_query, show_query, is_query_installed
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the query to drop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description explicitly warns that the deletion is permanent, cannot be undone, will break code calling the query, and that queries in use by other queries cannot be dropped. These are meaningful behavioral disclosures that add real context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections: purpose, use cases, quick start, warning, tips, and related tools. It front-loads the core purpose and warning, and every section adds practical value for a destructive operation.
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 destructive single-purpose tool with full schema coverage and strong annotations, the description provides sufficient operational context: when to use it, what will happen, limitations, and related tools. No output schema is present, but a simple success/failure outcome is reasonably inferred from the operation.
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 100%, and each parameter already has a clear schema description, especially profile and graph_name. The description only adds a Quick Start example with query_name, which does not materially expand parameter semantics beyond what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Drop (delete) an installed query from TigerGraph.' It clearly identifies the operation and target, and the phrase 'installed query' distinguishes it from related query-management tools like install_query and show_query.
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 'Use When' section provides explicit contexts: removing unneeded queries, cleaning up test queries, and before re-installing a modified query. It also offers a useful tip to use show_query before dropping, but it does not fully lay out when not to use the tool or name alternatives as explicit directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__drop_vector_attributeADestructiveIdempotent
Drop a vector attribute from a vertex type. Creates a schema change job to ALTER VERTEX with DROP VECTOR ATTRIBUTE.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vector_name | Yes | Name of the vector attribute to drop. | |
| vertex_type | Yes | Name of the vertex type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent hints. The description adds useful context by noting that it 'creates a schema change job,' which implies an asynchronous operation rather than an immediate change. This goes beyond the annotations and helps the agent understand the side-effect profile.
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 two concise sentences with no filler. The primary action is stated first, followed by a brief technical note on the implementation. Every word earns its place.
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 destructive operation with 4 parameters (2 required) and no output schema, the description provides sufficient information. It explains the action and the underlying mechanism. The annotations cover the safety aspects, so nothing critical is missing.
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 100%, with each parameter clearly described (vertex_type, vector_name, graph_name, profile). The tool description does not add additional meaning beyond what the schema already provides, so it meets the baseline but does not exceed it.
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 ('Drop a vector attribute') and the target ('from a vertex type'), making it distinct from sibling tools like add_vector_attribute or list_vector_attributes. The verb and resource are precise, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about the operation (dropping a vector attribute) and implies when it is relevant, but it does not explicitly compare to alternatives or state when not to use it. Since the tool name and description are self-explanatory, the guidance is adequate though not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__fetch_vectorARead-onlyIdempotent
Fetch vertices with their vector data using GSQL PRINT WITH VECTOR. Note: Vector attributes cannot be fetched via REST API.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_ids | Yes | List of vertex IDs to fetch. | |
| vertex_type | Yes | Type of the vertex. | |
| vector_attribute | No | Specific vector attribute to fetch. If not provided, fetches all vectors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds the GSQL implementation detail and the REST limitation, but discloses little beyond that about return shape, auth, or edge 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?
Two short sentences, with the action front-loaded and the caveat placed second. No filler or repetition of schema content.
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 read-only fetch with 100% schema coverage and only two required parameters, the description plus annotations are largely sufficient for an agent to call the tool. The main missing piece is a description of the return shape, especially since the tool has no output schema, so a 4 rather than 5.
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 100%, so all five parameters have individual descriptions in the schema. The tool description itself adds no parameter-specific meaning beyond the general 'vector data' context, justifying the baseline score.
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 opens with a specific verb and resource ('Fetch vertices with their vector data') and names the underlying mechanism ('GSQL PRINT WITH VECTOR'), which distinguishes this from REST-based vertex retrieval siblings such as get_nodes. The scope is clear and actionable.
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 note that 'Vector attributes cannot be fetched via REST API' gives a clear reason to choose this GSQL-backed tool over REST-based alternatives. It does not explicitly name sibling tools or state 'use X when not Y,' so the guidance is context rather than an explicit routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__generate_cypherARead-onlyIdempotent
Generate an openCypher query from a natural language description using an LLM. Use this tool when you prefer Cypher syntax over GSQL. The generated query will be wrapped in TigerGraph's INTERPRET OPENCYPHER QUERY format. graph_name is required as the query needs to specify the target graph. Configure the LLM via env vars: LLM_MODEL (e.g., 'gpt-4o' or 'openai:gpt-4o') and optionally LLM_PROVIDER.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | Yes | Name of the graph. Required for Cypher queries as they need to be wrapped in INTERPRET OPENCYPHER QUERY for the specific graph. | |
| query_description | Yes | A natural language description of what data you want to retrieve. Examples: 'Find all users who purchased more than 5 items', 'Find friends of friends', 'Match patterns in the graph' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds genuine context beyond that: the output is an LLM-generated query wrapped in INTERPRET OPENCYPHER QUERY format, and the tool depends on env var configuration (LLM_MODEL, LLM_PROVIDER). No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose and sibling differentiation before the config details. There is minor redundancy — the graph_name requirement is restated from the schema — but the prose is compact and each sentence earns its place.
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?
No output schema exists, so the description should clarify the return value. It mentions the query is 'wrapped in TigerGraph's INTERPRET OPENCYPHER QUERY format', which hints at the output shape, but it never explicitly states what the tool returns (e.g., the generated query string). For a generation tool this is a notable but not severe gap, given the tool's simplicity.
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 100%, so the schema already documents all three parameters fully. The description adds context mostly around graph_name (why it is required), but does not add syntax/format detail beyond what the schema provides. The baseline 3 applies since the schema carries the load.
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 ('Generate'), resource ('openCypher query'), and method ('from a natural language description using an LLM'). It distinguishes itself from the sibling tigergraph__generate_gsql by explicitly routing 'when you prefer Cypher syntax over GSQL'. An agent can immediately tell what this does and which alternative it is not.
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 gives an explicit usage condition ('Use this tool when you prefer Cypher syntax over GSQL'), which names the sibling alternative and the deciding factor. It also justifies the graph_name requirement. It doesn't go so far as to list exclusions (e.g., when to execute a query instead), but the primary selection axis against generate_gsql is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__generate_gsqlARead-onlyIdempotent
Generate a GSQL query from a natural language description using an LLM. Use this tool when you need to create a GSQL query but are unsure of the exact syntax. The generated query can then be executed using the gsql tool. For best results, provide the graph_name so the schema can be used to generate accurate queries. Configure the LLM via env vars: LLM_MODEL (e.g., 'gpt-4o' or 'openai:gpt-4o') and optionally LLM_PROVIDER.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If provided, the schema will be fetched to generate more accurate GSQL. | |
| query_description | Yes | A natural language description of what data you want to retrieve. Examples: 'Find all users who purchased more than 5 items', 'Count vertices by type', 'Find shortest path between two nodes' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive; the description adds useful context about LLM usage, schema fetching when graph_name is provided, and configuration via LLM_MODEL/LLM_PROVIDER env vars. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: purpose, when-to-use, execution follow-up, and best-practice/env-var notes. Every sentence contributes, though the env-var configuration detail is somewhat secondary.
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 no output schema, the description makes the output artifact clear ('a GSQL query') and gives a follow-up action (execute via gsql). It also covers graph_name behavior and LLM configuration, leaving little ambiguity for a straightforward generation task.
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 100%, so parameter documentation is already complete. The description mostly reinforces graph_name's benefit and adds env-var configuration rather than new parameter-level meaning, which matches the baseline of 3.
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 uses a specific verb ('Generate') and resource ('GSQL query') and clarifies that generation happens from a natural language description via an LLM. It also points to the gsql tool for execution, which helps distinguish generation from execution, though it doesn't explicitly contrast with siblings like generate_cypher.
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 provides an explicit trigger: 'Use this tool when you need to create a GSQL query but are unsure of the exact syntax.' It also advises providing graph_name for better schema-aware results and notes the generated query can be executed with the gsql tool. It stops short of explaining when not to use this tool or naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_all_data_sourcesBRead-onlyIdempotent
Get information about all data sources.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as return format or handling of empty results. With annotations covering safety, this is acceptable but adds little beyond them.
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 a single, concise sentence that is front-loaded and to the point. It avoids unnecessary verbosity, though it could be slightly more informative about the return structure. It is appropriately sized for a simple list operation.
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 optional parameter and no output schema, the description is mostly sufficient. However, it lacks context about what 'information' includes and when to prefer this tool over related ones. The annotations cover safety, so the overall completeness is adequate but not exceptional.
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 100% and the profile parameter is documented in the schema with a clear description. The tool description does not add any additional parameter semantics beyond what the schema provides, so the baseline of 3 applies.
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 'Get' and the resource 'all data sources', which is specific enough to distinguish from get_data_source (singular) and get_data_source_types. However, it doesn't elaborate on what 'information' entails, which could be ambiguous, but the core purpose is clear.
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?
There is no guidance on when to use this tool versus alternatives like get_data_source or get_data_source_types. The description implies it's for listing all data sources, but it doesn't explicitly say 'use this when you need a list' or mention when not to use it. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_data_sourceBRead-onlyIdempotent
Get information about a specific data source.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| data_source_name | Yes | Name of the data source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds practically no behavioral context beyond the scope word 'specific.' It does not mention return format, authentication needs, or any other behavioral traits, so it adds little beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler. Every word contributes to identifying the operation and its singular scope.
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 read-only lookup with documented parameters and safety annotations, the description is mostly adequate. However, there is no output schema and the description only says 'information,' leaving the return shape unspecified, which is a notable 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?
Schema description coverage is 100%, and both parameters already have meaningful descriptions in the schema. The tool description adds no parameter-level meaning, so the baseline score of 3 applies.
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 names the resource ('data source') and scopes the operation to 'a specific' one, which clearly distinguishes it from the sibling get_all_data_sources. The verb 'get' and singular scope make the 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?
No guidance is given about when to use this tool versus related siblings such as get_all_data_sources, preview_sample_data, or get_data_source_types. The word 'specific' implies a single-object lookup, but no alternatives or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_data_source_typesARead-onlyIdempotent
List the data source types supported by 'create_data_source', with the required and optional configuration keys and an example config for each. Answers locally without contacting TigerGraph.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | Optional filter: 'object_store', 'warehouse', 'stream', or 'filesystem'. Omit to list every type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and idempotentHint as true. The description adds a significant behavioral detail beyond that: 'Answers locally without contacting TigerGraph', informing the agent that no network/authentication is needed and the call is fast. This extra context enriches the safety and cost profile without contradicting any annotation.
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 two sentences: the first clearly states the purpose and content, the second adds a behavioral note. It is front-loaded with the primary action and requires no filler. Every part earns its place.
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 read-only list tool with one optional parameter and no output schema, the description fully covers what the agent needs: the list of types with their configurations and examples, plus the local execution mode. There is no missing critical information for correct invocation and expectation.
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 'family' is fully described in the schema with its allowed values and default. Since schema description coverage is 100%, the description does not add parameter-specific meaning beyond what the schema provides. The description does not mention the parameter at all, but the schema already carries the load, so a baseline of 3 is appropriate.
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 action (List), a clear resource (data source types) and its relevance to 'create_data_source', plus details on what is included (required/optional config keys and an example config). This clearly distinguishes it from siblings like get_all_data_sources or get_data_source, which deal with actual data sources rather than types.
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 implies usage as a reference for creating data sources by explicitly linking to 'create_data_source'. It also notes the tool answers locally, suggesting it is lightweight and suitable for quick lookups. It does not explicitly contrast with alternatives (e.g., 'use this instead of X'), but the purpose is unambiguous given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_edgeARead-onlyIdempotent
Get a single edge (relationship) from a TigerGraph graph by specifying source, target, and edge type.
Use When: • Retrieving a specific relationship • Checking edge attributes • Verifying edge was created
Quick Start:
{
"source_vertex_type": "Person",
"source_vertex_id": "user1",
"edge_type": "FOLLOWS",
"target_vertex_type": "Person",
"target_vertex_id": "user2"
}Tips: • Requires full edge specification (source, target, type) • Returns edge attributes if any • Use 'get_neighbors' for simpler neighbor queries
Related Tools: get_edges, has_edge, get_neighbors
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edge. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| source_vertex_id | Yes | ID of the source vertex. | |
| target_vertex_id | Yes | ID of the target vertex. | |
| source_vertex_type | Yes | Type of the source vertex. | |
| target_vertex_type | Yes | Type of the target vertex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool read-only, idempotent, and non-destructive. The description adds useful behavioral detail: it requires full edge specification, returns edge attributes if any, and routes simpler queries to get_neighbors. It does not detail not-found or error behavior, but the annotations cover the safety profile.
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-organized into scannable sections: summary, Use When, Quick Start, Tips, and Related Tools. It is front-loaded with the core purpose and every section adds distinct value without redundancy.
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 single-edge read with read-only annotations and full schema coverage, the description covers purpose, required parameters, usage context, return behavior, and alternatives. A fuller explanation of the exact return shape or not-found behavior would help, but the tool is safe to invoke based on the provided details.
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 100%, so the parameters are already documented in the schema. The Quick Start example and the tip 'Requires full edge specification' add integration-level meaning by showing how the required parameters combine, which raises it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific operation: retrieving a single edge by source, target, and edge type. The description clearly names the resource and criteria, and the Related Tools section distinguishes it from get_edges, has_edge, and get_neighbors.
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 'Use When' section gives concrete scenarios: retrieving a specific relationship, checking edge attributes, and verifying edge creation. It also names an alternative tool, get_neighbors, for simpler queries, though it does not fully spell out when to prefer get_edges or has_edge over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_edge_countBRead-onlyIdempotent
Get the count of edges in a TigerGraph graph.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | No | Type of edges to count. If not provided, counts all types. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral details beyond these, such as how counts are computed, performance implications, or behavior when edge_type is omitted.
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 a single sentence that front-loads the core action and resource. There is no wasted wording, and it is appropriately sized for the simplicity 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?
For a simple read-only count operation with three well-documented optional parameters and safety annotations, the description captures the essential purpose. It does not mention the return format, but given the absence of an output schema and the trivial nature of the result, this is a minor omission.
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 100%, with all three parameters individually documented (profile, edge_type, graph_name) including defaults and usage notes. The tool description itself adds no parameter-level meaning, so the baseline score of 3 is appropriate.
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 uses a specific verb ('get') and resource ('count of edges'), clearly indicating the tool's purpose. It is unambiguous with respect to its subject matter, though it does not explicitly contrast with sibling tools like get_vertex_count or get_node_degree.
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?
No guidance is provided about when to use this tool versus alternatives such as get_vertex_count, get_node_degree, or get_edges. The description simply states the function, leaving the agent to infer appropriate usage from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_edgesARead-onlyIdempotent
Get multiple edges (relationships) from a TigerGraph graph, optionally filtered by type.
Use When: • Retrieving multiple edges • Exploring graph relationships • Data export and analysis
Quick Start:
{
"source_vertex_type": "Person",
"source_vertex_id": "user1",
"edge_type": "FOLLOWS"
}Tips: • Can filter by edge type • Returns all edges from a source vertex • Use 'get_neighbors' for simpler use cases
Related Tools: get_edge, get_neighbors, get_edge_count
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of edges to return. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | No | Type of the edge. If not provided, gets all types. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| source_vertex_id | No | ID of the source vertex. If not provided, gets all edges. | |
| source_vertex_type | No | Type of the source vertex. If not provided, gets all types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only nature is covered. The description adds that it 'Returns all edges from a source vertex' and can filter by edge type, which is useful behavioral context. But it doesn't disclose potential performance implications or pagination behavior, which would add value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections ('Use When', 'Quick Start', 'Tips', 'Related Tools') and a code example. The core purpose is front-loaded in the first sentence, and every section adds value without redundancy. It is 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?
The description covers the main use cases, provides a quick start example, and lists related tools. Since there is no output schema, it would be helpful to describe the return format, but this is not critical for a read-only edge retrieval tool. The description is sufficiently complete for an agent to decide when to use it and how to invoke it with the given 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?
Schema description coverage is 100%, so all six parameters are already documented with descriptions. The description mentions filtering by edge type and returning all edges from a source vertex, which aligns with schema but adds no additional meaning beyond what the schema already provides. The baseline of 3 is appropriate.
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 multiple edges (relationships) from a TigerGraph graph, optionally filtered by type.' It specifies the verb, resource, and context, and distinguishes itself from siblings like get_edge (singular) and get_neighbors by focusing on multiple edges and filtering.
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 includes a 'Use When' section listing concrete scenarios (retrieving multiple edges, exploring graph relationships, data export and analysis) and a 'Tips' section recommending get_neighbors for simpler use cases. It also lists related tools. However, it doesn't explicitly state when NOT to use this tool beyond the suggestion of get_neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_global_schemaARead-onlyIdempotent
Get the complete global schema including all global vertex types, edge types, graphs, and their member types. Runs GSQL 'LS' command.
Use When: • You need to see all graphs and their schemas at once • Understanding the complete database structure • Finding all available vertex and edge types across all graphs • Database-level schema exploration
Quick Start:
{}(No parameters needed)
Tips: • Returns output from GSQL 'LS' command • Shows all graphs in the database • For single graph details, use 'show_graph_details' instead • Useful for database administrators
Related Tools: list_graphs, show_graph_details, get_graph_schema
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered. The description adds the info that it runs GSQL 'LS' command and shows all graphs, which is helpful. However, it doesn't describe output format or potential size/performance considerations, and names similarly scoped sibling tools without fully differentiating them, so it's decent but not exceptional.
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: main purpose, use-when, quick start, tips, and related tools. Every section adds value, front-loaded with the core purpose. No unnecessary fluff or repetition.
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 zero-required-parameter tool with complete schema and safety annotations, the description provides all necessary usage context: what it returns, when to use it, and related tools. The output schema is absent, but the description implies it returns output from the LS command. Complete enough for correct 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?
Schema description coverage is 100% — the only parameter 'profile' is fully documented in the schema (including default and how to use it). The description adds no parameter-specific info beyond that, but since the schema covers everything, baseline 3 is appropriate. The description does clarify that no parameters are needed, which is a small add.
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 'get' and resource 'global schema', listing the exact contents (all global vertex types, edge types, graphs, member types). It also names the GSQL command executed, which distinguishes it from related tools like get_graph_schema and show_graph_details.
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 'Use When' section explicitly lists scenarios for using this tool, and the 'Related Tools' section names alternatives such as list_graphs, show_graph_details, and get_graph_schema. The Tips section even advises to use show_graph_details for single graph details, effectively communicating when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_graph_schemaARead-onlyIdempotent
Get the schema of a specific graph — vertex types, edge types, and their attributes — as structured JSON. Returns schema only, not queries or jobs.
Use When: • You need to know vertex/edge types and their attributes • Building or validating queries against the schema • Programmatic schema inspection or comparison
Quick Start:
{
"graph_name": "SocialNetwork"
}Tips: • Returns structured JSON (vertex types, edge types, attributes) • For a full listing including queries and jobs, use 'show_graph_details' • For just graph names, use 'list_graphs'
Related Tools: show_graph_details (full listing), list_graphs (names only)
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by specifying the return format (structured JSON with vertex/edge types and attributes) and the scope exclusion (not queries or jobs), which clarifies behavior the annotations don't convey.
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 and front-loaded: the core purpose lands in the first sentence, followed by labeled sections (Use When, Quick Start, Tips, Related Tools). Every section earns its place—the quick start is a valid minimal invocation, and the related tool notes are the differentiators an agent needs. Zero filler.
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 read-only tool with two optional params and no nested objects, the description is nearly complete. Since there's no output schema, it compensates by naming what the JSON contains (vertex types, edge types, attributes). The only minor gap is the exact JSON shape/format, but the stated contents and annotations cover what an agent needs to call it 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 description coverage is 100% — both profile and graph_name are already well-documented in the schema with default behavior explained. The description adds a concrete Quick Start example (graph_name: 'SocialNetwork'), which is mildly useful but not substantive new semantics, so the baseline 3 is appropriate.
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 opening sentence states a specific verb and resource—'Get the schema of a specific graph — vertex types, edge types, and their attributes — as structured JSON'—and immediately distinguishes it from siblings with 'Returns schema only, not queries or jobs.' An agent can tell it apart from show_graph_details and list_graphs without opening their schemas.
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?
A dedicated 'Use When' section lists concrete trigger conditions (knowing vertex/edge types, building or validating queries, programmatic inspection), and the Tips section explicitly routes to alternatives: 'For a full listing including queries and jobs, use show_graph_details' and 'For just graph names, use list_graphs.' Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_loading_jobsARead-onlyIdempotent
Get a list of all loading jobs defined for the current graph.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a useful scoping detail ('all loading jobs defined for the current graph'), but it does not disclose return format, pagination, or behavior when no loading jobs exist. This is acceptable for a simple read-only list tool but not richly 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?
The description is a single focused sentence with no filler or redundancy. It front-loads the core purpose and includes scope in the same breath. Every word contributes meaning, making it easy for an agent to parse quickly.
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 low-complexity, read-only list tool with zero required parametershare, the description is complete enough. The input schema covers all parameter semantics, annotations cover the safety profile, and the description clarifies what is being listed and in what scope. No output schema exists, but the tool name and description make the return concept clear.
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 100%, and both parameters (profile and graph_name) are well documented in the input schema, including defaults and the list_connections hint. The tool description adds little beyond 'current graph,' so it correctly relies on the schema for parameter meaning. Baseline 3 applies because the schema does the heavy lifting.
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 operation: 'Get a list of all loading jobs defined for the current graph.' It specifies the verb ('get'), the resource ('loading jobs'), and the scope ('current graph'). However, it does not explicitly differentiate from closely related sibling tools like get_loading_job_status, create_loading_job, or drop_loading_job.
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 no guidance on when to use this tool versus alternatives. It does not mention that get_loading_job_status is for a single job's status or that create/drop/run_loading_job tools are for other lifecycle stages. The schema's parameter descriptions give profile hints, but the tool description itself offers no when-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_loading_job_statusBRead-onlyIdempotent
Get the status of a specific loading job by its job ID.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The ID of the loading job to check status. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior, so the bar for extra disclosure is lower. The description adds the specific-ID scoping but nothing else about response behavior, absent-job errors, or polling semantics that would go beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It conveys the essential action and target resource immediately.
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 a rich input schema and safety annotations, the tool is simple enough that the description is mostly adequate. However, there is no output schema and no statement about what the returned status looks like or how to obtain a valid job_id, leaving some inference needed.
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 100%, and the schema already documents job_id, profile, and graph_name. The description's 'by its job ID' only echoes the required parameter without adding format, source, or relationship details.
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 clear verb and resource: get the status of a specific loading job by job ID. It distinguishes from the plural get_loading_jobs tool by emphasizing a single, ID-addressed job, though it does not explicitly name that alternative.
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?
No when-to-use or when-not-to-use guidance is provided; the description only restates the operation. It does not mention that get_loading_jobs should be used to list jobs or to discover a job_id, nor any prerequisite such as the job having been created/run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_neighborsARead-onlyIdempotent
Get neighbor vertices connected to a source vertex via edges. Useful for 1-hop graph traversal to find connected entities.
Use When: • Finding vertices directly connected to a vertex • 1-hop traversal (immediate neighbors) • Discovering relationships • Building recommendation lists
Quick Start:
{
"vertex_type": "Person",
"vertex_id": "user123",
"edge_type": "FOLLOWS"
}Common Workflow:
Have a source vertex ID
Call 'get_neighbors' with vertex info
Optionally filter by edge type
Receive list of connected vertices
Tips: • Simpler than writing a query for 1-hop traversal • Can filter by edge type (e.g., only 'FOLLOWS' edges) • Can specify target vertex type • For multi-hop traversal, use 'run_query' instead
Examples: • Find friends: edge_type='FRIENDS' • Find purchases: edge_type='PURCHASED', target_vertex_type='Product' • Find all connections: omit edge_type
Related Tools: get_node_edges, run_query, add_edge
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of neighbors to return. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | No | Type of edges to traverse (e.g., 'purchased', 'friend_of'). If not provided, traverses all edge types. | |
| vertex_id | Yes | ID of the source vertex. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Type of the source vertex (e.g., 'Person', 'Product'). | |
| target_vertex_type | No | Type of target vertices to return. If not provided, returns all types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavioral context like filtering by edge type and target vertex type, and notes that it's simpler than writing a query. However, it doesn't disclose pagination, limits, error handling, or return format—though these are partially covered by the schema. Given annotation coverage, a 3 is appropriate.
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 (Use When, Quick Start, Common Workflow, Tips, Examples, Related Tools). It's longer than a minimal description but each section serves a purpose—examples and workflow guidance are practical. It's front-loaded with the core purpose and uses bullets for scannability, though slightly verbose. A 4 reflects efficient structure without excessive padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters (2 required) and no output schema. The description covers typical usage, provides examples, and points to alternatives for multi-hop traversal. It doesn't explain return format or edge cases, but for a straightforward read-only neighbor lookup, it covers the essentials. Given the complexity and lack of output schema, it's fairly complete, though could mention limit behavior or error scenarios.
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 100%, so baseline is 3. The description adds concrete usage patterns: examples like 'Find friends: edge_type=FRIENDS', 'Find purchases: edge_type=PURCHASED, target_vertex_type=Product', and 'Find all connections: omit edge_type'. It also includes a Quick Start JSON showing required parameters. This goes beyond schema descriptions by clarifying how parameters combine, so a 4 is justified.
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 clear verb and resource: 'Get neighbor vertices connected to a source vertex via edges.' It explicitly mentions 1-hop graph traversal and differentiates from siblings by naming alternatives like get_node_edges, run_query, and add_edge. This makes the tool's purpose unmistakable and distinct.
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 'Use When' section lists specific conditions (finding directly connected vertices, 1-hop traversal, discovering relationships). It explicitly says 'For multi-hop traversal, use run_query instead' and mentions get_node_edges as related, giving clear exclusions and alternatives. This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_nodeARead-onlyIdempotent
Get a single node (vertex) from a TigerGraph graph by its type and ID.
Use When: • Retrieving a specific entity by its ID • Verifying a vertex was created successfully • Checking current attribute values • Fetching details before updating
Quick Start:
{
"vertex_type": "Person",
"vertex_id": "user123"
}Related Tools: • get_nodes - Get multiple vertices • has_node - Check if vertex exists • get_node_edges - Get edges connected to vertex
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vertex_id | Yes | ID of the vertex to retrieve. | |
| graph_name | No | Name of the graph. | |
| vertex_type | Yes | Type of the vertex to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful return-context ('Checking current attribute values', 'Fetching details before updating') but does not disclose error behavior or not-found handling, which would have strengthened 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 front-loaded with a clear one-sentence summary, followed by well-scoped Use When bullets, a compact Quick Start example, and a Related Tools section. It is longer than the minimum but each section serves a purpose and no content is redundant enough to hurt clarity.
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 single-node read with annotations covering safety and schema covering all parameters, the description provides sufficient invocation context, use cases, and sibling differentiators. The lack of an output schema is mitigated by the description's mention of attribute values and details, though not-found behavior is still left implicit.
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 100%, so the schema fully documents vertex_type, vertex_id, graph_name, and profile. The description's mention of type and ID and the Quick Start JSON add a concrete usage example but no new parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and target resource: 'Get a single node (vertex) from a TigerGraph graph by its type and ID.' It clearly distinguishes this from siblings by naming get_nodes, has_node, and get_node_edges in Related Tools, so an agent can tell them apart without opening schemas.
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 'Use When' section gives concrete scenarios such as retrieving a specific entity by ID and verifying a vertex was created. It does not explicitly state when to prefer get_nodes or has_node over this tool, but the Related Tools section provides enough context for an agent to infer the main alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_node_degreeBRead-onlyIdempotent
Get the degree (number of connected edges) of a node in a TigerGraph graph.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| direction | No | Direction of edges: 'outgoing', 'incoming', or 'both'. | both |
| edge_type | No | Type of edges to count. If not provided, counts all edge types. | |
| vertex_id | Yes | ID of the vertex. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Type of the vertex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the useful semantic that degree means a count of connected edges, but it does not disclose return shape, node-not-found behavior, or default counting behavior beyond what the input schema already provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that concisely defines the tool's purpose without redundant phrasing or repetition of schema fields. Every word earns its place.
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 read-only counting operation, the combination of the description, complete parameter schema, and safety annotations is largely sufficient. It clearly expresses what is returned, a degree count; the only minor gap is the absence of edge-case behavior such as what happens when the vertex does not exist.
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 100%, so the input schema already explains all six parameters, including defaults for direction, edge_type, graph_name, and profile. The description adds little beyond the core concept of 'degree', meeting the baseline for well-documented schemas.
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 clear verb and resource: 'Get the degree (number of connected edges) of a node in a TigerGraph graph.' It is specific and informative, but it does not explicitly contrast with sibling tools like get_node_edges or get_vertex_count, so it lacks explicit sibling 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 provides no guidance on when to use this tool versus alternatives such as get_node_edges, get_edge_count, or get_neighbors. Usage is only implied by the tool name and description, with no stated exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_node_edgesARead-onlyIdempotent
Purpose: Retrieve all edges connected to a specific vertex (node).
When to Use:
Explore connections from a vertex
Find relationships of a specific type
Analyze node connectivity patterns
Get edge attributes and target vertices
What You Get:
Edge type and ID
Edge attributes
Target vertex information
Edge direction (outgoing from the specified vertex)
Common Workflows:
Explore all connections:
get_node_edges(vertex_type='Person', vertex_id='123')Specific relationship type:
get_node_edges(..., edge_type='FRIEND_OF')Degree analysis: Count returned edges to get outgoing degree
Tips:
Returns OUTGOING edges only (edges starting from this vertex)
Use get_node_degree() for quick connection count
Use get_neighbors() to get target vertices without edge details
Combine with pagination (limit) for highly connected vertices
Note: This returns edges where the specified vertex is the SOURCE. For incoming edges, use a reverse traversal query or get_neighbors().
Related Tools:
get_node_degree: Count connections without retrieving edges
get_neighbors: Get connected vertices
get_edges: Query edges by type across the graph
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of edges to return (default: 100) | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | No | Optional: Filter by specific edge type. If omitted, returns all edge types. | |
| vertex_id | Yes | The unique identifier of the source vertex | |
| graph_name | No | Name of the graph (uses default if not specified) | |
| vertex_type | Yes | The type of the source vertex |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior, so the description correctly adds non-obvious behavioral context beyond that: 'Returns OUTGOING edges only (edges starting from this vertex)' and 'This returns edges where the specified vertex is the SOURCE.' It also discloses the return contents, including edge attributes, target vertices, and direction.
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, When to Use, What You Get, Common Workflows, Tips, Note, and Related Tools. It is slightly repetitive about the outgoing-edge constraint, mentioning it in What You Get, Tips, and Note, but it remains readable and front-loaded with the 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?
Despite having no output schema, the description compensates by listing what the agent receives: edge type, edge ID, edge attributes, target vertex information, and direction. It also covers common workflows, pagination advice, and clear comparisons to sibling tools, making the tool safe and effective to invoke.
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 100%, so the baseline is 3, but the description adds value with concrete usage examples like get_node_edges(vertex_type='Person', vertex_id='123') and explains how edge_type, limit, and vertex identity are used in practice. It does not duplicate every parameter's schema text but adds meaningful usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve all edges connected to a specific vertex (node).' It clearly distinguishes itself from related siblings by stating that it returns outgoing edges only, and it explicitly differentiates from get_edges, get_neighbors, and get_node_degree in the Related Tools section.
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 'When to Use' section lists concrete scenarios, and the 'Tips' section gives explicit alternatives: 'Use get_node_degree() for quick connection count' and 'Use get_neighbors() to get target vertices without edge details.' It also states when not to use this tool, such as for incoming edges, which is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_nodesARead-onlyIdempotent
Purpose: Retrieve multiple vertices (nodes) from the graph with optional filtering and sorting.
When to Use:
List vertices of a specific type
Search for vertices matching certain criteria
Browse graph data with pagination
Find vertices based on attribute values
Key Features:
WHERE clause for filtering
Sorting by attributes (ascending/descending)
Limit results for pagination
Returns complete vertex data including all attributes
Common Workflows:
List all vertices:
get_nodes(vertex_type='Person', limit=10)Filter by attribute:
get_nodes(vertex_type='Person', where='age > 25')Sort results:
get_nodes(vertex_type='Person', sort='-created_at', limit=20)
Tips:
Use limit to avoid retrieving too many vertices
WHERE clause syntax follows TigerGraph conventions
Sort with '-' prefix for descending order
Combine where, sort, and limit for precise queries
Related Tools:
get_node: Get a single specific vertex
get_vertex_count: Count vertices before retrieving
run_query: For complex multi-hop queries
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort results by attribute. Use '-' prefix for descending (e.g., '-age') | |
| limit | No | Maximum number of vertices to return (default: 100) | |
| where | No | Optional filter condition. Use TigerGraph WHERE syntax. Examples: - 'age > 25' - 'name == "John"' - 'active == true' | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph to query (uses default if not specified) | |
| vertex_type | Yes | The type of vertices to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns complete vertex data including all attributes, supports WHERE/sort/limit, and warns to use limit to avoid retrieving too many vertices. It doesn't mention pagination details or potential performance implications beyond the limit tip, but the annotations carry the main safety 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?
The description is well-structured with clear sections (Purpose, When to Use, Key Features, Common Workflows, Tips, Related Tools) and front-loads the purpose. It is somewhat longer than strictly necessary, but every section earns its place by providing actionable guidance. The examples are compact and illustrative.
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 read-only list tool with 100% schema coverage and no output schema, the description covers the key aspects an agent needs: what it does, when to use it, how to filter/sort/limit, and how it relates to siblings. It doesn't describe the exact return format, but since there is no output schema and the tool returns 'complete vertex data', this is a minor gap. The description is complete enough for correct 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?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds value by showing concrete usage examples (e.g., where='age > 25', sort='-created_at') and explaining the '-' prefix for descending order, which reinforces the schema's parameter descriptions. It doesn't add much beyond the schema, but the examples and tips make the parameter semantics more accessible.
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 retrieves multiple vertices with filtering and sorting, using a specific verb ('Retrieve') and resource ('vertices/nodes'). It distinguishes itself from related tools by explicitly naming get_node (single vertex) and get_vertex_count (count before retrieving), so an agent can tell them apart.
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 'When to Use' section lists concrete scenarios (list vertices of a type, search by criteria, browse with pagination, find by attribute values), and the 'Related Tools' section explicitly names alternatives and when they are preferable (get_node for a single vertex, get_vertex_count before retrieving, run_query for complex multi-hop queries). This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_query_descriptionARead-onlyIdempotent
Get the description and parameter descriptions of one or more installed queries. Requires TigerGraph 4.0+.
Use When: • Discovering what a query does and what each parameter means • Building query documentation • Understanding a query's parameters together with their descriptions
Quick Start:
{
"query_name": "getPersonFriends"
}Tips: • Pass 'all' (the default) to read descriptions for every query • Pair with 'get_query_metadata' to combine parameter types and descriptions • Set descriptions with 'update_query_description'
Related Tools: update_query_description, get_query_metadata, show_query
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | No | Name of the query to read. Pass 'all' (default) to read descriptions for every query. | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds genuine value beyond that by disclosing 'Requires TigerGraph 4.0+,' a version prerequisite not present in the schema or annotations. It could also mention behavior for nonexistent queries, but with annotations carrying the safety burden, the added version constraint earns a strong score.
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-organized with clearly labeled sections (Use When, Quick Start, Tips, Related Tools) and front-loads the core purpose. It is slightly longer than necessary with some redundancy between the Tips and the schema's parameter descriptions, but every section serves a navigational 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?
For a simple read-only metadata tool with three well-documented parameters and no output schema, the description covers the essentials: purpose, version requirement, use cases, a concrete example, and related tools. The return shape is adequately implied by the first sentence, and no critical information for invoking the tool correctly is missing.
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 100%, so the baseline is 3 and the schema already documents all three parameters including the 'all' default for query_name. The description reinforces this with a Quick Start example and the tips, adding marginal value but not meaningfully compensating beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the description and parameter descriptions of one or more installed queries,' which is precise and unambiguous. It distinguishes itself from siblings like get_query_metadata by implying that this tool provides descriptions while get_query_metadata provides types, though this differentiation is implied via the pairing tip rather than stated explicitly in the purpose sentence.
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 'Use When' section lists three concrete scenarios (discovering query behavior, building documentation, understanding parameters), and the Tips section names alternatives and complements (get_query_metadata, update_query_description). It provides clear context but lacks an explicit 'when not to use' exclusion, so it falls just short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_query_metadataARead-onlyIdempotent
Get metadata about an installed query including parameters, return type, and other details.
Use When: • Understanding query parameters and signature • Discovering what queries are available • Building query documentation • Programmatic query discovery
Quick Start:
{
"query_name": "getPersonFriends"
}Tips: • Shows query parameters, types, and metadata • Helps understand how to call the query • Use 'show_query' to see the actual query text
Related Tools: show_query, is_query_installed, run_installed_query
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive; the description adds that it returns query parameters, types, and metadata and helps callers understand how to invoke the query. It does not detail the exact return shape or error behavior, but for a read-only metadata lookup with strong annotations this is adequate.
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 front-loaded with a clear definition and then organized into Use When, Quick Start, Tips, and Related Tools sections, with no filler. There is minor redundancy between 'parameters, return type, and other details' and 'Shows query parameters, types, and metadata,' but the structure remains 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?
For a simple tool with one required parameter, full schema descriptions, and read-only/idempotent annotations, the description covers selection, invocation, and alternatives well. It could add error behavior for missing or uninstalled queries, but is_query_installed is listed as a related tool and the stated return contents mitigate the lack of an output schema.
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 three parameters are already fully documented in the input schema, so the baseline is 3. The Quick Start JSON adds a concrete example value for query_name, which helps an agent form a valid call, and no parameter documentation gap exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource: 'Get metadata about an installed query including parameters, return type, and other details.' The related-tool note 'Use show_query to see the actual query text' further differentiates it from the sibling that returns query source, so an agent can distinguish it from show_query and run_installed_query.
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?
'Use When' enumerates concrete situations such as understanding query parameters/signature, documentation, and programmatic discovery. The tip explicitly routes users to show_query when they need the actual query text, but there is no explicit when-not-to-use list. The 'Discovering what queries are available' bullet is slightly broad since query_name is required, though the overall guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_tool_infoARead-onlyIdempotent
Get detailed information about a specific TigerGraph tool.
Use this tool when:
You want to understand a tool's capabilities
You need examples of how to use a tool
You want to know prerequisites or related tools
Returns:
Detailed tool description
Use cases and examples
Prerequisites and related tools
Common next steps
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | Name of the tool to get information about. Example: 'tigergraph__add_node' or 'tigergraph__search_top_k_similarity' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful context by enumerating what the tool returns (descriptions, use cases, examples, prerequisites, next steps), which is valuable since there is no output schema. It does not contradict annotations or hide side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core purpose, and uses scoped 'Use this tool when' and 'Returns' sections. Every sentence adds functional guidance and there is no filler or restatement of the tool name.
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 one-parameter read-only introspection tool, the description sufficiently explains purpose, usage triggers, and return content, which is especially important because there is no output schema. It could be slightly more complete by noting how to handle an invalid/unknown tool_name, but that 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?
The schema has 100% description coverage for the single tool_name parameter, including an example value. The description therefore does not need to compensate, and it adds no parameter-specific syntax or qualification beyond calling the tool 'specific.' Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get detailed information about a specific TigerGraph tool.' It clearly identifies this as an introspection/help tool for one tool, which distinguishes it from list-oriented siblings like discover_tools or connection tools without requiring schema inspection. The 'Use this tool when' bullets reinforce that purpose.
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 tells the agent when to use the tool (understanding capabilities, examples, prerequisites, related tools). It does not, however, mention when not to use it or point to an alternative such as discover_tools for listing available tools, so it stops short of a fully explicit routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_vector_index_statusARead-onlyIdempotent
Check the rebuild status of vector indexes. Returns 'Ready_for_query' when complete or 'Rebuild_processing' if still building.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vector_name | No | Vector attribute name. If not provided, checks all. | |
| vertex_type | No | Vertex type to check. If not provided, checks all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows this is safe. The description adds value by specifying the exact return values, which is helpful. However, it does not mention any additional behaviors such as whether it returns statuses for all vector indexes when no vector_name is given, or what happens if no rebuild is in progress. Given that annotations cover safety well, this is adequate but not rich. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, with the core purpose front-loaded. The first sentence states the action clearly, and the second sentence gives the key return values. There is no wasted words or redundancy. It is appropriately concise for a simple status-checking 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?
This is a simple read-only status-check tool with no output schema and no nested objects. The description, combined with complete parameter schemas and safe annotations, gives an agent enough to call the tool correctly. It could mention why the status matters (e.g., queries will fail until ready), but that is minor and not essential for invocation. A 4 is appropriate because it is complete for its simplicity, though a tiny bit more context on the significance of the return values would make it a 5.
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 100%, meaning all four parameters have descriptions. The tool description itself does not add parameter-level details beyond what the schema already provides. For example, it doesn't explain how profile or graph_name interact, but the schema already says 'Omit to use the active default profile' and 'If not provided, uses default connection.' So the description adds minimal value, but the schema does the heavy lifting, earning a baseline 3.
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 checks the rebuild status of vector indexes, which is a specific and distinct function. It names the two possible return values ('Ready_for_query' or 'Rebuild_processing'), making it unambiguous. It stands out from sibling tools like 'list_vector_attributes' and 'upsert_vectors' by focusing on status checking.
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 implies when to use this tool: to check if vector index rebuild is complete before proceeding with queries. However, it does not explicitly state when not to use it or mention alternatives. For example, it doesn't say 'Use this after adding a vector attribute to confirm readiness' or 'Do not use this to check general graph status; use get_graph_schema instead.' The context is clear but lacks explicit routing guidance compared to better tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_vertex_countARead-onlyIdempotent
Get the count of vertices in a TigerGraph graph.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | No | Type of vertices to count. If not provided, counts all types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description aligns with a read-only count operation. It adds no extra context about performance, exactness, or return format, so it neither contradicts nor enriches beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, eight words, no filler. Front-loaded and 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, all-optional-parameter count tool with safety annotations, the description and schema together are nearly complete. It doesn't explicitly state the return type, but the operation's output is self-evident.
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 100%, with each parameter (profile, graph_name, vertex_type) fully documented including defaults. The description adds no additional parameter semantics, so baseline 3 is appropriate.
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?
States a specific verb ('get') and resource ('count of vertices') in a TigerGraph graph. This clearly distinguishes it from sibling tools like get_edge_count and get_node_degree, even though it doesn't mention the optional vertex_type filter.
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?
No guidance on when to use this tool versus siblings such as get_edge_count or get_node_degree. Parameter descriptions provide connection context but no tool-selection advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__get_workflowARead-onlyIdempotent
Get a step-by-step workflow template for common TigerGraph tasks.
Use this tool when:
You need to complete a complex multi-step task
You want to follow best practices
You're new to TigerGraph and need guidance
Returns:
Ordered list of tools to use
Example parameters for each step
Explanations of what each step accomplishes
Available workflows: create_graph, load_data, query_data, vector_search, graph_analysis, setup_connection
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_type | Yes | Type of workflow to retrieve: - 'create_graph': Set up a new graph with schema - 'load_data': Import data into an existing graph - 'query_data': Query and analyze graph data - 'vector_search': Set up and use vector similarity search - 'graph_analysis': Analyze graph structure and statistics - 'setup_connection': Initial connection setup and verification |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by stating the return structure: an ordered list of tools, example parameters, and explanations. It does not contradict annotations and provides useful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose sentence, bullet points for when to use, return details, and the workflow list. It is concise and front-loaded, though the workflow list is duplicated in the schema. Overall, it is efficient and easy to scan.
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 one-parameter tool with no output schema, the description covers the key points: what it does, when to use it, what it returns, and the available workflows. It does not mention limitations (e.g., that templates may not cover every scenario), but this is minor given the tool's nature and annotations.
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 100% coverage for the single parameter workflow_type, including a description listing all six options and what each does. The description repeats the same list in the 'Available workflows' line, adding no new meaning beyond the schema. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a step-by-step workflow template for common TigerGraph tasks, using the specific verb 'Get' and resource 'workflow template'. It distinguishes itself from the many action-oriented siblings by being a meta-guidance tool, and the list of available workflows makes its scope explicit.
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 provides 'Use this tool when' conditions: complex multi-step tasks, best practices, and new-user guidance. This gives clear context, though it does not mention alternatives like 'discover_tools' or explicitly state when not to use it. Still, the guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__gsqlADestructive
Execute a GSQL command on TigerGraph. Use this for administrative tasks (e.g., creating users, granting roles) or schema modifications (e.g., CREATE VERTEX). Do NOT use this for running data queries (SELECT statements) - use run_query instead. Example: CREATE USER alice WITH PASSWORD 'password' or LS.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | GSQL command to execute. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=true and readOnlyHint=false, so the description does not need to restate that. It adds useful context about the intended command types (admin/schema) and concrete examples that imply mutating behavior, without contradicting the annotations. It stops short of explaining output structure or side-effect nuances, but the annotation coverage lowers the 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?
The description is three sentences with no filler: action first, usage boundaries second, and examples last. Every sentence earns its place, and the hierarchy is easy to scan.
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 output schema, the return format is undocumented, but for a generic command executor that is acceptable and typical. The description covers purpose, exclusions, and examples; the schema documents parameters; and annotations cover safety. The only minor gap is not mentioning that output is raw GSQL output, but this does not impede correct 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 input schema has 100% parameter description coverage, which sets a baseline of 3. The description adds concrete example values for the `command` parameter (CREATE USER, LS), which is more informative than the schema's generic 'GSQL command to execute.' This pushes the score slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Execute a GSQL command on TigerGraph') and immediately differentiates from the sibling run_query by explicitly excluding SELECT queries. The examples (CREATE USER, LS) further delimit the intended scope, leaving no ambiguity about what this tool does versus its siblings.
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 states when to use the tool (administrative tasks, schema modifications) and when not to use it (data queries), and names the alternative (run_query). This is direct, actionable guidance that an agent can follow without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__has_edgeARead-onlyIdempotent
Check if an edge (relationship) exists between two vertices without retrieving its data.
Use When: • Verifying relationship existence • Validation logic • More efficient than get_edge when you only need existence check
Quick Start:
{
"source_vertex_type": "Person",
"source_vertex_id": "user1",
"edge_type": "FOLLOWS",
"target_vertex_type": "Person",
"target_vertex_id": "user2"
}Tips: • Returns boolean (true/false) • Faster than get_edge when you don't need the data • Use before add_edge to avoid duplicates
Related Tools: get_edge, add_edge
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| edge_type | Yes | Type of the edge. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| source_vertex_id | Yes | ID of the source vertex. | |
| target_vertex_id | Yes | ID of the target vertex. | |
| source_vertex_type | Yes | Type of the source vertex. | |
| target_vertex_type | Yes | Type of the target vertex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds useful behavioral details: it returns a boolean, is faster than get_edge, and can be used pre-emptively before add_edge. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear headers (Use When, Quick Start, Tips, Related Tools), front-loads the core purpose, and uses a compact JSON example. No redundant sentences; every section earns its place.
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 existence-check tool, the description covers purpose, usage guidance, return type, performance comparison, and related tools. With annotations providing the safety profile and no output schema needed (returns boolean), this is complete for an agent to decide when and how to call 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?
The input schema has 100% description coverage, so the baseline is 3. The description's Quick Start JSON example clarifies how the parameters map in practice (e.g., source_vertex_type as 'Person'), adding semantic value beyond the terse schema descriptions of each parameter.
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 first sentence states a specific verb ('Check if an edge exists') with a resource ('between two vertices') and explicitly notes it does so 'without retrieving its data,' which distinguishes it from get_edge. The purpose is unambiguous and distinct from sibling tools like get_edge and add_edge.
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 'Use When' section explicitly lists scenarios (verifying relationship existence, validation logic) and directly compares with get_edge ('more efficient... when you only need existence check'). It also advises using it before add_edge to avoid duplicates, providing clear routing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__has_nodeARead-onlyIdempotent
Purpose: Check if a vertex (node) exists in the graph without retrieving its full data.
When to Use:
Verify a vertex exists before operations
Validation in data pipelines
Conditional logic based on vertex existence
Lightweight existence checks (faster than get_node)
Key Features:
Returns simple boolean result (exists: true/false)
More efficient than get_node() for existence checks
No data transfer overhead
Common Workflows:
Safe operations:
has_node()→ if true, proceed with get_node()/delete_node()Validation: Check required vertices exist before adding edges
Conditional creation: If not exists, create with add_node()
Tips:
Use this instead of get_node() when you only need existence confirmation
Combine with add_node() for upsert logic
Faster than catching errors from get_node()
Related Tools:
get_node: Retrieve full vertex data if it exists
add_node: Create vertex if it doesn't exist
delete_node: Remove vertex after confirming existence
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vertex_id | Yes | The unique identifier of the vertex | |
| graph_name | No | Name of the graph (uses default if not specified) | |
| vertex_type | Yes | The type of the vertex to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description doesn't need to restate that. It adds useful behavioral context such as returning a simple boolean result, being more efficient than get_node, and having no data transfer overhead. Slight over-explanation but no contradiction.
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, When to Use, Key Features, Common Workflows, Tips, Related Tools). However, it is on the verbose side; some sections like 'Common Workflows' could be trimmed, but the organization makes it easy to scan.
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 existence-check tool with readOnlyHint and idempotentHint annotations, the description covers the purpose, usage, and performance characteristics thoroughly. It could mention error handling or edge cases (e.g., missing vertex_type) but these are likely covered by the schema. Overall, complete enough for an agent to call it 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 coverage is 100%, so the schema already describes all parameters. The description mentions vertex_type and vertex_id implicitly in the workflow examples but does not add new meaning beyond what the schema provides. Baseline 3 is appropriate.
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 that the tool checks for the existence of a vertex in the graph without retrieving full data. The verb 'has' combined with the resource 'node' is specific and distinct from siblings like get_node, add_node, 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?
Explicitly lists when to use (verification, validation, conditional logic) and provides a 'Related Tools' section with alternative tools and their purposes, plus a tip to prefer this over get_node for existence checks. Clearly differentiates from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__install_queryA
Install a GSQL query on a TigerGraph graph, compiling it for faster repeated execution.
Use When: • You have a query you'll run multiple times • You want better query performance • Creating reusable query logic • Building query libraries
Quick Start:
{
"query_text": "CREATE QUERY getPersonFriends(VERTEX<Person> p) FOR GRAPH MyGraph { ... }"
}Common Workflow:
Write and test query with 'run_query' first
Once working, install with 'install_query'
Run with 'run_installed_query' (faster)
Tips: • Query text should start with 'CREATE QUERY' • Installation compiles the query for better performance • Can define parameters in query signature • Use 'show_query' to view installed query text
Related Tools: run_installed_query, drop_query, show_query
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_text | Yes | GSQL query text to install. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds that installation compiles the query for speed, requires query_text to start with 'CREATE QUERY', and that installed queries can be viewed via show_query. It doesn't state whether installing overwrites an existing query or what permissions are required, but it discloses the core behavior beyond what annotations provide.
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 organized into clear labeled sections—Use When, Quick Start, Common Workflow, Tips, Related Tools—each with a distinct purpose. It is information-dense but every section earns its place; the workflow and tips directly reduce the risk of misuse, and there is no repetition of schema content.
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 moderately complex installation tool, the description covers purpose, usage, workflow, and related tools. It lacks an explicit account of the return value (though there is no output schema), and it doesn't mention how installing affects an existing query of the same name. Overall, the agent has enough context to invoke the tool correctly in the intended workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters (query_text, graph_name, profile), so schema coverage is 100%. The description adds a JSON example and the critical tip that query_text should start with 'CREATE QUERY', which goes beyond the schema's generic description and helps the agent form a valid invocation.
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?
States a specific verb and resource: 'Install a GSQL query on a TigerGraph graph, compiling it for faster repeated execution.' It also distinguishes itself from run_query and run_installed_query in the Common Workflow and Related Tools, so an agent can tell what this tool is for without opening other definitions.
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 'Use When' section lists four concrete triggers (multiple runs, better performance, reusable logic, query libraries), and the Common Workflow explicitly says to test with run_query before installing and run with run_installed_query afterward. This is clear when-to-use guidance and implies the one-off execution case belongs to run_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__is_query_installedARead-onlyIdempotent
Check if a query is installed in TigerGraph without running it.
Use When: • Verifying query installation • Before trying to run an installed query • Conditional query logic
Quick Start:
{
"query_name": "getPersonFriends"
}Tips: • Returns true/false • Faster than trying to run and catching errors • Use before 'run_installed_query'
Related Tools: install_query, run_installed_query, show_query
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the query to check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds behavioral context beyond annotations: it states the return type (true/false) and compares it to running a query ('Faster than trying to run and catching errors'). This adds value without contradicting the annotations. A score of 4 is appropriate since it provides useful supplementary behavior information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, 'Use When' bullets, a JSON example, and a 'Tips' section. It is concise, front-loaded with the core purpose, and every sentence serves a distinct purpose. The use of formatting (headings, code block) enhances scannability without redundancy.
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 existence check tool with no output schema, the description covers all essential aspects: what it does, when to use it, how to call it with an example, expected return (true/false), and related tools. No critical information is missing for an agent to correctly invoke this tool in a workflow.
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 100%, with each parameter (profile, graph_name, query_name) already documented in the schema. The description adds a concrete JSON quick-start example, which illustrates the expected input format and reduces ambiguity. While it doesn't redefine parameter semantics, the example is a valuable addition beyond the schema's formal descriptions, justifying a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, actionable statement: 'Check if a query is installed in TigerGraph without running it.' This clearly names the verb, resource, and scope, and distinguishes it from siblings like run_installed_query and install_query. An agent can immediately understand what this tool does and how it differs from related 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 'Use When' section explicitly lists scenarios: verifying installation, before running a query, and for conditional logic. It also provides a direct recommendation: 'Use before run_installed_query.' Related tools are listed, giving clear routing to alternatives. This is explicit and actionable guidance on when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__list_connectionsARead-onlyIdempotent
List all available TigerGraph connection profiles. Profiles are configured via environment variables: the default profile uses TG_HOST, TG_USERNAME, etc., while named profiles use _TG_HOST, _TG_USERNAME, etc.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this tool read-only, idempotent, and non-destructive, so the description does not need to restate safety. It adds meaningful behavioral context by explaining the env-var naming convention and the difference between default and named profiles, which helps the agent understand what 'available' means.
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 two sentences with no filler. The primary purpose is front-loaded in the first sentence, and the second sentence provides essential clarifying detail about profile configuration without redundancy.
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, zero-parameter, read-only listing tool, the description is largely complete: it names the resource, the scope ('all available'), and the configuration mechanism. It does not specify the output format, but given the simplicity of the tool and the strong annotations, this is not a significant 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?
The tool has zero parameters, so the baseline is 4. The schema is already complete, and the description adds relevant context about the environment-variable naming scheme that effectively defines the available profiles. No parameter documentation is needed.
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: 'List all available TigerGraph connection profiles.' It uses a specific verb ('list') and a specific resource ('connection profiles'), and the 'all available' wording distinguishes it from more specific sibling tools like show_connection. The additional env-var detail reinforces what is being listed.
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 gives useful context about how profiles are configured via environment variables, implying the tool is for discovering configured profiles. However, it does not explicitly state when to use this tool compared to siblings such as show_connection or authenticate, nor does it provide any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__list_graphsARead-onlyIdempotent
List all graph names in the TigerGraph database. Returns only graph names — no schema, query, or job details.
Use When: • Discovering what graphs exist in the database • First step when connecting to a new TigerGraph instance • Verifying a graph was created or dropped successfully
Quick Start:
{}(No parameters needed)
Next Steps: • Use 'show_graph_details' to see everything under a graph (schema, queries, jobs) • Use 'get_graph_schema' to get just the schema (vertex/edge types)
Related Tools: show_graph_details, get_graph_schema, create_graph
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations by restricting the return value to graph names only and explicitly excluding schema, query, and job details, which is useful for an agent deciding whether this tool satisfies a request.
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, use cases, quick start, and next steps. Each section earns its place, and the core purpose statement is front-loaded in the first sentence. No filler or redundant explanation exists beyond useful routing 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?
For a simple list tool with zero required parameters, the description is fully sufficient. It explains what it returns, when to use it, how to call it, and points to related tools for broader or deeper information. There is no output schema, but the description explicitly states the output scope, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the optional profile parameter at 100% coverage, providing a solid baseline. The description adds value by emphasizing that no parameters are needed and providing a concrete Quick Start with an empty JSON object, which reassures the agent that a zero-argument call is valid.
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: 'List all graph names in the TigerGraph database.' It further distinguishes itself by explicitly saying it returns 'only graph names — no schema, query, or job details,' which clearly separates it from siblings like get_graph_schema and show_graph_details.
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 'Use When' section provides explicit scenarios: discovering existing graphs, first step on a new instance, and verifying creation/dropping. 'Next Steps' and 'Related Tools' explicitly route the agent to show_graph_details and get_graph_schema for more detailed information, making the alternative selection clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__list_vector_attributesARead-onlyIdempotent
Get vector attribute information (name, dimension, metric) for vertex types in a graph. Parses the output of the GSQL 'LS' command. Optionally filter by vertex type.
Related Tools: add_vector_attribute, drop_vector_attribute, get_vector_index_status
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | No | Filter by vertex type. If not provided, returns vector attributes for all vertex types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it parses the GSQL 'LS' command, a useful implementation detail. However, it does not describe return structure or any other behavioral nuances, so it adds only marginal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a related-tools line, with the core purpose front-loaded. It is efficient and avoids unnecessary wording. The related-tools line is brief and useful for navigation, though it is not strictly part of the tool's behavior.
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 read-only listing tool with no output schema, the description adequately explains what is returned (vector attribute name, dimension, metric) and the optional filtering. The schema covers parameter defaults. It is complete enough for an agent to call it correctly, though it could mention error conditions or graph requirements.
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 100%, so the schema already documents all three parameters. The description's mention of 'Optionally filter by vertex type' only reiterates the vertex_type schema description and adds no new meaning. Baseline 3 applies because the schema does the heavy lifting.
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 ('Get'), a specific resource ('vector attribute information'), and the fields returned (name, dimension, metric). It also mentions it parses the GSQL 'LS' command, distinguishing it from sibling tools like add_vector_attribute and get_vector_index_status. The purpose is unambiguous and easily differentiated from related 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 lists related tools (add_vector_attribute, drop_vector_attribute, get_vector_index_status) but does not explicitly state when to use this tool versus those alternatives. The context implies this is for inspection only, but no explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__load_vectors_from_csvA
Bulk-load vectors from a CSV/delimited file into a vertex type's vector attribute. Creates a GSQL loading job, runs it with the file, then drops the job.
File format: Each row has a vertex ID and a vector. Fields are separated by field_separator (default |). Vector elements are separated by element_separator (default ,).
Example file (field_separator='|', element_separator=','):
vertex1|0.1,0.2,0.3
vertex2|0.4,0.5,0.6Prerequisites:
Vertex type must already exist
Vector attribute must already be added (use 'add_vector_attribute')
File must exist on the local machine (it is uploaded to TigerGraph via REST)
Related Tools: add_vector_attribute, load_vectors_from_json (JSON Lines alternative), upsert_vectors (REST API for in-memory data), get_vector_index_status (check indexing after load)
| Name | Required | Description | Default |
|---|---|---|---|
| header | No | Whether the file has a header row. Default: false. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| file_path | Yes | Absolute path to the CSV/delimited data file on the local machine (uploaded to TigerGraph via REST). Each row has a vertex ID and a vector column. | |
| id_column | No | Column for vertex ID: integer index (0-based) or header name. Default: 0 (first column). | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Target vertex type that has the vector attribute. | |
| vector_column | No | Column containing the vector data: integer index (0-based) or header name. Default: 1 (second column). | |
| field_separator | No | Separator between fields (columns) in the file. Default: '|'. | | |
| vector_attribute | Yes | Name of the vector attribute to load into. | |
| element_separator | No | Separator between vector elements within the vector column. Default: ','. | , |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals key behavioral details beyond the annotations: it creates and then drops a GSQL loading job, uploads the local file via REST, and requires the vertex type and vector attribute to pre-exist. Annotations only indicate non-read-only/non-destructive behavior, so this additional context meaningfully helps the agent anticipate side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections for purpose, file format, example, prerequisites, and related tools. It is somewhat long but each section serves a purpose for a 10-parameter tool, and the critical details are front-loaded in the first sentence.
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, the description provides all necessary context: prerequisites, file format with an example, the upload mechanism, and related follow-up tools. There is no output schema, but the description covers the operational behavior well enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all parameters with 100% coverage, establishing a baseline of 3. The description adds value by giving a concrete file-format example, explaining the default separators, and clarifying that each row contains a vertex ID plus a vector column. This goes beyond the schema's field-level 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 states a specific verb and resource: 'Bulk-load vectors from a CSV/delimited file into a vertex type's vector attribute.' It also clearly distinguishes this from related tools by naming load_vectors_from_json and upsert_vectors as alternatives. The scope is unambiguous and the lifecycle (create, run, drop loading job) is explicit.
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 lists prerequisites and related tools, telling agents to use add_vector_attribute first, load_vectors_from_json for JSON Lines input, upsert_vectors for in-memory data, and get_vector_index_status after loading. This gives clear when-to-use and when-not-to-use guidance without relying on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__load_vectors_from_jsonA
Bulk-load vectors from a JSON Lines (.jsonl) file into a vertex type's vector attribute. Creates a GSQL loading job with JSON_FILE="true", runs it with the file, then drops the job.
File format: Each line is a JSON object with an ID field and a vector field. The vector is stored as a comma-separated string (not a JSON array).
Example file (id_key='id', vector_key='embedding'):
{"id": "vertex1", "embedding": "0.1,0.2,0.3"}
{"id": "vertex2", "embedding": "0.4,0.5,0.6"}Prerequisites:
Vertex type must already exist
Vector attribute must already be added (use 'add_vector_attribute')
File must exist on the local machine (it is uploaded to TigerGraph via REST)
Related Tools: add_vector_attribute, load_vectors_from_csv (CSV alternative), upsert_vectors (REST API for in-memory data), get_vector_index_status (check indexing after load)
| Name | Required | Description | Default |
|---|---|---|---|
| id_key | No | JSON key for the vertex ID. Default: 'id'. | id |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| file_path | Yes | Absolute path to the JSON Lines (.jsonl) file on the local machine (uploaded to TigerGraph via REST). Each line is a JSON object with an ID field and a vector field. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vector_key | No | JSON key for the vector data (stored as a comma-separated string). Default: 'vector'. | vector |
| vertex_type | Yes | Target vertex type that has the vector attribute. | |
| vector_attribute | Yes | Name of the vector attribute to load into. | |
| element_separator | No | Separator between vector elements within the vector string value. Default: ','. | , |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (non-read-only, non-idempotent, non-destructive), the description discloses the full lifecycle: creates a GSQL loading job, runs it, then drops it. It also warns that the file is uploaded to TigerGraph via REST and that vectors must be comma-separated strings, not JSON arrays.
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 first sentence states the core action, and the rest is organized under File format, Example, Prerequisites, and Related Tools. No filler; it is detailed but still scannable.
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 format, prerequisites, process, and alternatives. It does not state what response or status is returned, but it is otherwise complete for a complex multi-parameter tool, and the related get_vector_index_status suggests a post-check.
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 already covers 100% of parameters with descriptions, so the baseline is 3. The description adds real value by showing a concrete file example with id_key and vector_key, clarifying the comma-separated string representation, and explaining element_separator usage.
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 opening sentence names the exact operation: bulk-load vectors from a .jsonl file into a vector attribute, including the mechanism (create, run, drop a GSQL load job). It specifically says JSON Lines, which distinguishes it from the CSV sibling.
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?
Prerequisites are explicit (vertex type, vector attribute, local file), and Related Tools names the CSV alternative, the in-memory REST API path, and the post-load index check. The description also calls out the id_key/vector_key convention with an example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__preview_sample_dataBRead-onlyIdempotent
Preview sample data from a file in a data source.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| num_rows | No | Number of sample rows to preview. | |
| file_path | Yes | For an object store source, the path to the file within the data source (e.g. 's3a://bucket/data.csv'). For a warehouse source such as Snowflake, the SQL query to sample instead (e.g. 'SELECT * FROM <db>.<schema>.<table>'). | |
| graph_name | No | Name of the graph context. If not provided, uses default connection. | |
| data_source_name | Yes | Name of the data source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description's 'Preview' is consistent with these. The description adds no additional behavioral context beyond annotations, such as output format, error handling, or side effects. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action ('Preview sample data'). It contains no unnecessary words and is appropriately concise for a simple read-only operation.
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 simple nature of the tool, annotations covering safety, and the schema documenting all parameters, the description is sufficient. It could mention the return of sample rows or the distinction between file and query, but those are implied by the schema and tool name. The description adequately conveys the core function.
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 100% parameter description coverage, including detailed explanations for file_path (distinguishing object store vs. warehouse) and other fields. The tool description does not add any parameter semantics beyond what the schema already provides, so it relies on the schema for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (preview) and resource (sample data from a file in a data source). It is clear and distinguishes from other tools by its unique focus on sampling, though it does not explicitly name an alternative. It is more specific than a generic 'preview' and fits the tool's purpose.
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?
No guidance is provided on when to use this tool versus alternatives. The description only states what it does, leaving the agent to infer that it is for inspecting data before loading. There are no exclusions, prerequisites, or mentions of alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__run_installed_queryADestructive
Run an installed GSQL query on a TigerGraph graph with parameters. Faster than interpreted queries for repeated execution.
Use When: • Running pre-installed, compiled queries • Queries that are executed frequently • Performance-critical operations • Parameterized queries with different inputs
Quick Start:
{
"query_name": "getPersonFriends",
"params": {"personId": "user123", "maxHops": 2}
}Common Workflow:
Install query once with 'install_query'
Run multiple times with 'run_installed_query' and different params
Much faster than 'run_query' for repeated use
Tips: • Queries must be installed first with 'install_query' • Use 'is_query_installed' to check if query exists • Provide params as dictionary matching query signature • Faster than interpreted queries
Related Tools: install_query, is_query_installed, show_query
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Query parameters. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the installed query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint true, so the description doesn't need to repeat that. It adds useful context: performance benefits, installation prerequisite, and the workflow of installing once and running multiple times. It doesn't mention side effects, but annotations cover that. No contradiction.
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 (Use When, Quick Start, Workflow, Tips), but it repeats the performance claim twice and is somewhat lengthy. Still, every section adds value, and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers when to use, prerequisites, and workflow, but lacks any mention of the return value or response format. Since there is no output schema, the agent has to infer that the tool returns query results. It also doesn't discuss error handling, though that might be less critical. Overall, it's mostly complete but missing the output expectation.
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 descriptions are already detailed for profile and graph_name, but params description is minimal. The description adds clarity by stating 'params as dictionary matching query signature' and provides a concrete JSON example, which helps the agent understand the expected 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 verb 'Run' and the resource 'installed GSQL query', and distinguishes itself from run_query by emphasizing 'installed' and 'faster than interpreted'. It also lists related tools, making its role clear.
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?
Explicit 'Use When' section lists conditions (pre-installed, frequent, performance-critical, parameterized) and contrasts with run_query for repeated use. The workflow explicitly says to install first and use is_query_installed to check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__run_loading_job_with_dataB
Execute a loading job with inline data string. The data is posted to TigerGraph and loaded according to the specified loading job definition.
| Name | Required | Description | Default |
|---|---|---|---|
| eol | No | End-of-line character. Default is '\n'. Supports '\r\n'. | |
| data | Yes | The data string to load (CSV, JSON, etc.). Example: 'user1,Alice\nuser2,Bob' | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| timeout | No | Timeout in milliseconds. Set to 0 for system-wide timeout. | |
| file_tag | Yes | The name of file variable in the loading job (DEFINE FILENAME <fileTag>). | |
| job_name | Yes | The name of the loading job to run. | |
| separator | No | Data value separator. Default is comma. For JSON data, don't specify. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| size_limit | No | Maximum size for input data in bytes (default 128MB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is not read-only and not idempotent. The description adds that data is 'posted to TigerGraph and loaded according to the specified loading job definition,' which conveys the write-like load behavior without contradicting annotations. It does not detail side effects like upsert semantics or partial-failure behavior.
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 two short sentences with the core action front-loaded. The second sentence is somewhat redundant but adds the useful framing that data is posted and interpreted by the loading job definition.
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 nine-parameter tool, the description is adequate but thin: it explains the action and relies on the rich schema for parameter details. It does not mention return values or status reporting, though no output schema exists, and it leaves usage differentiation from the file variant implicit.
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 100%, so the schema already documents all nine parameters. The description adds little beyond naming the inline-data mechanism, which is a minor complement to the `data` parameter and the loading-job context.
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 a specific action: execute a loading job with an inline data string. The inline-data mode distinguishes it from the sibling `run_loading_job_with_file`, though it does not explicitly name that alternative.
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 phrase 'with inline data string' implies this tool is for cases where data is passed directly rather than read from a file. However, it does not explicitly state when to prefer this over `run_loading_job_with_file` or other data-source tools, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__run_loading_job_with_fileC
Execute a loading job with a data file. The file is uploaded to TigerGraph and loaded according to the specified loading job definition.
| Name | Required | Description | Default |
|---|---|---|---|
| eol | No | End-of-line character. Default is '\n'. Supports '\r\n'. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| timeout | No | Timeout in milliseconds. Set to 0 for system-wide timeout. | |
| file_tag | Yes | The name of file variable in the loading job (DEFINE FILENAME <fileTag>). | |
| job_name | Yes | The name of the loading job to run. | |
| file_path | Yes | Absolute path to the data file to load. Example: '/home/user/data/persons.csv' | |
| separator | No | Data value separator. Default is comma. For JSON data, don't specify. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| size_limit | No | Maximum size for input file in bytes (default 128MB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, implying this is a mutating operation. The description only says the file is uploaded and loaded, but doesn't disclose side effects, error behavior, or that the loading job must be pre-defined. It doesn't add meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, efficient and to the point. It front-loads the action and resource. No wasted words, but it's arguably too terse for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters and no output schema. The description doesn't explain return values, error handling, or how the loading job interacts with existing data. It doesn't mention that the job must already be created (via create_loading_job). For an agent, this is incomplete for safe 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 input schema has 100% description coverage, so all parameters are documented in the schema. The tool description adds no additional parameter semantics; it doesn't elaborate on file_path, job_name, or any optional parameters beyond what the schema provides.
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 ('Execute a loading job') and the resource ('with a data file'), and mentions the upload. It doesn't explicitly name the sibling 'run_loading_job_with_data' to differentiate, but the phrase 'with a data file' implies the distinction. It's specific enough for an agent to understand the core purpose.
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 no guidance on when to use this tool versus the sibling 'run_loading_job_with_data' or other loading job tools. It doesn't mention prerequisites like the loading job must already exist, or the file must be accessible. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__run_queryADestructive
Run an interpreted query on a TigerGraph graph. Supports both GSQL and openCypher query languages. Use this for ad-hoc queries without needing to install them first.
Use When: • Running one-time or ad-hoc queries • Testing queries before installation • Simple data retrieval operations • Prototyping and exploration
Quick Start (GSQL):
{
"query_text": "INTERPRET QUERY () FOR GRAPH MyGraph { SELECT v FROM Person:v LIMIT 5; PRINT v; }"
}Quick Start (Cypher):
{
"query_text": "INTERPRET OPENCYPHER QUERY () FOR GRAPH MyGraph { MATCH (n:Person) RETURN n LIMIT 5 }"
}Common Workflow:
Call 'show_graph_details' to understand the schema
Write your query using vertex/edge types from schema
Run with 'run_query' to test
For repeated use, install with 'install_query'
Tips: • Query type auto-detected (GSQL vs Cypher) • For frequent queries, use 'install_query' + 'run_installed_query' for better performance • Always include 'FOR GRAPH' clause • Use LIMIT to avoid retrieving too much data
Warning: Syntax Notes:
• GSQL: INTERPRET QUERY () FOR GRAPH <name> { <statements> }
• Cypher: INTERPRET OPENCYPHER QUERY () FOR GRAPH <name> { <cypher> }
Related Tools: run_installed_query, install_query, get_neighbors
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_text | Yes | Query text to interpret and run. Supports both GSQL and openCypher queries. For GSQL: use 'INTERPRET QUERY () FOR GRAPH <graph> { <gsql_statements> }'. For openCypher: use 'INTERPRET OPENCYPHER QUERY () FOR GRAPH <graph> { <cypher_statements> }'. The query type is auto-detected based on the INTERPRET keyword used. Example (GSQL): `INTERPRET QUERY () FOR GRAPH MyGraph { SELECT v FROM Person:v }`Example (Cypher): `INTERPRET OPENCYPHER QUERY () FOR GRAPH MyGraph { MATCH (n) RETURN n LIMIT 5 }` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry destructiveHint=true, and the description adds genuinely useful behavioral context beyond that: query type auto-detection (GSQL vs Cypher), the mandatory 'FOR GRAPH' clause, and a LIMIT tip to cap result size. Minor gap: the 'Simple data retrieval operations' bullet mildly underplays that interpreted queries can also mutate data, but this does not contradict the destructiveHint annotation.
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, Use When, Quick Start, Workflow, Tips, and Related Tools sections; core purpose is front-loaded. Slightly long, and the Syntax Notes section partially duplicates the schema's query_text examples, but the length is justified for a tool supporting two query languages with distinct syntax.
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?
Highly complete for a complex two-language query executor: it provides syntax templates, workflow guidance, performance guidance, and sibling routing. The main gap is that no output schema exists and the description never hints at what the result looks like; otherwise an agent has everything needed to call it 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 description coverage is 100%, so the baseline is 3. The schema already documents profile, graph_name, and query_text with syntax templates and examples for both languages. The description's Quick Start payloads reinforce but do not add semantically new parameter meaning beyond the schema, so it stays at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Run an interpreted query on a TigerGraph graph.' It names both supported languages (GSQL and openCypher) and immediately differentiates from siblings by stating 'without needing to install them first,' which cleanly separates it from run_installed_query. The Related Tools section reinforces the distinction.
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?
Contains an explicit 'Use When' section listing concrete scenarios (ad-hoc, testing before install, prototyping), plus a 'For frequent queries, use install_query + run_installed_query for better performance' exclusion that routes the agent to alternatives. The Common Workflow provides a step-by-step decision path anchored on a sibling (show_graph_details).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__search_top_k_similarityARead-onlyIdempotent
Perform vector similarity search using TigerGraph's vectorSearch() function. Returns top-K most similar vertices with distance scores.
IMPORTANT: The query_vector dimensions MUST match the dimension defined in the vector attribute (e.g., if the attribute was created with DIMENSION=1536, the query vector must have exactly 1536 elements). A dimension mismatch will cause the search to fail or return incorrect results.
Use list_vector_attributes to check the expected dimension before searching.
Related Tools: list_vector_attributes (check dimension), fetch_vector (retrieve vector values), get_vector_index_status (check index readiness)
| Name | Required | Description | Default |
|---|---|---|---|
| ef | No | Exploration factor for HNSW algorithm. Higher = more accurate but slower. | |
| top_k | No | Number of top similar results to return. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Type of vertices to search. | |
| query_vector | Yes | Query vector for similarity search. | |
| return_vectors | No | Whether to return the vector values (can be large). | |
| vector_attribute | Yes | Name of the vector attribute to search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to restate safety. It adds valuable behavioral context beyond annotations: the critical warning that 'a dimension mismatch will cause the search to fail or return incorrect results,' and the return format of 'top-K most similar vertices with distance scores.' This is substantive, non-redundant disclosure.
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 efficiently organized: main purpose first, then a bolded IMPORTANT warning, a concrete action step, and a compact related-tools list. Every sentence earns its place, and the critical constraint is front-loaded so it is unlikely to be missed.
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 no output schema, the description steps up by stating the return format (top-K vertices with distance scores). It also discloses the primary failure mode (dimension mismatch), directs the agent to a preflight check, and references index-readiness and vector-retrieval tools. For a read-only search tool whose safety profile is fully covered by annotations, nothing essential is missing.
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 100%, so each parameter already has meaningful documentation. The description adds value by elaborating on query_vector semantics: the dimension must exactly match the vector attribute's dimension, with a concrete example (DIMENSION=1536). This goes beyond the schema's generic 'Query vector for similarity search' and compensates for the most error-prone parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Perform vector similarity search using TigerGraph's vectorSearch() function,' and clearly states the output: 'Returns top-K most similar vertices with distance scores.' This distinguishes it from sibling vector tools like fetch_vector (retrieve specific vectors) and list_vector_attributes (check dimensions), leaving no ambiguity about the tool's role.
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 pre-search guidance: 'Use list_vector_attributes to check the expected dimension before searching.' It also lists related tools with their purposes, giving context for when to use alternatives (e.g., get_vector_index_status to check index readiness). It lacks an explicit 'when not to use this' statement, but the guidance is clear enough for an agent to act correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__show_connectionARead-onlyIdempotent
Show non-sensitive connection details for a specific profile (host, username, graph name, ports). Never reveals passwords or tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name to inspect. If not provided, shows the active profile (from TG_PROFILE env var or 'default'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat that. It adds the valuable behavioral note that it 'Never reveals passwords or tokens,' which goes beyond the annotations and informs the agent about data safety. No contradiction with annotations; it complements them.
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 a single, dense sentence that front-loads the action and scope, then adds the security caveat. There is no redundant wording, and every phrase earns its place. It is highly 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?
For a simple read-only tool with one optional parameter, an output schema is unnecessary, and annotations already cover safety. The description fully informs the agent about what is returned (non-sensitive details) and what is not, making it complete for correct 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 schema description for the profile parameter is comprehensive (covers default behavior and environment variable), giving 100% coverage. The tool description adds no extra parameter meaning beyond restating 'specific profile,' so it does not exceed the baseline of 3 for high schema coverage.
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 (Show), the resource (non-sensitive connection details), and the scope (a specific profile). It also lists the included fields (host, username, graph name, ports) and explicitly excludes sensitive data. However, it does not explicitly contrast with sibling tools like list_connections, which might list all profiles, so it lacks explicit sibling 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 phrase 'for a specific profile' implies when to use this tool (when you want details of one profile), but it does not mention alternatives or state when not to use it. There is no explicit guidance on choosing between this and list_connections or authenticate, so the usage context is implied but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__show_graph_detailsARead-onlyIdempotent
Show details of a specific graph. By default shows everything (schema, queries, loading jobs, data sources). Use 'detail_type' to show only a specific category.
Use When: • You need a full picture of a graph (schema + queries + jobs) • Starting work with a graph (call this first!) • Checking which queries or loading jobs are installed • Debugging schema or job issues
Quick Start:
{ "graph_name": "SocialNetwork" }(Shows everything under the graph)
Filter by category:
{ "graph_name": "SocialNetwork", "detail_type": "query" }Options: 'schema', 'query', 'loading_job', 'data_source'
Tips:
• No detail_type → shows all (GSQL LS output)
• For structured JSON schema, use 'get_graph_schema' instead
• For just graph names, use 'list_graphs'
• For vector attributes, use 'list_vector_attributes' instead
Related Tools: get_graph_schema (schema JSON), list_graphs (names only), list_vector_attributes (vector attribute details)
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| detail_type | No | Which details to show. Options: 'schema' (vertex/edge types), 'query' (installed queries), 'loading_job' (loading jobs), 'data_source' (data sources). If not provided, shows everything (equivalent to GSQL LS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, read-only operation. The description adds valuable behavioral context: that omitting 'detail_type' shows everything and that it's roughly equivalent to GSQL 'LS' output. However, it doesn't dwell on return format, but the annotation coverage is strong, so this is a minor gap.
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 bullet points, JSON examples, and a quick-start section. Very easy to scan and understand. Slightly long (for a description), but each line earns its place by conveying use cases, alternatives, and examples. 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?
A read-only, parameterless-required tool with a rich schema (3 parameters, all optional, well-documented) and no output schema. The description provides all necessary info: what it returns, how to filter, alternatives, and JSON examples. Nothing an agent needs to call it correctly is missing.
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 100%, so the schema already documents each parameter. The description adds value by providing example JSON payloads and enumerating the 'detail_type' options with their meaning (e.g., 'schema' shows vertex/edge types). It also clarifies the behavior of omitting the parameter, surpassing what the schema alone offers. This goes beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it 'shows details of a specific graph' with a specific verb and resource. It explicitly differentiates from siblings like 'get_graph_schema' (structured JSON) and 'list_graphs' (names only), and the 'detail_type' parameter's purpose is well explained.
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 When' bullet points (e.g., 'Starting work with a graph (call this first!)'), lists specific alternative tools and when to use them instead, and explains the behavior of omitting 'detail_type'. This is exemplary guidance that directly helps an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__show_queryARead-onlyIdempotent
Show the GSQL text of an installed query.
Use When: • Reviewing what an installed query does • Debugging query behavior • Understanding existing queries • Documenting installed queries
Quick Start:
{
"query_name": "getPersonFriends"
}Tips: • Returns the full GSQL query text • Query must be installed first • Use 'is_query_installed' to check existence
Related Tools: install_query, get_query_metadata, is_query_installed
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the query to show. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns the full GSQL query text, requires the query to be installed first, and suggests checking existence. This goes beyond annotations without contradicting them.
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 headers: purpose, Use When, Quick Start, Tips, and Related Tools. The main purpose is front-loaded, and each section adds distinct value without redundancy. It's appropriately sized and easy to scan.
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 simplicity of the tool (show query text) and the presence of safety annotations, the description covers the essential aspects: purpose, usage scenarios, prerequisites (installed query), and return value (full GSQL text). It lacks details on error handling or exact output formatting, but these are minor for a read-only operation. No output schema exists, so the description adequately explains the return.
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 100% – all three parameters have descriptions in the schema, so the baseline is 3. The description provides a quick start example for query_name but doesn't enrich understanding of profile or graph_name beyond what the schema already states. It adds marginal value over 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's function: 'Show the GSQL text of an installed query.' This is a specific verb and resource, and it distinguishes from siblings like run_query (executing) and install_query (installing). The 'Use When' section reinforces the purpose with concrete scenarios.
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 'Use When' section provides explicit scenarios for using this tool, and the tip 'Use is_query_installed to check existence' gives actionable guidance. It lists related tools (install_query, get_query_metadata, is_query_installed) but doesn't explicitly contrast when to use them instead. This is clear but slightly lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__update_data_sourceCIdempotent
Update an existing data source configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | Updated configuration for the data source. | |
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| data_source_name | Yes | Name of the data source to update. | |
| data_source_type | No | Type of the data source. Optional; when given, the configuration is validated against that type before the update is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral context: it does not state whether the update merges or replaces the configuration, whether it validates against the data source type, or what happens to unspecified fields. With no additional disclosure, the description fails to enrich the agent's understanding beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is immediately clear. It is front-loaded with the action and object, and there is no extraneous text. While it is minimal, it achieves the necessary clarity without being verbose, so it earns a strong score for conciseness.
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 mutation tool with no output schema and a nested configuration object, the description is severely lacking in contextual detail. It does not explain what 'configuration' means, what fields are expected, whether the update is partial or full, or any prerequisites (e.g., the data source must exist). The schema provides generic parameter descriptions, but the description fails to give the agent enough context to safely invoke the update operation. This is incomplete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all four parameters with descriptions (100% coverage), so the baseline is 3. The tool description adds no parameter-specific meaning; it only repeats 'data source configuration' without elaborating on the 'config' object's structure or the optional 'profile'/'data_source_type' fields. Since the schema already provides the basic semantics, the description does not need to compensate, but it also does not enhance them.
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 clear action ('Update') and resource ('data source configuration'), making the tool's purpose unambiguous. However, it does not differentiate from sibling tools like create_data_source or drop_data_source, so it relies on the verb to distinguish. It is specific enough for an agent to understand what it does.
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 no guidance on when to use this tool versus alternatives. It does not mention that the data source must already exist, nor does it contrast with create_data_source or drop_data_source. The schema hints that data_source_type is optional for validation, but the description itself gives no usage context, leaving the agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__update_query_descriptionAIdempotent
Set a human-readable description for an installed query and, optionally, descriptions for each of its parameters. Requires TigerGraph 4.0+.
Use When: • Documenting what an installed query does and what its parameters mean • Making queries self-describing for agents and other consumers
Quick Start:
{
"query_name": "getPersonFriends",
"query_description": "Return the friends of a given person.",
"parameter_descriptions": {"personId": "ID of the person to look up"}
}Tips: • Query must be installed first • Omit 'parameter_descriptions' to set only the query-level description • Read it back with 'get_query_description'
Related Tools: get_query_description, get_query_metadata, show_query
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| query_name | Yes | Name of the installed query to describe. | |
| query_description | Yes | Human-readable description of what the query does. | |
| parameter_descriptions | No | Per-parameter descriptions, keyed by parameter name (e.g. {"personId": "The id of the person to look up"}). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the TigerGraph 4.0+ version requirement and the prerequisite that the query must be installed, which is useful context. It doesn't contradict annotations and adds value beyond them, though it could detail overwrite behavior or error handling more.
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 headers (Use When, Quick Start, Tips, Related Tools) and front-loaded with the core action. It is somewhat lengthy but each section serves a purpose, with no redundant sentences.
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 low-complexity tool with no output schema, the description covers prerequisites, optional parameters, and related read-back tool. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with descriptions (100% coverage). The description provides a Quick Start example and notes that parameter_descriptions is optional, but it doesn't add significant semantic depth beyond what the schema already provides. Baseline 3 is appropriate.
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 ('Set') and resource ('a human-readable description for an installed query') and differentiates from siblings by focusing on the write operation vs. get_query_description and show_query. The purpose is unambiguous and specific.
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 includes a 'Use When' section with explicit conditions (documenting queries, making them self-describing) and lists related tools for context. It also provides tips about prerequisites (query must be installed) and how to read back the result, making usage guidance complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__update_schemaADestructive
Apply incremental schema changes: add/drop vertex types, edge types, or individual attributes. Supports both local (graph-scoped) and global schema changes.
Use When:
Adding new vertex or edge types to an existing graph (local)
Creating global vertex/edge types shared across graphs (global)
Dropping vertex or edge types that are no longer needed
Adding or removing attributes on existing vertex types
Local schema change (add a vertex type to a graph):
{
"graph_name": "MyGraph",
"add_vertex_types": [{"name": "Product", "attributes": [{"name": "price", "type": "FLOAT"}]}]
}Global schema change (omit graph_name):
{
"add_vertex_types": [{"name": "SharedVertex", "attributes": [{"name": "val", "type": "INT"}]}]
}Tips:
Drop edges referencing a vertex type before dropping the vertex type
Adding attributes with defaults avoids null values on existing data
Use 'get_graph_schema' to inspect the current schema first
Omit 'graph_name' to apply changes at the global level
Related Tools: create_graph, get_graph_schema, show_graph_details
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. If not provided, uses TG_PROFILE env var or 'default'. | |
| graph_name | No | Name of the graph to modify. If not provided, runs a global schema change. | |
| add_edge_types | No | Edge type definitions to add (same format as create_graph). | |
| drop_edge_types | No | Names of edge types to drop. | |
| add_vertex_types | No | Vertex type definitions to add (same format as create_graph). | |
| drop_vertex_types | No | Names of vertex types to drop. | |
| add_vertex_attributes | No | Map of vertex type name to list of attributes to add. E.g. {"Person": [{"name": "score", "type": "FLOAT"}]} | |
| drop_vertex_attributes | No | Map of vertex type name to list of attribute names to drop. E.g. {"Person": ["old_attr"]} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already flags mutating behavior, and the description adds meaningful detail: warnings to drop referencing edges before vertex types, note that defaults avoid nulls on existing data, and clarification that omitting graph_name switches from local to global scope, affecting blast radius.
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 markdown structure (Use When, examples, Tips, Related Tools) makes it scannable and the summary is front-loaded. Minor redundancy exists: local/global scope is stated in the intro, Use When bullets, and Tips, so not every sentence is strictly necessary.
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 schema-mutation tool with 8 parameters and no output schema, this description covers operation types, target scope, ordering constraints, and safe pre-checks, and names related tools. It does not describe response/return behavior or explicitly state whether multiple change types can be combined, but the schema and annotations cover most remaining essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 8 parameters with 100% coverage, so the baseline is 3. The description adds JSON examples for local vs global add_vertex_types calls and an explicit explanation of graph_name omission semantics, which illustrates what the schema states without example.
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 opening sentence names the exact action ('Apply incremental schema changes') and resources ('vertex types, edge types, or individual attributes'), and specifies local vs global scope. This is specific enough to distinguish it from create_graph/drop_graph before looking at parameters.
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 'Use When' section gives concrete scenarios: adding to an existing graph, creating global types, dropping types, and altering attributes. The 'Related Tools' list names alternatives, but the description does not explicitly say 'for new graph creation use create_graph', so it lacks an explicit when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__upsert_vectorsAIdempotent
Upsert multiple vertices with vector data using the REST Upsert API. Vectors must be provided inline as lists of floats (i.e., already in memory). To bulk-load vectors from a local file, use 'load_vectors_from_csv' or 'load_vectors_from_json' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Connection profile name. Omit to use the active default profile. Use 'list_connections' to see available profiles. | |
| vectors | Yes | List of vectors to upsert, each with vertex_id, vector, and optional attributes. | |
| graph_name | No | Name of the graph. If not provided, uses default connection. | |
| vertex_type | Yes | Type of the vertices. | |
| vector_attribute | Yes | Name of the vector attribute. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the safety profile (idempotentHint true, destructiveHint false, readOnlyHint false). The description adds the inline-vector constraint and the REST API context, which are genuinely useful behavioral details beyond the annotations. It does not discuss error or response behavior, but annotations cover the core safety aspects.
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 two sentences with no filler. The first sentence states the action and API, the second states a key constraint and points to alternatives. Everything earns its place.
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, combined with the fully-described schema and safety annotations, gives an agent everything needed to call the tool correctly: the purpose, the data format requirement, and the routing to alternative tools. No output schema exists, so explaining return values is unnecessary.
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 100%, so all five parameters are described in the schema. The description reiterates that vectors must be inline lists of floats, which is a small addition, but it does not introduce any new parameter-level detail beyond what the schema already provides. Baseline of 3 is appropriate.
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 names a specific verb (Upsert), a specific resource (vertices with vector data), and the mechanism (REST Upsert API). It also names the file-based alternatives (load_vectors_from_csv/load_vectors_from_json), making it easy for an agent to distinguish this tool from its siblings.
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 the condition for using this tool: vectors must already be in memory as lists of floats. It then routes the agent to the alternative tools for file-based bulk loading, leaving no ambiguity about when to choose this over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tigergraph__validate_schema_namesARead-onlyIdempotent
Validate vertex type names, edge type names, attribute names, and the graph name against GSQL reserved keywords and naming conflict rules.
Use When:
Before calling 'create_graph' to catch naming problems early
Checking if user-supplied names conflict with GSQL keywords
Validating that vertex/edge type names don't collide with their attribute names
Quick Start:
{
"graph_name": "MyGraph",
"vertex_types": [
{"name": "SELECT", "attributes": [{"name": "count", "type": "INT"}]}
]
}(Returns warnings for 'SELECT' and 'count' as reserved keywords)
Related Tools: create_graph, get_graph_schema
| Name | Required | Description | Default |
|---|---|---|---|
| edge_types | No | Edge type definitions to validate (same format as create_graph). | |
| graph_name | No | Graph name to validate. | |
| vertex_types | No | Vertex type definitions to validate (same format as create_graph). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so no contradiction. The description adds that it returns warnings (via example) and focuses on validation without side effects, which complements the annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a main statement, Use When, Quick Start, and Related Tools. It is front-loaded, every section earns its place, and the example is compact and illustrative.
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 read-only validation tool with optional parameters, all input semantics are covered by schema plus description. It explains when to use it, how to format inputs, and what to expect (warnings). No missing critical info for correct 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?
Schema coverage is 100% with descriptions for all three parameters. The description adds a Quick Start JSON example and notes that vertex_types/edge_types follow the same format as create_graph, giving agents concrete usage guidance beyond schema field names.
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 a specific verb ('Validate'), a precise resource (vertex/edge/attribute names and graph name), and the rule set (GSQL reserved keywords and naming conflicts). It is immediately distinguishable from the sibling create_graph and get_graph_schema 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 'Use When' section lists concrete scenarios (before create_graph, keyword conflict checks, attribute-name collisions). It could explicitly state when not to use it, but the context is clear enough to route an agent correctly.
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.
69 tool updates
v1.0.2- First observed
tigergraph__add_edge - First observed
tigergraph__add_edges - First observed
tigergraph__add_node - First observed
tigergraph__add_nodes - First observed
tigergraph__add_vector_attribute - First observed
tigergraph__authenticate - First observed
tigergraph__clear_graph_data - First observed
tigergraph__create_data_source - First observed
tigergraph__create_graph - First observed
tigergraph__create_loading_job - First observed
tigergraph__delete_edge - First observed
tigergraph__delete_edges - First observed
tigergraph__delete_node - First observed
tigergraph__delete_nodes - First observed
tigergraph__discover_tools - First observed
tigergraph__drop_all_data_sources - First observed
tigergraph__drop_data_source - First observed
tigergraph__drop_graph - First observed
tigergraph__drop_loading_job - First observed
tigergraph__drop_query - First observed
tigergraph__drop_vector_attribute - First observed
tigergraph__fetch_vector - First observed
tigergraph__generate_cypher - First observed
tigergraph__generate_gsql - First observed
tigergraph__get_all_data_sources - First observed
tigergraph__get_data_source - First observed
tigergraph__get_data_source_types - First observed
tigergraph__get_edge - First observed
tigergraph__get_edge_count - First observed
tigergraph__get_edges - First observed
tigergraph__get_global_schema - First observed
tigergraph__get_graph_schema - First observed
tigergraph__get_loading_job_status - First observed
tigergraph__get_loading_jobs - First observed
tigergraph__get_neighbors - First observed
tigergraph__get_node - First observed
tigergraph__get_node_degree - First observed
tigergraph__get_node_edges - First observed
tigergraph__get_nodes - First observed
tigergraph__get_query_description - First observed
tigergraph__get_query_metadata - First observed
tigergraph__get_tool_info - First observed
tigergraph__get_vector_index_status - First observed
tigergraph__get_vertex_count - First observed
tigergraph__get_workflow - First observed
tigergraph__gsql - First observed
tigergraph__has_edge - First observed
tigergraph__has_node - First observed
tigergraph__install_query - First observed
tigergraph__is_query_installed - First observed
tigergraph__list_connections - First observed
tigergraph__list_graphs - First observed
tigergraph__list_vector_attributes - First observed
tigergraph__load_vectors_from_csv - First observed
tigergraph__load_vectors_from_json - First observed
tigergraph__preview_sample_data - First observed
tigergraph__run_installed_query - First observed
tigergraph__run_loading_job_with_data - First observed
tigergraph__run_loading_job_with_file - First observed
tigergraph__run_query - First observed
tigergraph__search_top_k_similarity - First observed
tigergraph__show_connection - First observed
tigergraph__show_graph_details - First observed
tigergraph__show_query - First observed
tigergraph__update_data_source - First observed
tigergraph__update_query_description - First observed
tigergraph__update_schema - First observed
tigergraph__upsert_vectors - First observed
tigergraph__validate_schema_names
TDQS
Scored across 69 tools
Most tools have clearly distinct purposes, with singular/plural pairs (add_node/add_nodes, get_edge/get_edges) and lifecycle operations well separated. However, get_edges and get_node_edges overlap heavily—both retrieve edges from a source vertex—and the schema trio (get_global_schema, get_graph_schema, show_graph_details) requires careful reading to distinguish.
All tool names follow a consistent snake_case verb_noun pattern (add_node, get_edges, drop_query, list_graphs). Even meta tools like discover_tools and get_workflow fit the pattern. There is no mixing of conventions or vague generic verbs.
69 tools is an extreme count, well above the 50+ threshold for over-fragmentation. Even though TigerGraph is a complex platform, the tool surface is bloated with many near-duplicate variants (singular/plural pairs, multiple vector loading methods) that will overwhelm agents and make selection harder.
The surface is remarkably comprehensive, covering schema management, node/edge CRUD, query lifecycle (interpreted, installed, described), loading jobs, data sources, vector search, and admin via gsql. Minor gaps exist, such as a dedicated list_queries tool or conditional bulk edge deletion, but agents can work around these with show_graph_details or gsql.
Maintenance
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
MCP server for OnceAsk, the AI-native current-address layer for people and agents.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityCmaintenanceA Model Context Protocol server implementation that enables LLMs to interact with NebulaGraph database for graph exploration, supporting schema understanding, queries, and graph algorithms.528Apache 2.0

Memgraph MCP Serverofficial
AlicenseCqualityNot gradedmaintenanceA lightweight server implementation of the Model Context Protocol that connects Memgraph database with LLMs, allowing users to interact with graph databases through natural language.125MIT- FlicenseNot gradedqualityDmaintenanceA robust, lightweight Model Context Protocol (MCP) server designed to empower your AI Agents with context-awareness, safe execution sandboxes, and dedicated thought logs.-
- AlicenseNot gradedqualityFmaintenanceAgent-first knowledge graph MCP server that provides 25 tools for managing a knowledge graph with nodes and edges, plus a human-readable dashboard for LLMs and AI agents.361 npmApache 2.0