Skip to main content
Glama

Server Details

Query real-time blockchain token data across EVM and Solana networks. Access token balances, transfers, prices, holders, NFT ownership, DEX swaps, and liquidity pools. Supports Ethereum, Base, Arbitrum, BSC, Polygon, Solana, and more.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsB

Average 3.6/5 across 68 of 68 tools scored. Lowest: 2/5.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct data type (balances, historical balances, holders, transfers, pools, swaps, OHLCV, etc.) within specific domains (EVM, SVM, TVM, Hyperliquid, Polymarket). The descriptions clearly differentiate between similar endpoints like getV1EvmBalances and getV1EvmBalancesHistorical.

Naming Consistency5/5

All tools follow a consistent pattern: get + V1 + domain + resource (e.g., getV1EvmBalances, getV1HyperliquidMarketsOhlc). The few meta tools (getOpenapiSpec, getSkillsMarkdown) also use the get prefix, maintaining consistency.

Tool Count4/5

68 tools is high but justified given the broad scope covering multiple chains and platforms. Each tool earns its place, though the sheer number may overwhelm agents. The count is better suited for a comprehensive API than a lean toolset.

Completeness3/5

The API covers tokens, balances, transfers, holders, DEX data, OHLCV, and platform-specific endpoints for Hyperliquid and Polymarket. However, there are gaps: SVM and TVM lack NFT endpoints, and TVM is missing balance, holders, and transfer-like endpoints beyond basic transfers. The EVM coverage is more complete.

Available Tools

68 tools
getLlmsTextAInspect

Returns the public llms.txt documentation index for AI tools discovering Token API.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: text/markdown; charset=UTF-8

    • Example:

"# Token API\n\n> Real-time token, balance, transfer, holder, DEX, NFT, Polymarket, and Hyperliquid data across EVM, SVM, and TVM networks.\n\n..."
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior3/5

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

The description discloses the response format (text/markdown) and provides an example, which adds value beyond the absent annotations. However, it does not cover potential error responses, authentication requirements, or rate limits. Since no annotations exist, the description carries the full burden, and it is only partially transparent.

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

Conciseness4/5

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

The description is relatively concise and front-loaded with the main purpose. It includes a list of response details and an example. Minor redundancy (e.g., 'Successful Response' could be omitted) but overall well-structured and efficient.

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

Completeness3/5

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

The description adequately conveys the tool's purpose and response format, but it does not fully explain the content of the llms.txt file beyond a truncated example. Since an output schema exists (though not provided), the description need not detail return values, but additional context about the file's structure or use cases would improve completeness.

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

Parameters4/5

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

The input schema is empty with no parameters, so schema description coverage is 100%. According to guidelines, zero parameters warrant a baseline of 4. The description does not need to add parameter information, and it correctly avoids superfluous details.

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

Purpose4/5

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

The description clearly states that the tool returns the public llms.txt documentation index for AI tools discovering the Token API. It uses a specific verb and resource, making it easy to understand. However, it does not explicitly differentiate from sibling documentation tools like getOpenapiSpec or getSkillsMarkdown, which weakens its distinctiveness.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving the llms.txt file for AI tool discovery, but it provides no explicit guidance on when to use this tool versus alternatives. Given the presence of sibling documentation tools, some usage context would be beneficial. The description lacks exclusions or alternative recommendations.

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

getOpenapiSpecAInspect

Returns the public OpenAPI specification for Token API.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Example:

{
  "openapi": "3.1.0",
  "info": {},
  "servers": [],
  "paths": {},
  "components": {},
  "tags": []
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

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

With no annotations, the description carries the full burden. It includes a response example and structure, clearly indicating it's a read-only operation. No destructive behavior is suggested.

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

Conciseness5/5

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

The description is short, front-loaded with purpose, and includes a structured response example. Every part adds value without redundancy.

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

Completeness5/5

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

Given no parameters and an output schema, the description provides a full response example and explains the return type. Complete for a spec retrieval tool.

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

Parameters4/5

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

Input schema has zero parameters, so baseline is 4. Description does not need to add parameter info.

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

Purpose5/5

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

The description clearly states it returns the public OpenAPI specification for the Token API, which is a specific verb and resource. It distinguishes from sibling tools that are data endpoints.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance is provided. However, the purpose is self-explanatory and siblings are data-focused, so usage is implied.

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

getSkillsMarkdownAInspect

Returns the public Markdown reference for AI agents integrating with Token API.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: text/markdown; charset=UTF-8

    • Example:

"---\nname: Token API\ndescription: Real-time token, balance, transfer, holder, DEX, NFT, Polymarket, and Hyperliquid data across EVM, SVM, and TVM networks.\n---\n\n# Token API\n\n> Quick reference for AI agents using Token API. The authoritative machine-readable contract is `GET /openapi`.\n\n..."
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

No annotations are provided. The description discloses that the tool returns Markdown content with a 200 response example, which is transparent for a read-only, no-parameter operation. It does not mention side effects or auth needs, but the simplicity of the tool reduces the need.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, and includes relevant response details in a structured manner. Every sentence adds value.

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

Completeness5/5

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

Given no parameters and the existence of an output schema, the description is complete for understanding the tool's behavior. It provides the purpose, response format, and an example.

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

Parameters4/5

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

No parameters exist in the input schema (100% coverage). According to guidelines, baseline is 4 for zero parameters. The description does not add parameter details, which is appropriate.

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

Purpose5/5

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

The description clearly states it returns the public Markdown reference for AI agents integrating with Token API, which distinguishes it from sibling tools like getOpenapiSpec (returns OpenAPI spec) and getLlmsText (likely LLMs text).

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

Usage Guidelines3/5

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

The description implies usage for retrieving the Markdown reference, but does not explicitly state when to use this tool versus siblings or provide any exclusions. The context is clear but guidance is minimal.

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

getV1EvmBalancesCInspect

Returns ERC-20 token balances for a wallet address.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • address (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • include_null_balances: Include zero/null balances in results

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "value": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
include_null_balancesNoInclude zero/null balances in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations provided, so description carries full burden. Includes valuable pagination signaling ('Empty data array signifies end of results') and plan restriction notices. However, lacks auth requirements, rate limits, or data freshness details despite documenting extensive response schemas.

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

Conciseness2/5

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

Extremely verbose with massive redundancy. Includes full JSON example blocks for 6 HTTP status codes despite structured output schema existing. While front-loaded with purpose statement, the bulk is wasteful duplication of structured data, making it inefficient for agent consumption.

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

Completeness3/5

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

Documents all parameters and response fields comprehensively, but fails to address critical context: sibling differentiation among the 4+ balance-related tools. Given the tool family complexity (EVM vs SVM, Current vs Historical, Native vs ERC-20), the description should explain positioning but instead focuses on redundant field documentation.

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

Parameters3/5

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

Schema description coverage is 100%, so structured fields already document parameters fully. The description text largely duplicates schema content (e.g., 'Page number to fetch') without adding syntax details, format constraints, or usage examples beyond what the schema provides. Baseline 3 appropriate.

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

Purpose4/5

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

States 'Returns ERC-20 token balances for a wallet address' - specific verb (Returns), resource (ERC-20 token balances), and scope (wallet address). Distinguishes from 'Native' siblings by specifying ERC-20, but does not explicitly contrast with 'Historical' variants.

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

Usage Guidelines2/5

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

No guidance on when to use this vs alternatives. With siblings like getV1EvmBalancesHistorical and getV1EvmBalancesNative, the description should explicitly state this retrieves current/token balances vs historical data or native currency, but it does not.

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

getV1EvmBalancesHistoricalAInspect

Returns wallet ERC-20 token balance changes over time in OHLCV format.

OHLCV historical depth is subject to plan restrictions.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • address (Required): Filter by address

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • interval: The interval* for which to aggregate price data (hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "datetime": "string",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "low": 1.5,
      "high": 1.5,
      "open": 1.5,
      "decimals": 1.5,
      "name": "unknown_type",
      "network": "arbitrum-one",
      "symbol": "unknown_type",
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressYesFilter by address
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden. It successfully discloses plan restrictions ('OHLCV historical depth is subject to plan restrictions'), pagination behavior ('Empty `data` array signifies end of results'), and HTTP error scenarios (400, 401, 403, 404, 500) with example responses. However, it omits mention of caching, rate limits, or idempotency characteristics.

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

Conciseness2/5

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

While front-loaded with the purpose statement, the description is excessively verbose, replicating entire Query Parameters and Responses sections with extensive JSON examples. This duplicates structured fields (input schema and output schema) and consumes significant context window, violating the principle that every sentence should earn its place beyond structured data.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, no annotations), the description provides comprehensive coverage of parameters, response structure, pagination signals, and plan restrictions. It correctly identifies the ERC-20 scope, distinguishing from native token siblings. The only gap is explicit differentiation from pool OHLCV endpoints (getV1EvmPoolsOhlc).

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description adds value by specifying comma-separated formatting for the contract parameter and providing date string format examples for temporal parameters. However, it largely duplicates schema content rather than adding rich semantic context or validation constraints not captured in the schema.

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

Purpose5/5

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

The opening sentence clearly states the tool 'Returns wallet ERC-20 token balance changes over time in OHLCV format,' specifying the verb (Returns), resource (ERC-20 token balance changes), format (OHLCV), and temporal nature (over time). This implicitly distinguishes it from sibling tools like getV1EvmBalances (current balances) and getV1EvmBalancesHistoricalNative (native tokens).

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

Usage Guidelines3/5

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

The description implies historical analysis use cases through 'over time' and 'OHLCV,' and mentions 'plan restrictions' for certain parameters. However, it lacks explicit guidance on when to use this versus alternatives like getV1EvmPoolsOhlc or getV1EvmBalancesHistoricalNative, and does not state prerequisites or when-not-to-use conditions.

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

getV1EvmBalancesHistoricalNativeAInspect

Returns wallet Native balance changes over time in OHLCV format.

OHLCV historical depth is subject to plan restrictions.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • address (Required): Filter by address

  • interval: The interval* for which to aggregate price data (hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "datetime": "string",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "low": 1.5,
      "high": 1.5,
      "open": 1.5,
      "decimals": 1.5,
      "name": "unknown_type",
      "network": "arbitrum-one",
      "symbol": "unknown_type",
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressYesFilter by address
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden and discloses plan restrictions, pagination termination signals, and detailed HTTP error responses (400, 401, 403, etc.). It clarifies that results are aggregated OHLCV data rather than raw balance snapshots.

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

Conciseness2/5

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

Extremely verbose due to inclusion of full JSON response examples for six HTTP status codes, which dilutes the essential tool purpose. While structured with clear headers (Query Parameters, Responses), the massive JSON blocks do not earn their place in an MCP tool description meant for selection logic.

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

Completeness4/5

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

Comprehensive coverage of response structure, pagination behavior, and plan restrictions compensates for lack of annotations. The verbose response documentation, while inefficient, ensures completeness for a 7-parameter tool with complex output formatting.

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

Parameters3/5

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

Input schema has 100% description coverage, establishing baseline 3. The description duplicates parameter definitions from the schema (including examples and plan restriction notes) without adding significant new semantic 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.

Purpose4/5

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

Clearly states the tool returns 'wallet Native balance changes over time in OHLCV format,' specifying the unique output format (OHLCV) that distinguishes it from sibling historical balance tools. However, it lacks explicit comparison to alternatives like getV1EvmBalancesHistorical.

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

Usage Guidelines3/5

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

Notes that 'OHLCV historical depth is subject to plan restrictions' and documents pagination behavior ('Empty data array signifies end of results'), providing usage constraints. Missing explicit guidance on when to prefer this over getV1EvmBalancesHistorical.

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

getV1EvmBalancesNativeCInspect

Returns EVM native balances for wallet addresses.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • address (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "value": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations provided, so description carries full burden. It documents response structure including pagination fields and statistics, and notes the 'Plan restricted' limitation for array inputs. However, it omits rate limits, caching behavior, authentication requirements (despite listing 401/403 errors), and whether balances are real-time or cached.

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

Conciseness2/5

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

Extremely verbose due to inclusion of complete HTTP status code documentation (200, 400, 401, 403, 404, 500) with full JSON examples. While the first sentence is appropriately front-loaded, the subsequent content is boilerplate API documentation that an AI agent doesn't need for tool selection. Every sentence does not earn its place.

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

Completeness3/5

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

The description documents the complete output schema structure including pagination and statistics objects, satisfying the output richness requirement. However, given the complexity of blockchain data querying, it lacks operational context about network availability, plan restrictions comprehensibility, and the distinction between native and token balances that would be necessary for robust agent operation.

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

Parameters3/5

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

Schema description coverage is 100%, establishing baseline 3. The description repeats schema definitions for 'network' and 'address' parameters without adding semantic depth (e.g., no explanation of Graph Network IDs beyond the URL, no examples of valid comma-separated addresses). The extensive response examples provide data context but don't enhance parameter understanding.

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

Purpose4/5

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

The first sentence clearly states the tool 'Returns EVM native balances for wallet addresses' with specific verb and resource. The term 'native' distinguishes from sibling getV1EvmBalances (likely ERC20), but fails to differentiate from getV1EvmBalancesHistoricalNative or clarify what 'native' means (ETH, MATIC, etc.).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this versus siblings like getV1EvmBalances (tokens) or getV1EvmBalancesHistoricalNative. Only implicit guidance is the 'Plan restricted' note for multiple addresses, which hints at usage limitations but lacks clear when/when-not instructions.

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

getV1EvmDexesCInspect

Returns all supported EVM DEXs.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "factory": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "protocol": "uniswap_v1",
      "uaw": 1.5,
      "transactions": 1.5,
      "last_activity": "string",
      "network": "arbitrum-one"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Without annotations, the description carries the full disclosure burden. It provides some useful behavioral context: 'Plan restricted' note on the limit parameter and pagination behavior ('Empty data array signifies end of results'). However, it lacks details on authentication requirements, rate limits, or what the DEX data fields (factory, uaw, etc.) actually represent.

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

Conciseness2/5

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

Severely bloated with ~100 lines of JSON examples for standard HTTP error codes (400, 401, 403, 404, 500) that belong in the output schema, not the description. The signal-to-noise ratio is extremely low; an agent must wade through extensive boilerplate to find the single sentence of actual purpose description.

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

Completeness3/5

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

While the description is voluminous, it redundantly documents response structures that already exist in the output schema (per context signals), while under-documenting crucial context like sibling differentiation (EVM vs SVM/TVM) and data semantics. It meets basic completeness for a 3-parameter tool but wastes space on the wrong details.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description text duplicates the schema descriptions verbatim ('The Graph Network ID...', 'Number of items*...') without adding syntax clarification, example values beyond the schema's 'example' field, or semantic context about how parameters interact.

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

Purpose3/5

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

The first sentence 'Returns all supported EVM DEXs' is clear with a specific verb and resource, but the description fails to distinguish from sibling tools like getV1SvmDexes (Solana) and getV1TvmDexes (Tron). An agent cannot determine from this description which chain type (EVM vs SVM vs TVM) requires this specific tool.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description does not mention that this is specifically for EVM chains versus other chain types available in the sibling tools, nor does it explain prerequisites like authentication despite listing 401/403 error codes.

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

getV1EvmHoldersAInspect

Returns top token holders ranked by ERC-20 balance.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract address

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "value": 1.5,
      "is_contract": true,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractYesFilter by contract address

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

Without annotations, the description carries the burden well: it discloses 'Plan restricted' rate limiting on the limit parameter, explains pagination termination signals, and documents authentication requirements (401/403 errors) and other failure modes. It does not, however, explicitly confirm idempotency or safety.

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

Conciseness2/5

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

While well-structured with clear headings, the description is excessively verbose due to massive JSON response examples that duplicate the existing output schema (context signals confirm has_output_schema: true). These examples waste tokens without adding value for an AI agent.

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

Completeness4/5

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

Comprehensive coverage of parameters (100% schema coverage), clear resource identification (ERC-20 holders), and documented error cases. The inclusion of response examples is redundant given the output schema, but the tool definition is functionally complete.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description adds minimal semantic value beyond the schema—primarily organizing parameters into a readable list and noting the plan restriction constraint, but not explaining formats or relationships beyond the schema's existing descriptions.

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

Purpose5/5

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

The opening sentence 'Returns top token holders ranked by ERC-20 balance' provides a specific verb (Returns), resource (token holders), and scope (ERC-20 balance), clearly distinguishing it from sibling getV1EvmHoldersNative (likely for native tokens) and getV1SvmHolders (Solana VM).

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

Usage Guidelines3/5

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

The description implies usage by specifying 'ERC-20' (distinguishing from native holders) and documents pagination behavior ('Empty data array signifies end of results'), but lacks explicit guidance on when to choose this over siblings like getV1EvmHoldersNative or getV1EvmBalances.

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

getV1EvmHoldersNativeCInspect

Returns top token holders ranked by Native balance.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "value": 1.5,
      "is_contract": true,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It usefully notes that 'Empty `data` array signifies end of results' and mentions plan restrictions. However, it lacks explanation of sorting criteria ('top' is undefined), data freshness, rate limits, or the distinction between native and token balances that would help an agent predict behavior.

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

Conciseness2/5

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

Extremely bloated due to including full JSON response examples for every HTTP status code (200, 400, 401, 403, 404, 500). Since an output schema exists, these lengthy examples represent noise rather than signal. The actual purpose statement is front-loaded, but the overall description is not appropriately sized for an AI context.

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

Completeness3/5

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

Technically comprehensive regarding execution (parameters, response structure, error codes), but misses crucial conceptual context. Given the existence of output schema, the extensive response examples are redundant. Missing: differentiation from getV1EvmHolders, definition of 'Native' balances, and ranking methodology.

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

Parameters3/5

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

Schema description coverage is 100%, establishing baseline 3. The description text duplicates the schema descriptions verbatim in a 'Query Parameters' section without adding semantic value, syntax clarification, or cross-parameter relationships. No additional meaning is provided beyond the structured schema.

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

Purpose4/5

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

The opening sentence clearly states the tool 'Returns top token holders ranked by Native balance' with a specific verb and resource. However, it fails to explain what 'Native' means (blockchain native currency vs. ERC-20 tokens) or distinguish this from sibling tool getV1EvmHolders, which is critical given the similar naming.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus getV1EvmHolders or other balance-related siblings. The only contextual hint is 'Plan restricted' under the limit parameter, but there are no explicit prerequisites, workflows, or decision criteria provided.

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

getV1EvmNftCollectionsBInspect

Returns NFT collection metadata, supply stats, owner count, and transfer history.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract address

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "contract_creation": "string",
      "contract_creator": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "total_unique_supply": 1.5,
      "total_supply": 1.5,
      "total_transfers": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "owners": 1.5,
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractYesFilter by contract address

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden and delivers substantial behavioral context: it documents pagination termination ('Empty `data` array signifies end of results'), rate limiting hints ('Plan restricted'), and comprehensive HTTP error codes (400, 401, 403, 404, 500) with response structures. It omits explicit read-only declaration though 'Returns' implies it.

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

Conciseness2/5

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

The description is severely bloated, containing full JSON examples for 6 different HTTP response codes despite the presence of a structured output schema (per context signals). While the parameter section is well-structured, the extensive response examples violate 'every sentence earns its place'—this is API documentation bloat, not concise MCP tool guidance.

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

Completeness4/5

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

Given the 4 parameters with 100% schema coverage and existing output schema, the description is functionally complete. It covers all input parameters with examples, explains pagination behavior, and documents error cases. The only gap is the lack of sibling differentiation, but the operational context is thoroughly covered.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description adds value by noting the plan restriction on limit and explaining the pagination termination signal ('Empty `data` array'), which adds semantic meaning beyond the schema's type definitions. It also provides the networks URL reference.

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

Purpose4/5

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

The opening sentence clearly states it 'Returns NFT collection metadata, supply stats, owner count, and transfer history'—specific verb and resource. It distinguishes from siblings like getV1EvmNftItems (individual tokens) and getV1EvmNftTransfers (transaction history) by focusing on collection-level aggregate data, though it could explicitly emphasize 'collection-level overview' to prevent confusion with the transfer-specific sibling.

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

Usage Guidelines2/5

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

The description extensively documents WHAT the tool returns but provides no guidance on WHEN to use it versus siblings like getV1EvmNftHolders or getV1EvmNftTransfers. No mention of prerequisites, typical use cases, or selection criteria among the 5 NFT-related tools available.

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

getV1EvmNftHoldersBInspect

Returns wallet addresses holding NFT collection tokens with quantity and percentage distribution.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract address

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "token_standard": "ERC721",
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "quantity": 1.5,
      "network": "arbitrum-one",
      "unique_tokens": 1.5,
      "percentage": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractYesFilter by contract address

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the response structure through extensive JSON examples and mentions the 'Plan restricted' limitation on the limit parameter. However, it lacks operational details like rate limits, caching behavior, or authentication requirements—information that would be crucial given the complex nested response structure.

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

Conciseness2/5

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

The description is excessively verbose due to embedding complete HTTP response example blocks for six different status codes (200, 400, 401, 403, 404, 500). While front-loaded with the purpose statement, the sheer volume of redundant JSON examples makes it difficult to quickly scan and violates conciseness principles for an MCP tool definition.

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

Completeness4/5

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

Despite the verbosity, the description is comprehensive. It covers all input parameters (4/4 with 100% coverage), provides detailed response schema documentation through examples, and explains pagination behavior. Given the complexity of the nested return object (data, statistics, pagination), the extensive response documentation ensures the agent understands the output structure.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description's parameter section largely mirrors the schema descriptions verbatim (e.g., 'The Graph Network ID for EVM networks') without adding additional semantic context, validation rules, or format guidance beyond what the structured schema already provides.

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

Purpose4/5

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

The description opens with a specific verb ('Returns') and clearly identifies the resource (wallet addresses holding NFT collection tokens) along with what data is returned (quantity and percentage distribution). It implicitly distinguishes from siblings like getV1EvmHolders (fungible tokens) by specifying 'NFT collection tokens', though it could explicitly clarify the distinction from getV1EvmNftOwnerships.

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

Usage Guidelines2/5

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

The description provides no guidance on when to select this tool versus siblings like getV1EvmNftOwnerships or getV1EvmHolders. While it includes pagination hints ('Empty data array signifies end of results'), it lacks explicit when-to-use/when-not-to-use recommendations or mentions of prerequisites like authentication requirements.

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

getV1EvmNftItemsBInspect

Returns NFT token metadata, attributes, current owner, and media URIs.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract address

  • token_id: Token IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "token_id": "5712",
      "network": "arbitrum-one",
      "name": "unknown_type",
      "description": "unknown_type",
      "token_standard": "ERC721",
      "uri": "unknown_type",
      "image": "unknown_type",
      "attributes": [
        {
          "trait_type": "string",
          "value": "string",
          "display_type": "string"
        }
      ]
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractYesFilter by contract address
token_idNoToken ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full disclosure burden. It successfully documents pagination behavior ('Empty `data` array signifies end of results') and tier restrictions ('Plan restricted'), but fails to explicitly declare that this is a read-only operation or detail authentication requirements despite listing 401/403 error codes.

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

Conciseness3/5

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

The description is well-structured with clear headers and front-loaded purpose, but suffers from excessive verbosity. It duplicates parameter documentation already present in the schema and includes extensive JSON response examples that mirror the structured output schema, reducing information density.

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

Completeness4/5

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

Given the presence of a complete output schema, the description comprehensively covers query parameters, pagination logic, and error responses (400-500). However, given the absence of annotations, it should explicitly state behavioral traits like read-only status rather than relying solely on error code documentation.

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

Parameters3/5

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

Schema description coverage is 100%, with complete documentation for all 5 parameters including enums, examples, and constraints. The description largely mirrors this information without adding significant semantic value beyond repetition, warranting the baseline score of 3.

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

Purpose5/5

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

The opening sentence explicitly states the tool 'Returns NFT token metadata, attributes, current owner, and media URIs'—a specific verb plus detailed resource scope. This clearly distinguishes it from siblings like getV1EvmNftCollections (aggregate data) or getV1EvmNftTransfers (event logs) by focusing on individual token-level metadata retrieval.

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

Usage Guidelines2/5

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

The description thoroughly documents parameters and responses but provides no guidance on when to use this tool versus closely related siblings like getV1EvmNftOwnerships or getV1EvmNftHolders. There are no prerequisites, filtering recommendations, or explicit exclusions mentioned.

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

getV1EvmNftOwnershipsCInspect

Returns NFT tokens owned by a wallet address with metadata and ownership information.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • address (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_id: Token IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_standard: Token standard

  • include_null_balances: Include zero/null balances in results

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "token_id": "5712",
      "network": "arbitrum-one",
      "name": "unknown_type",
      "token_standard": "ERC721",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
token_idNoToken ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
token_standardNoToken standard
include_null_balancesNoInclude zero/null balances in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Without annotations, the description carries the burden of disclosure. It successfully notes 'Plan restricted' limitations on certain parameters and explains pagination termination ('Empty data array signifies end of results'). However, it fails to explicitly state whether the operation is read-only, safe, or idempotent, though 'Returns' implies a read operation.

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

Conciseness2/5

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

The description is excessively verbose due to including complete HTTP response documentation (JSON examples for 200, 400, 401, etc.) which belongs in the output schema field rather than the description. While structured with headers, the content is largely boilerplate API documentation not optimized for an AI agent's selection task.

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

Completeness3/5

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

Despite the verbosity, the description is technically complete regarding parameter functionality and pagination behavior. However, given the existence of an output schema, the extensive response documentation is redundant, and the description misses critical context for distinguishing this tool from its many NFT-related siblings (getV1EvmNftHolders, getV1EvmNftItems, etc.).

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description provides extensive parameter documentation including examples and array syntax explanations, but this largely duplicates the structured schema rather than adding semantic meaning beyond it.

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

Purpose4/5

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

The description clearly states the tool 'Returns NFT tokens owned by a wallet address with metadata and ownership information,' providing a specific verb and resource. However, it lacks explicit differentiation from sibling tools like getV1EvmNftHolders or getV1EvmNftItems, which may also relate to NFT ownership data.

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

Usage Guidelines2/5

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 such as getV1EvmNftHolders (likely the inverse lookup) or getV1EvmNftItems. There are no prerequisites, exclusion criteria, or workflow recommendations mentioned.

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

getV1EvmNftSalesAInspect

Returns NFT marketplace sales with price, buyer, seller, and transaction data.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_id: Token IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "sale_amount": 1.5,
      "sale_currency": "string",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "token_id": "5712",
      "recipient": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "offerer": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "network": "arbitrum-one",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
token_idNoToken ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

Provides substantial behavioral context despite no annotations: notes 'Plan restricted' limitations on multiple parameters (indicating tier/rate limits), documents pagination behavior ('Empty `data` array signifies end of results'), and catalogs error responses (400, 401, 403, 404, 500). Could improve by explicitly stating read-only nature and authentication requirements.

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

Conciseness2/5

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

Severely oversized due to extensive duplication of structured data. The description includes complete query parameter tables and response schemas that mirror the input schema and output schema (which exists per context signals). The critical information (first sentence) is buried under verbose API documentation that an agent must parse.

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

Completeness3/5

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

Over-compensates on response documentation (unnecessary given output schema exists) while under-explaining domain concepts. Fails to clarify what constitutes a 'sale' versus a generic transfer, which is critical given sibling tool getV1EvmNftTransfers exists. Parameter coverage is complete due to 100% schema coverage.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description largely mirrors schema content without adding significant semantic value beyond what's in the structured parameters. Date format examples (e.g., '2025-01-01T00:00:00Z') provide useful clarifications but are also present in schema descriptions.

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

Purpose5/5

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

The opening sentence 'Returns NFT marketplace sales with price, buyer, seller, and transaction data' provides specific verb (Returns), resource (NFT marketplace sales), and distinguishing scope (sales-specific data vs transfers/holdings). It clearly differentiates from sibling tools like getV1EvmNftTransfers by emphasizing marketplace sales with pricing info.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives are named, but the description implies usage through the sales-specific framing. Lacks guidance on when to prefer this over getV1EvmNftTransfers (which may include non-sale transfers) or getV1EvmNftOwnerships. Agents must infer applicability from the name and first sentence alone.

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

getV1EvmNftTransfersCInspect

Returns NFT transfer events including mints, burns, and ownership changes.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • type: Transfer category

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_id: Token IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "@type": "BURN",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "token_id": "5712",
      "name": "unknown_type",
      "transfer_type": "string",
      "token_standard": "ERC721",
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "network": "arbitrum-one",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
typeNoTransfer category
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
token_idNoToken ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Without annotations, the description carries the full burden. It successfully documents pagination behavior ('Empty `data` array signifies end of results') and plan restrictions on certain parameters. However, it lacks explicit statements about safety (read-only implied but not stated), rate limits, or authentication requirements despite listing 401/403 error codes.

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

Conciseness2/5

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

The description is severely bloated, containing full JSON response examples and HTTP status code documentation that likely duplicates the output schema. This obscures the actual purpose statement and forces agents to parse through hundreds of lines of structured data to find semantic meaning.

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

Completeness3/5

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

Given 14 parameters and complex filtering capabilities, the description documents individual parameters adequately. However, it lacks sibling differentiation critical for the NFT tool cluster (transfers vs sales vs ownerships) and buries the pagination semantics within parameter lists rather than highlighting them as key behavioral constraints.

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

Parameters3/5

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

Input schema has 100% description coverage, establishing a baseline of 3. The description largely repeats parameter documentation already present in the schema (type, network descriptions) without adding usage guidance (e.g., no explanation of how start_block and end_block interact with time filters, or when to use address vs from_address/to_address).

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

Purpose4/5

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

The opening sentence clearly states it 'Returns NFT transfer events including mints, burns, and ownership changes,' providing specific verb and resource identification. However, it fails to distinguish from close siblings like getV1EvmNftSales or getV1EvmTransfers (fungible), leaving agents to guess which NFT-related tool is appropriate.

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

Usage Guidelines2/5

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 like getV1EvmNftSales (for marketplace sales) or getV1EvmNftHolders (for current ownership). The description consists entirely of API reference documentation (parameters and response codes) without selection criteria or use-case examples.

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

getV1EvmPoolsAInspect

Returns DEX pool metadata including tokens, fees and protocol.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • factory: Filter by factory addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • pool: Filter by pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • input_token: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • output_token: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "pool": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "factory": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
      "protocol": "uniswap_v1",
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "network": "arbitrum-one"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolNoFilter by pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
factoryNoFilter by factory address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
protocolNoProtocol name
input_tokenNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
output_tokenNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations provided, but description carries substantial weight: documents pagination behavior ('Empty data array signifies end of results'), plan restrictions on certain parameters, and comprehensive HTTP error codes (400-500) with response schemas. Missing only explicit read-only/safety statements.

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

Conciseness3/5

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

Well-structured with clear headers, but excessively verbose due to extensive JSON examples for every HTTP error code (400-500). These examples don't aid invocation decisions; could be condensed to status code descriptions without full JSON payloads.

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

Completeness4/5

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

Comprehensive for an 8-parameter filtering endpoint: covers all query options, explains array value formatting, documents pagination logic, and includes response structure examples. Suitable complexity coverage despite missing explicit rate limit numbers.

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

Parameters4/5

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

Schema has 100% coverage (baseline 3), but description adds crucial invocation context: comma-separated array syntax, plan restriction warnings (*Plan restricted), external reference URL for network enums, and pagination end conditions. Elevates beyond raw schema.

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

Purpose5/5

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

Excellent specificity: states it 'Returns DEX pool metadata' with specific fields (tokens, fees, protocol), distinguishing it from sibling getV1EvmPoolsOhlc (likely price history) by content type, and from getV1SvmPools via the 'EVM networks' reference in the network parameter description.

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

Usage Guidelines3/5

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

Provides implied usage through specificity ('metadata' vs other data types), but lacks explicit guidance on when to choose this over getV1EvmPoolsOhlc or getV1EvmDexes. No prerequisites or exclusions stated.

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

getV1EvmPoolsOhlcAInspect

Returns OHLCV price data for liquidity pools.

OHLCV historical depth is subject to plan restrictions.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • pool (Required): Filter by pool address

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "datetime": "string",
      "ticker": "string",
      "pool": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "transactions": 1.5,
      "low": 1.5,
      "high": 1.5,
      "volume": 1.5,
      "open": 1.5,
      "network": "arbitrum-one",
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolYesFilter by pool address
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses plan restrictions, pagination behavior ('Empty data array signifies end of results'), and provides extensive response examples including error codes (400, 401, 403, etc.), though it omits explicit rate limit or authentication requirement descriptions.

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

Conciseness4/5

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

Well-structured with clear markdown sections (Query Parameters, Responses). The upfront summary is concise, though the response examples are lengthy. Information is logically ordered with purpose first, parameters second, and responses third.

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

Completeness4/5

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

Given the rich input schema (100% coverage), output schema examples provided in the description, and 7 parameters, the description is substantially complete. It covers plan restrictions, pagination logic, and response structure, though minor gaps remain regarding authentication requirements and rate limiting.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description accurately lists all 7 parameters with identical descriptions to the schema, but adds no additional semantic context, syntax clarification, or usage examples beyond the schema definitions.

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

Purpose5/5

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

The description clearly states the specific action ('Returns') and resource ('OHLCV price data for liquidity pools'), distinguishing it from siblings like getV1EvmPools (likely current state) and cross-chain variants (getV1SvmPoolsOhlc) by specifying the financial data type.

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

Usage Guidelines3/5

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

Mentions 'OHLCV historical depth is subject to plan restrictions' indicating usage constraints, but lacks explicit guidance on when to use this versus getV1EvmPools or other data endpoints, and doesn't clarify the historical vs. current data distinction.

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

getV1EvmSwapsAInspect

Returns DEX swaps events with input & output token amounts.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • factory: Filter by factory addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • pool: Filter by pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • caller: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • transaction_from: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • sender: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • recipient: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • input_contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • output_contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "transaction_index": 1.5,
      "transaction_from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "pool": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "output_amount": "string",
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "input_value": 1.5,
      "factory": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
      "log_topic0": "string",
      "price": 1.5,
      "transaction_id": "string",
      "log_ordinal": 1.5,
      "caller": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "input_amount": "string",
      "summary": "string",
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "call_index": "unknown_type",
      "price_inv": 1.5,
      "log_index": 1.5,
      "network": "arbitrum-one",
      "output_value": 1.5,
      "recipient": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "user": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "sender": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "protocol": "uniswap_v1",
      "log_block_index": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolNoFilter by pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
callerNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
senderNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
factoryNoFilter by factory address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
protocolNoProtocol name
end_blockNoFilter by block number
recipientNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
start_blockNoFilter by block number
input_contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
output_contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_fromNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

Without annotations, the description carries the full burden. It successfully discloses pagination behavior ('Empty `data` array signifies end of results') and plan restrictions ('*Plan restricted' on multiple parameters). However, it doesn't explicitly state that this is a read-only operation, though implied by 'Returns'.

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

Conciseness3/5

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

The description is well-structured with clear Query Parameters and Responses sections, but severely bloated by duplicating the input schema and including massive JSON response examples despite the presence of an output schema. Every section contains information, but the redundancy with structured fields wastes tokens.

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

Completeness4/5

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

Given the complexity (18 parameters) and rich output schema, the description covers all necessary aspects: parameter purposes (via duplication), response structure with examples, error codes, and pagination logic. It adequately supports agent invocation despite inefficiencies, though it could omit redundant JSON examples since an output schema exists.

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

Parameters3/5

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

With 100% schema description coverage including examples and enums, the schema already fully documents parameters. The description duplicates this information (including HTML formatting and 'Plan restricted' notes) but adds minimal semantic value beyond the structured schema, meeting the baseline for high-coverage schemas.

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

Purpose5/5

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

The opening sentence 'Returns DEX swaps events with input & output token amounts' provides a specific verb (Returns), resource (DEX swaps events), and scope. The EVM-specific nature distinguishes it clearly from siblings like getV1SvmSwaps and getV1TvmSwaps, while 'swaps' distinguishes from getV1EvmPools or getV1EvmTransfers.

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

Usage Guidelines3/5

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

The description defines what the tool returns (DEX swaps), providing implied usage context. However, it lacks explicit guidance on when to use this versus getV1EvmTransfers (for general transfers) or getV1SvmSwaps (for Solana), and doesn't state prerequisites like authentication requirements despite listing 401/403 responses.

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

getV1EvmTokensCInspect

Returns ERC-20 token metadata including supply and holder count.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "total_supply": 1.5,
      "total_transfers": 1.5,
      "circulating_supply": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type",
      "holders": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractYesFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the 'Plan restricted' constraint for multiple contract addresses and documents the response structure. However, it omits auth requirements, rate limits, caching behavior, and whether the operation is idempotent or safe (though 'Returns' implies read-only).

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

Conciseness2/5

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

While the first sentence is efficient, the description is extremely bloated with extensive HTTP status code documentation (400, 401, 403, 404, 500) and full JSON response examples that replicate what should be in the structured output schema. This content is not useful for an MCP tool selector and buries the actual tool purpose.

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

Completeness3/5

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

Despite having a structured output schema available, the description redundantly documents response formats extensively but fails to address the relationship between this tool and its many siblings (e.g., EVM vs SVM variants, Token vs Holder queries). For a 2-parameter tool, it is complete on data formats but incomplete on usage context.

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

Parameters3/5

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

Schema description coverage is 100% for the 2 parameters, establishing a baseline of 3. The description text largely repeats the schema definitions for 'network' and 'contract' (including the comma-separated format), adding no additional semantic context about parameter interactions or data formats beyond what's already in the schema.

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

Purpose4/5

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

The first sentence clearly states the tool 'Returns ERC-20 token metadata including supply and holder count,' specifying the verb (Returns), resource (ERC-20 tokens), and specific data points. It implicitly distinguishes from sibling getV1EvmTokensNative by specifying 'ERC-20' (vs native), but lacks explicit differentiation guidance from other related tools like getV1EvmHolders.

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

Usage Guidelines2/5

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

The description documents the 'network' and 'contract' parameters and notes '*Plan restricted' for array values, but provides no explicit guidance on when to use this tool versus siblings (e.g., getV1EvmTokensNative for native tokens, getV1EvmHolders for holder-specific queries) or preconditions for usage.

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

getV1EvmTokensNativeCInspect

Returns Native metadata including supply and holder count.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "total_supply": 1.5,
      "circulating_supply": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type",
      "holders": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It documents HTTP error cases (400, 401, 403, 404, 500) and response structure via embedded JSON examples. However, it fails to explain what 'Native' specifically means (native currency vs. other tokens) or describe pagination behavior evident in the example response.

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

Conciseness2/5

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

While front-loaded with the core purpose, the description is severely bloated by extensive OpenAPI-style response documentation (JSON examples for 200, 400, 401, etc.) that duplicates what should be in the structured output schema. This verbosity reduces readability for an LLM agent.

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

Completeness3/5

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

The description documents parameters, success responses, and error codes, but wastefully duplicates structured output schema data. Given the simple single-parameter input, it is technically complete but lacks critical domain context—specifically clarifying that 'Native' refers to the chain's gas token and how this differs from generic token endpoints.

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

Parameters3/5

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

The input schema has 100% description coverage for its single 'network' parameter. The description repeats this information in a 'Query Parameters' section without adding additional semantic context (e.g., explaining the Graph Network ID format or providing usage examples), meeting the baseline for high-coverage schemas.

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

Purpose4/5

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

The first sentence clearly states the action ('Returns') and specific resource ('Native metadata') along with key data fields ('supply and holder count'). However, it assumes domain knowledge that 'Native' refers to the blockchain's native currency (vs ERC-20 tokens) and does not explicitly distinguish this from the sibling 'getV1EvmTokens' tool.

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

Usage Guidelines2/5

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 like 'getV1EvmTokens' (likely for ERC-20 tokens) or other sibling tools. There are no prerequisites, filtering tips, or error-handling instructions beyond the raw HTTP status codes.

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

getV1EvmTransfersBInspect

Returns ERC-20 transfers with transaction and block data.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "value": 1.5,
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "network": "arbitrum-one",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Without annotations, the description must carry the full behavioral burden. It adds valuable context like 'Plan restricted' notes on certain parameters and explains pagination termination ('Empty `data` array signifies end of results'). However, it fails to explicitly state this is a read-only operation, doesn't mention rate limits, and doesn't indicate data freshness or latency.

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

Conciseness2/5

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

The description is extremely verbose with excessive repetition. It includes full JSON examples for five different error codes (400, 401, 403, 404, 500) that are nearly identical, consuming significant context window without adding distinct value. While it uses headers like 'Query Parameters' and 'Responses', the sheer length and redundancy make it difficult to scan efficiently.

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

Completeness4/5

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

Given the tool's complexity (11 parameters, rich output structure), the description is comprehensive. It documents all possible response codes with examples and explains the pagination mechanism. While the output schema exists, the inclusion of response examples provides helpful concrete context, though it borders on excessive.

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

Parameters3/5

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

With 100% schema description coverage, the baseline score is 3. The description largely duplicates parameter information already present in the schema (e.g., descriptions for network, contract, and date filters). It does not add semantic meaning, syntax clarification, or usage examples beyond what the schema already provides.

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

Purpose4/5

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

The description opens with a clear, specific statement: 'Returns ERC-20 transfers with transaction and block data.' This identifies the resource (ERC-20 transfers), the operation (returns), and the included data scope. It implicitly distinguishes the tool from siblings like getV1EvmTransfersNative (native currency) and getV1EvmNftTransfers (NFTs) by specifying 'ERC-20', though it doesn't explicitly compare against these alternatives.

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

Usage Guidelines2/5

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

The description provides extensive parameter documentation but offers no guidance on when to use this tool versus its siblings (e.g., when to use getV1EvmTransfers vs getV1EvmTransfersNative or getV1SvmTransfers). There are no 'when to use' or 'when not to use' clauses, nor does it mention prerequisites like authentication requirements despite listing 401/403 error codes.

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

getV1EvmTransfersNativeCInspect

Returns Native transfers with transaction and block data.

Query Parameters:

  • network (Required): The Graph Network ID for EVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "value": 1.5,
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "network": "arbitrum-one",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for EVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations provided, so description carries full burden. It documents HTTP error codes (400, 401, 403, 404, 500) and mentions 'Plan restricted' constraints on certain parameters, hinting at rate limiting. However, it lacks explicit statements about read-only safety, idempotency, or specific rate limit behaviors.

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

Conciseness2/5

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

Extremely verbose with massive duplication of structured data. Includes exhaustive response examples (JSON for 200, 400, 401, etc.) despite the existence of an output schema. Every parameter is re-documented in narrative form when the input schema is fully descriptive. Not front-loaded; the actual purpose is one sentence followed by pages of API documentation.

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

Completeness3/5

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

Covers the basic operational scope and includes comprehensive response documentation, but redundantly explains return values despite the presence of an output schema. Missing critical contextual distinctions between EVM native transfers versus ERC20 transfers (sibling tool) and EVM versus TVM/SVM variants available on the server.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description largely duplicates schema content (parameter names, types, and descriptions) but adds minimal semantic value beyond what the schema already provides. The formatting clarifies array value separation with commas, though this is also present in schema descriptions.

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

Purpose4/5

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

States clearly that it returns 'Native transfers with transaction and block data,' specifying the resource (native transfers) and action (returns). However, it fails to distinguish from sibling tool 'getV1EvmTransfers' (likely for ERC20 tokens), which is a significant gap given the tool naming convention.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus alternatives like 'getV1EvmTransfers' (non-native) or the TVM/SVM variants. The description immediately dives into parameter specifications without contextual usage scenarios.

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

getV1HealthBInspect

Verifies that all database connections are established.

Responses:

  • 200 (Success): All database connections are healthy

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "string"
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
  • 503: One or more database connections failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "string",
  "error": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
Behavior3/5

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

Without annotations, the description carries the full burden. The embedded HTTP response documentation reveals behavioral traits (503=DB down, 500=bad DB response, auth failures possible), but lacks explicit safety profile (read-only?) or rate limit guidance. Acceptable but could be clearer.

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

Conciseness2/5

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

Severely bloated with extensive JSON response documentation that obscures the single sentence of actual description. Poor structure—the response schemas should be in the output_schema field, not the description text.

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

Completeness3/5

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

While response codes are documented (200, 503, etc.), the narrative lacks operational context given no annotations exist. The output schema exists per context signals, so return value explanation is technically redundant but present in messy format. Adequate but not elegant.

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

Parameters4/5

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

Input schema contains zero parameters. Per scoring rules, 0 params equals baseline 4. The description correctly implies no configuration is needed to perform this health check.

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

Purpose4/5

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

The first sentence clearly states the tool verifies database connections are established, using specific verb+resource. It distinguishes well from siblings—all other tools retrieve blockchain data (balances, NFTs, transfers) while this is the sole operational health check.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus the many data-retrieval siblings. Missing critical context like 'Use before calling other endpoints to verify API readiness' or polling recommendations.

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

getV1HyperliquidDexesAInspect

Returns the list of perpetuals DEXs and spot, each with 24h activity stats (volume, trade count, unique users, asset count). Hyperliquid hosts a core perpetuals venue (dex=perps) alongside builder-deployed perpetuals DEXs that each list their own asset universe — xyz (commodities and macro indices), cash (tokenized equities), km, and others.

Use this endpoint to discover valid dex filter values for venue-scoped queries on /markets, /markets/activity, /markets/liquidations, /users, and /users/positions.

For platform-wide totals across all DEXs over arbitrary intervals, use /v1/hyperliquid/platform.

Public — no auth required.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "dex": "perps",
      "assets": 1,
      "volume_24h": 1.5,
      "trades_24h": 1,
      "unique_users_24h": 1
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

The description states the endpoint is public and requires no auth. It includes response examples with status codes and properties, providing transparency about the data returned. However, it does not explicitly mention rate limits, caching behavior, or that the operation is read-only, though those are implied by the GET method and the 'Public — no auth required' note.

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

Conciseness4/5

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

The description is well-structured, starting with the main functionality, followed by usage guidance, authentication info, and response examples. While it is somewhat lengthy due to the detailed example responses, the length is justified given the complexity of the response and the need to explain the return format. It is concise relative to the information conveyed.

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

Completeness5/5

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

For a zero-parameter list endpoint with an output schema, the description provides comprehensive context: it explains what data is returned (list of DEXs with 24h stats), how to use it (discover dex filter values), and the response structure via examples. It covers all necessary information for an agent to use this tool correctly.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is 100%. The description adds context by explaining that the endpoint requires no parameters and returns a list of all DEXs with their stats. It also clarifies the structure of the response, which compensates for the absence of parameter details.

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

Purpose5/5

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

The description clearly states the tool returns a list of perpetual and spot DEXs with 24h activity stats. It differentiates from sibling tools like getV1HyperliquidPlatform by specifying this endpoint is for listing DEXs and discovering dex filter values for venue-scoped queries.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this endpoint (to list DEXs and get valid dex values) and when to use an alternative (for platform-wide totals over arbitrary intervals, use getV1HyperliquidPlatform). It also notes that no authentication is required.

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

getV1HyperliquidMarketsAInspect

Returns the latest snapshot per market: last trade price, 24h change versus the prior-day close, 24h volume (split by side), trade and unique-user counts, and the most recent open interest and funding rate observed at the last funding snapshot.

Filters compose additively — pass coin, dex, base_token, and/or quote_token to narrow the scope. A mismatched combination (e.g. coin=cash:TSLA&dex=xyz) returns empty. Omit all for a full listing sorted by 24h volume.

base_token and quote_token are spot-discovery filters: ?base_token=HYPE returns every spot pair where HYPE sits on the base side (HYPE/USDC, HYPE/USDT0, …). Use the coin from the result as the identifier on the rest of the /v1/hyperliquid/* endpoints.

Query Parameters:

  • coin: Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • base_token: Spot token symbol (e.g. HYPE, USDC). Use to discover all spot pairs with this token on a given side via /v1/hyperliquid/markets?base_token=... or ?quote_token=....Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • quote_token: Spot token symbol (e.g. HYPE, USDC). Use to discover all spot pairs with this token on a given side via /v1/hyperliquid/markets?base_token=... or ?quote_token=....Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "coin": "string",
      "market_name": "string",
      "dex": "string",
      "quote_token": "unknown_type",
      "open_interest": "unknown_type",
      "funding_snapshot_time": "unknown_type",
      "base_token": "unknown_type",
      "price": 1.5,
      "sell_volume_24h": 1.5,
      "trades_24h": 1,
      "funding_rate": "unknown_type",
      "price_24h": "unknown_type",
      "volume_24h": 1.5,
      "unique_users_24h": 1,
      "buy_volume_24h": 1.5,
      "price_24h_change": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinNoHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
base_tokenNoSpot token symbol (e.g. `HYPE`, `USDC`). Use to discover all spot pairs with this token on a given side via `/v1/hyperliquid/markets?base_token=...` or `?quote_token=...`.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
quote_tokenNoSpot token symbol (e.g. `HYPE`, `USDC`). Use to discover all spot pairs with this token on a given side via `/v1/hyperliquid/markets?base_token=...` or `?quote_token=...`.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

The description discloses the read-only nature (returns data) and filter behavior (additive, mismatched returns empty). It explains pagination via an empty data array. It does not mention any side effects, destructive actions, or authentication, but since it's a retrieval tool and annotations are absent, it is reasonably transparent. It could explicitly state that it is a read-only operation.

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

Conciseness3/5

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

The description is well-structured with sections for core description, query parameters, and responses. However, it is verbose, reproducing the entire response schema and examples, which are already provided by the output schema. This redundancy could be trimmed to improve conciseness. The front-loading of key information is good.

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

Completeness5/5

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

Given the tool's complexity (6 optional parameters, pagination, multiple response formats), the description is complete. It covers filtering behavior, parameter formats, pagination, error codes, and provides examples. The output schema exists, so the detailed response examples are helpful but not strictly necessary. Overall, the description equips the agent to use the tool correctly.

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

Parameters4/5

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

The schema coverage is 100%, so the description adds value beyond the schema by explaining the additive filtering behavior, the coin naming convention, and the use of base_token/quote_token for discovery. It also describes pagination and plan restrictions. The description enhances understanding beyond the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states that the tool returns the latest snapshot per market, listing specific metrics like last trade price, 24h change, volume, etc. It distinguishes from sibling endpoints like getV1HyperliquidMarketsActivity by focusing on a snapshot overview, not activity or liquidations. The verb 'Returns' combined with the resource 'latest snapshot per market' is specific and unambiguous.

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

Usage Guidelines4/5

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

The description explains that filters are additive and gives examples (e.g., mismatched combinations return empty). It states that omitting all filters returns a full listing sorted by 24h volume. It also clarifies the purpose of base_token and quote_token for spot discovery and suggests using the coin from the result as an identifier for other endpoints. However, it does not explicitly compare with sibling tools or state when not to use this tool, which would be helpful.

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

getV1HyperliquidMarketsActivityAInspect

Returns a chronological fill feed, filterable by coin, dex, and/or user. Each row is a single fill carrying price, size, side (BID or ASK), directional intent (OPEN_LONG, CLOSE_SHORT, LIQUIDATED_CROSS_LONG, AUTO_DELEVERAGING, and others), closed PnL, fees (negative values represent maker rebates), and order-level metadata (order_id, client_order_id, twap_id, crossed).

For balance-changing events on a user (deposits, withdrawals, funding payments, vault flows), use /v1/hyperliquid/users/activity.

At least one of coin, dex, or user is required. Filters compose additively — pass any combination to narrow further; a mismatched pair (e.g. coin=cash:TSLA&dex=xyz) returns empty.

Defaults to the last 24 hours when no time range is specified — provide start_time and end_time to query older data.

Query Parameters:

  • coin: Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1,
      "timestamp": "string",
      "transaction_hash": "string",
      "coin": "string",
      "twap_id": 1,
      "market_name": "string",
      "dex": "string",
      "start_position": "string",
      "price": 1.5,
      "transaction_id": 1,
      "direction": "string",
      "fee": 1.5,
      "order_id": 1,
      "size": 1.5,
      "side": "string",
      "fee_token": "string",
      "notional": 1.5,
      "crossed": true,
      "user": "string",
      "closed_pnl": 1.5,
      "client_order_id": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinNoHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool returns fills with fields like price, size, side, directional intent, closed PnL, fees, and order metadata. It also mentions defaults and pagination. However, it does not explicitly state read-only nature, but it's clear it's a fetch operation.

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

Conciseness4/5

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

The description is well-structured with a summary, parameter details, and response sections. It uses headings and bullet points. However, it is somewhat lengthy due to parameter descriptions being repeated in both the description and schema, but it remains clear and organized.

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

Completeness5/5

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

Given the complexity (7 parameters, output schema provided), the description is highly complete. It covers parameter details, response examples with field explanations, error codes, and even pagination. It provides all necessary context for an agent to use the tool correctly.

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

Parameters5/5

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

Schema coverage is 100%, but the description goes beyond by explaining how to format coin identifiers (e.g., @N, DEX prefix), DEX names, time formats, and that *Plan restricted applies. The parameter descriptions add substantial value and clarity.

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

Purpose5/5

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

The description clearly states it returns a chronological fill feed, filterable by coin, dex, and/or user. It distinguishes from sibling tools like getV1HyperliquidUsersActivity by specifying that the latter is for balance-changing events. The verb 'returns' and resource 'fill feed' are specific.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool vs alternatives: 'For balance-changing events on a user, use /v1/hyperliquid/users/activity'. Also explains that at least one of coin, dex, or user is required, defaults to last 24 hours, and how filters compose additively.

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

getV1HyperliquidMarketsLiquidationsAInspect

Returns one row per liquidation event, aggregated across the multiple fills that walk the book during a liquidation. Only the liquidated user's side is returned — counterparty fills are excluded.

Each row surfaces the coin, liquidated user, transaction hash, liquidation kind (CROSS_LONG, ISOLATED_SHORT, and others), total size and notional, size-weighted average fill price, the mark price at liquidation, and the liquidation method reported by the venue (backstop and others).

Filter by coin, dex, and/or liquidated_user — filters compose additively. Sort by notional (default — largest events first) or time (most recent first).

Query Parameters:

  • coin: Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • liquidated_user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • sort_by: No description.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1,
      "timestamp": "string",
      "event_hash": "string",
      "dex": "string",
      "liquidated_user": "string",
      "liquidation_kind": "string",
      "direction": "string",
      "total_fees": 1.5,
      "avg_fill_price": 1.5,
      "notional": 1.5,
      "coin": "string",
      "mark_price": 1.5,
      "liquidation_method": "string",
      "total_size": 1.5,
      "market_name": "string",
      "fills": 1
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinNoHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
sort_byNonotional
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
liquidated_userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations, the description carries full burden. It explains aggregation behavior, exclusion of counterparty fills, filtering composition, sorting defaults, and pagination. It does not mention rate limits or authentication, but the tool is read-only and the name suggests a GET endpoint. Overall, it is transparent enough for safe use.

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

Conciseness5/5

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

The description is well-structured: a concise summary paragraph, then a detailed parameter list with careful formatting. Every sentence adds value, no fluff. It is front-loaded with key information and scales appropriately.

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

Completeness5/5

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

Given the complexity (8 parameters, no required params, output schema provided), the description covers all necessary aspects: return format, filtering, sorting, pagination, and parameter semantics. It enables an agent to invoke the tool correctly without missing context.

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

Parameters4/5

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

Schema coverage is high (88%), so baseline is 3. The description adds significant value: for `sort_by` it explains defaults and ordering; for `coin`, `dex`, `liquidated_user` it provides examples and format details; for time parameters it specifies accepted formats. This goes beyond the schema, warranting a 4.

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

Purpose5/5

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

The description clearly states it returns one row per liquidation event, aggregated across fills, and only the liquidated user's side. It specifies the resource (Hyperliquid liquidation events) and the verb (get). Although it doesn't explicitly differentiate from the sibling `getV1HyperliquidMarketsLiquidationsOhlc`, the description is precise 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.

Usage Guidelines3/5

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

It provides good guidance on filtering and sorting within the tool but does not mention when to use this tool versus alternatives like the OHLC variant. The context of sibling tools implies differentiation, but no explicit when-to-use or when-not-to-use guidance is given.

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

getV1HyperliquidMarketsLiquidationsOhlcAInspect

Returns liquidation-only OHLCV candles for a single coin and interval. Adds mark-price OHLC (mark_price_open, mark_price_high, mark_price_low, mark_price_close) — the price feed used for margining at liquidation time — alongside the standard trade-price OHLC. Volume and counts cover the liquidation fills only.

For all-fill candles, use /v1/hyperliquid/markets/ohlc.

Query Parameters:

  • coin (Required): Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "coin": "string",
      "market_name": "string",
      "transactions": 1,
      "gross_volume": 1.5,
      "unique_liquidators": 1,
      "open_long_volume": 1.5,
      "dex": "string",
      "buys": 1,
      "net_volume": 1.5,
      "close_short_volume": 1.5,
      "sell_volume": 1.5,
      "interval_min": 1,
      "unique_liquidated": 1,
      "mark_price_close": 1.5,
      "total_fees": 1.5,
      "mark_price_open": 1.5,
      "buy_volume": 1.5,
      "low": 1.5,
      "mark_price_high": 1.5,
      "mark_price_low": 1.5,
      "high": 1.5,
      "close_long_volume": 1.5,
      "open_short_volume": 1.5,
      "open": 1.5,
      "sells": 1,
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.
coinYesHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations are provided, so the description should fully disclose behavioral traits. It doesn't mention rate limits, authentication requirements, or whether the operation is read-only (though the 'get' prefix implies it). The description focuses on output format and parameters, not on side effects or constraints. Given no annotation, 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.

Conciseness3/5

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

The description is thorough but lengthy, including a full JSON response example and repeated error codes. While well-structured with headers, it could be more concise by trimming redundant parts (e.g., the error response examples are identical).

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

Completeness5/5

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

Given the complexity (7 parameters, output schema present), the description is complete. It covers all parameters, usage guidance, differentiation from siblings, and response structure via example. No gaps are apparent.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining the format of coin identifiers (core perps, spot, builder DEX) and DEX identifiers, which goes beyond the schema's type/descriptions. It also notes plan restrictions for interval and limit, adding practical context.

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

Purpose5/5

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

The description clearly states it returns liquidation-only OHLCV candles with specific mark-price fields, and explicitly differentiates from the sibling tool `getV1HyperliquidMarketsOhlc` for all-fill candles. The verb 'Returns' and resource 'Liquidation-only OHLCV candles' are specific and unambiguous.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool vs. the alternative: 'For all-fill candles, use `/v1/hyperliquid/markets/ohlc`.' It also explains how to construct coin identifiers and DEX identifiers, and provides references to another endpoint for live DEXes, giving clear context.

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

getV1HyperliquidMarketsOhlcAInspect

Returns OHLCV candles for a single coin and interval, derived from regular trade fills. Volume is broken down both by side (buy_volume, ask_volume) and — on perpetuals — by directional intent (open_long_volume, close_long_volume, open_short_volume, close_short_volume) so consumers can distinguish whether price moves are driven by fresh exposure or position unwinds. On spot markets the directional-intent fields are zero; the side-volume fields carry the buy/sell breakdown directly.

For liquidation-only candles (with mark-price OHLC), use /v1/hyperliquid/markets/liquidations/ohlc.

Query Parameters:

  • coin (Required): Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "coin": "string",
      "market_name": "string",
      "transactions": 1,
      "gross_volume": 1.5,
      "open_long_volume": 1.5,
      "dex": "string",
      "buys": 1,
      "net_volume": 1.5,
      "close_short_volume": 1.5,
      "sell_volume": 1.5,
      "interval_min": 1,
      "total_fees": 1.5,
      "buy_volume": 1.5,
      "unique_users": 1,
      "low": 1.5,
      "high": 1.5,
      "close_long_volume": 1.5,
      "open_short_volume": 1.5,
      "open": 1.5,
      "sells": 1,
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.
coinYesHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral burden. It mentions 'Plan restricted' for interval and limit, but does not disclose rate limits, authentication necessities, or side effects. The response codes (401, 403) hint at auth, but no actionable guidance.

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

Conciseness3/5

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

The description is front-loaded with the core function but is overly long due to repeated parameter details and full error response examples. It could be more concise by removing redundant parts without losing clarity.

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

Completeness4/5

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

Given the rich output schema example, the description adequately covers the tool's functionality and key variants. However, it lacks behavioral context (e.g., rate limits) and does not fully leverage the output schema for clarification.

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

Parameters4/5

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

Schema coverage is 100%, and the description adds valuable context beyond schema, such as coin naming conventions and referencing a live list for dex values. This extra information helps the agent correctly populate parameters.

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

Purpose5/5

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

The description clearly states the tool returns OHLCV candles for a single coin and interval from regular trade fills, and distinguishes between perpetuals and spot markets. It also directly differentiates from the liquidation-specific sibling tool, providing a specific verb+resource combination.

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

Usage Guidelines4/5

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

Explicitly tells when to use an alternative endpoint ('For liquidation-only candles, use /v1/hyperliquid/markets/liquidations/ohlc'), offering clear guidance. However, it does not detail conditions under which this tool is unsuitable beyond that.

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

getV1HyperliquidMarketsOiAInspect

Returns the historical open-interest and funding-rate time series for a coin at the requested interval. open_interest is the sum of absolute signed position sizes across all users at each funding snapshot.

Each row also exposes the directional positioning split (long_size, short_size, net_position, plus long_positions and short_positions as user counts) and funding aggregates (funding_rate, total_funding, positive_funding, negative_funding) — useful for detecting crowded sides, funding pressure, and position flushes.

Query Parameters:

  • coin (Required): Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "coin": "string",
      "market_name": "string",
      "interval_min": 1,
      "dex": "string",
      "open_interest": 1.5,
      "negative_funding": 1.5,
      "short_size": 1.5,
      "long_size": 1.5,
      "funding_rate": 1.5,
      "short_positions": 1,
      "total_funding": 1.5,
      "positive_funding": 1.5,
      "funding_events": 1,
      "net_position": 1.5,
      "long_positions": 1
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinYesHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1h
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations provided, but the description fully explains the output structure, including open_interest definition, directional positioning, funding aggregates, and pagination. It discloses that empty data array signifies end of results. No mention of destructive actions or rate limits, but the tool is clearly read-only historical data.

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

Conciseness3/5

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

While front-loaded with a clear purpose statement, the description is overly long, repeating parameter details that are already in the schema and including a verbose response example. It could be more concise without losing essential information.

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

Completeness5/5

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

Given the output schema and 100% schema coverage, the description is complete. It covers all parameters, response structure (with example), and special notes on plan restrictions and pagination. No gaps remain.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds significant value beyond schema by explaining the format of 'coin' (with examples like @N and xyz:SILVER), 'dex' (referencing /v1/hyperliquid/dexes), and 'plan restricted' notes. It also clarifies multiple value syntax with commas.

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

Purpose5/5

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

The description clearly states the verb 'Returns' and the resource 'historical open-interest and funding-rate time series for a coin at the requested interval'. It distinguishes itself from sibling tools for other chains (EVM, Polymarket, SVM) by naming Hyperliquid-specific data.

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

Usage Guidelines3/5

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

The description does not provide explicit when-to-use or when-not-to-use guidance relative to sibling Hyperliquid tools (e.g., getV1HyperliquidMarkets, getV1HyperliquidMarketsActivity). It implies usage for historical OI/funding data but lacks direct comparisons or exclusion criteria.

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

getV1HyperliquidPlatformAInspect

Returns a platform-wide time series aggregating all coins and DEXs into one row per timestamp. Each row carries trade volume (split by side), trade and counterparty counts, distinct active coins, total fees, and a liquidation slice (liquidations_volume, liquidations_count, unique_liquidated_users).

Use this endpoint instead of summing per-coin or per-DEX data client-side when you need cross-market totals. Per-coin OHLCV lives on /v1/hyperliquid/markets/ohlc; per-DEX on /v1/hyperliquid/dexes.

Query Parameters:

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "interval_min": 1,
      "volume": 1.5,
      "transactions": 1,
      "liquidations_count": 1,
      "buys": 1,
      "liquidations_volume": 1.5,
      "unique_liquidated_users": 1,
      "total_fees": 1.5,
      "active_coins": 1,
      "sells": 1,
      "sell_volume": 1.5,
      "buy_volume": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the tool is a GET request (read-only), details response structure, and lists error response codes (400, 401, 403, 404, 500) with examples. However, it does not explicitly state that the tool has no side effects or discuss rate limits, but the error codes provide transparency on failure modes.

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

Conciseness4/5

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

The description is well-structured with a clear lead paragraph stating purpose and when to use, followed by parameter listings and response codes. It is slightly verbose due to repeated parameter descriptions and lengthy response examples, but remains organized and front-loaded with essential information.

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

Completeness5/5

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

Given the output schema is provided, the description does not need to explain return values, but it includes a comprehensive response example. It covers purpose, usage guidance, all parameters, and error scenarios. The mention of sibling tools for differentiation ensures the agent has sufficient context to select this tool.

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

Parameters3/5

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

The input schema has 100% description coverage, with each parameter already well-described (including defaults, enums, min/max). The description's parameter section largely repeats the schema. It adds value through the response example showing how parameters map to data fields, but does not significantly enhance semantic understanding beyond the schema.

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

Purpose5/5

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

The description explicitly states the tool returns a platform-wide time series aggregating all coins and DEXs into one row per timestamp, listing the included data. It distinguishes from sibling tools like per-coin OHLCV and per-DEX endpoints, providing clear differentiation.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use this endpoint instead of summing per-coin or per-DEX data client-side when you need cross-market totals.' This clearly indicates when to use and suggests alternatives, meeting the criteria for explicit usage guidance.

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

getV1HyperliquidUsersAInspect

Returns trading aggregates per user: fill count, volume broken down by side, total fees (negative values represent net maker rebates), realized PnL, net funding paid or received, liquidation-fill count, distinct coins traded, and first/last trade timestamps.

Omit user for leaderboard mode — returns a paginated list sorted by sort_by. Provide user for profile mode — returns a single row. Filters coin and dex compose additively — pass either or both to narrow the scope (coin=BTC for one market, dex=xyz for one venue, both together for redundancy). A mismatched combination (e.g. coin=cash:TSLA&dex=xyz) returns an empty result.

Aggregation windows are fixed via the interval parameter — 1h, 1d, 1w, 30d, or omit for all-time. Data is refreshed hourly, so 1h lags up to 1h.

Vaults trade as normal accounts, so passing a vault address as user returns its trading performance — pair with /v1/hyperliquid/vaults for depositor-side stats.

Query Parameters:

  • user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • interval: Lookback window for user statistics (1 hour, 1 day, 1 week, 30 days). Omit for all-time.

  • sort_by: No description.

  • coin: Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "coin": "unknown_type",
      "dex": "unknown_type",
      "transactions": 1,
      "coins_traded": 1,
      "first_trade": "string",
      "buys": 1,
      "last_trade": "string",
      "total_fees": 1.5,
      "interval": "unknown_type",
      "volume_bought": 1.5,
      "total_funding": 1.5,
      "sells": 1,
      "volume_sold": 1.5,
      "total_volume": 1.5,
      "liquidation_fills": 1,
      "realized_pnl": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinNoHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
sort_byNototal_volume
intervalNoLookback window for user statistics (1 hour, 1 day, 1 week, 30 days). Omit for all-time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior5/5

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

With no annotations, the description carries full burden and excels: it discloses data refresh hourly (1h lags up to 1h), vault trading behavior, empty data array meaning, and additive filters. No contradictions.

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

Conciseness4/5

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

The description is well-organized with sections and bullet points, and front-loads purpose. Some redundancy with schema descriptions, but overall each part serves a purpose. Could be slightly trimmed without loss.

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

Completeness5/5

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

Given the complexity (7 params, no required, output schema present), the description covers both modes, filter behavior, interval nuances, data freshness, and references another endpoint. Output schema is provided, making it complete.

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

Parameters4/5

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

Schema coverage is high (86%), and the description adds valuable context beyond schema, such as detailed coin naming conventions and filter composition rules. Some parameter descriptions are repeated from schema, but overall enrichment is significant.

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

Purpose5/5

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

The description clearly states it returns trading aggregates per user with a comprehensive list of metrics. It distinguishes between leaderboard and profile modes, and details filters and intervals. This is specific and differentiates from siblings.

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

Usage Guidelines4/5

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

Explicit guidance on when to use leaderboard vs profile mode, how filters compose additively, and how intervals work. The description also mentions data refresh frequency. However, it does not directly compare with sibling tools, leaving the agent to infer from context.

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

getV1HyperliquidUsersActivityAInspect

Returns a chronological feed of balance-changing events for a user — bridge deposits/withdrawals, on-chain account deposits/withdrawals, vault deposits/withdrawals, liquidations, and funding payments. Each row carries an event_type discriminator and a notes field with type-specific extras (e.g. funding rate and position size for funding events).

For trade fills, use /v1/hyperliquid/markets/activity instead.

Supply event_types (comma-separated) to filter to a subset. Defaults to the last 30 days when no time range is specified — provide start_time and end_time to query older data.

Query Parameters:

  • user (Required): Filter by address

  • event_types: Filter by balance-event type.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1,
      "timestamp": "string",
      "transaction_hash": "string",
      "amount": 1.5,
      "user": "string",
      "token": "string",
      "event_index": 1,
      "event_type": "bridge_deposit",
      "counterparty": "string",
      "notes": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userYesFilter by address
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
event_typesNoFilter by balance-event type.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations provided, so the description bears full burden. It describes return format (chronological feed with event_type and notes), pagination, and error responses. However, it does not explicitly state that the operation is read-only (safe), which is implied but not confirmed.

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

Conciseness3/5

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

The description is fairly long and includes parameter docs that are already present in the schema (e.g., query parameters section). While well-structured, it could be more concise by not repeating the schema details. The initial summary paragraph is good.

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

Completeness5/5

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

Given no annotations and a moderately complex tool with six parameters, the description covers all necessary aspects: what it does, when to use, how to filter, pagination, response structure with examples, and error codes. No major gaps.

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

Parameters4/5

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

Schema description coverage is 100%, providing detailed parameter descriptions. The description adds value by explaining defaults (30 days, pages with empty data array), comma-separated event_types, and response structure. Exceeds baseline 3 by adding meaningful context.

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

Purpose5/5

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

Clearly states it returns a chronological feed of balance-changing events for a user, listing specific event types (bridge, vault, liquidation, funding). Also directly distinguishes from the sibling tool for trade fills.

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

Usage Guidelines5/5

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

Explicitly provides when to use this tool and when to use the alternative `/v1/hyperliquid/markets/activity` for trade fills. Also explains defaults (30 days) and how to filter by event_types and time range.

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

getV1HyperliquidUsersPositionsAInspect

Returns the current signed position (position_size) per coin for a user, reconstructed from the latest funding snapshot per (user, coin) pair. Positive position_size indicates a long position, negative indicates a short. Each row also carries the funding rate applied at that snapshot and the snapshot timestamp.

Filter by coin for a single coin, or dex to return only positions on one venue (xyz, cash, etc.).

Caveat: positions opened and fully closed between two funding snapshots are never observed during settlement and will not appear here.

Query Parameters:

  • user (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • coin: Hyperliquid coin identifier. Core perps have no prefix (BTC, HYPE); spot pairs use @N (@107); builder DEXs prefix the symbol with the DEX name (xyz:SILVER).Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • dex: DEX identifier. perps for core perps, spot for @N spot pairs, or a builder DEX name (xyz, cash, …). Call /v1/hyperliquid/dexes for the live set.Single value or array of values* (separate multiple values with ,)*Plan restricted.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "coin": "string",
      "market_name": "string",
      "dex": "string",
      "funding_rate": 1.5,
      "position_size": 1.5,
      "last_update": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
dexNoDEX identifier. `perps` for core perps, `spot` for `@N` spot pairs, or a builder DEX name (`xyz`, `cash`, …). Call `/v1/hyperliquid/dexes` for the live set.<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
coinNoHyperliquid coin identifier. Core perps have no prefix (`BTC`, `HYPE`); spot pairs use `@N` (`@107`); builder DEXs prefix the symbol with the DEX name (`xyz:SILVER`).<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

The description discloses the data reconstruction method (from latest funding snapshot), the meaning of position sign, and a caveat about unobserved positions. It also lists potential error status codes (400, 401, 403, 404, 500). However, it does not explicitly state that the tool is read-only or mention authentication requirements, which would be beneficial given no annotations are present.

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

Conciseness3/5

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

The description is well-structured with sections for parameters and responses, and includes an example. However, it is somewhat verbose—it repeats parameter descriptions that closely mirror the schema, and the response section is lengthy with repeated error examples. A more streamlined version could improve conciseness.

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

Completeness4/5

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

Given the tool's complexity (5 parameters, output schema available), the description covers the purpose, all parameters with usage notes, the response structure (including an example), and a caveat. It leverages the output schema for response details, so not every field needs explanation. It is mostly complete, though it could mention authentication or rate limiting.

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

Parameters4/5

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

Schema description coverage is 100%, but the tool description adds significant value beyond the schema. It explains the format of coin identifiers (core perps, spot @N, builder DEX prefixes) and dex identifiers, and clarifies how to pass multiple values (comma-separated). It also notes that 'user' is required and that pagination parameters have plan restrictions.

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

Purpose4/5

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

The description clearly states that the tool returns the current signed position per coin for a user, reconstructed from funding snapshots. It specifies the verb, resource, and scope. While it distinguishes itself from sibling tools by name and context, it does not explicitly differentiate itself from other position-related tools (e.g., getV1PolymarketUsersPositions) in the description.

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

Usage Guidelines3/5

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

The description explains how to use the tool via filters (by user, coin, dex, pagination) and includes a caveat about positions not observed between snapshots. However, it does not provide explicit guidance on when to use this tool versus alternatives, such as market-level tools or other position endpoints, nor does it mention prerequisites or exclusions.

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

getV1HyperliquidVaultsAInspect

Returns vault summaries — leader, lifetime flow totals (deposits, withdrawals, distributions, leader commissions), depositor and event counts, and last-activity timestamp.

Vault trading PnL/volume is exposed via /v1/hyperliquid/users with the vault address as user (vaults trade as normal accounts on Hyperliquid). Per-depositor breakdowns live on /v1/hyperliquid/vaults/depositors.

Vaults predating our indexer cutover (2026-02-02) have no ledger_vault_creates row and come back with leader/created_at as null and initial_deposit/create_fee as 0.

Query Parameters:

  • vault: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "vault": "string",
      "leader": "unknown_type",
      "created_at": "unknown_type",
      "create_fee": 1.5,
      "initial_deposit": 1.5,
      "lifetime_withdrawals": 1.5,
      "last_activity_at": "unknown_type",
      "depositor_count": 1,
      "lifetime_distributions": 1.5,
      "deposit_count": 1,
      "withdrawal_count": 1,
      "lifetime_deposits": 1.5,
      "lifetime_leader_commissions": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
vaultNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
sort_byNolifetime_deposits

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries full burden. It reveals null fields for pre-cutover vaults, plan restrictions on parameters, and pagination behavior (empty data array signifies end). It does not mention authentication or rate limits, but for a data retrieval tool, this is acceptable.

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

Conciseness4/5

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

The description is well-organized with a clear opening summary, followed by behavioral notes, parameter details, and response examples. It is slightly verbose but every section adds value. Front-loading key information helps an agent quickly grasp purpose.

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

Completeness4/5

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

Given the presence of an output schema and 4 parameters, the description covers most important aspects: return fields, pagination, plan restrictions, and data quirks. It could elaborate on the statistics/pagination objects, but the example provides enough context.

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

Parameters4/5

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

Schema coverage is 75% (3 of 4 params have descriptions). The description adds meaning beyond schema for vault (single or array values, plan restricted) and limit/page (plan restricted and end-of-results signaled by empty data). For sort_by, it merely indicates 'No description', offering no additional value, but the enum values are in the schema.

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

Purpose5/5

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

The description clearly states it returns vault summaries with specific fields like leader, lifetime flow totals, depositor counts, and last activity. It distinguishes itself from sibling tools by explicitly mentioning that vault trading PnL/volume is available via /v1/hyperliquid/users and per-depositor breakdowns via /v1/hyperliquid/vaults/depositors.

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

Usage Guidelines4/5

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

The description provides clear alternatives for related data (trading PnL and depositor breakdowns) and notes special behavior for vaults predating a cutover date. While it doesn't explicitly say 'use this when', the context is sufficient for an agent to decide which endpoint fits.

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

getV1HyperliquidVaultsDepositorsAInspect

Returns the per-depositor breakdown for a single vault — one row per (user, vault) pair with lifetime deposits, lifetime net withdrawals (after vault commission and closing cost), distributions received, deposit and withdrawal counts, and last-activity timestamp.

For the vault-level summary, see /v1/hyperliquid/vaults.

Query Parameters:

  • vault (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "vault": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "deposits": 1.5,
      "deposit_count": 1,
      "withdrawals": 1.5,
      "distributions_received": 1.5,
      "withdrawal_count": 1,
      "last_activity_at": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
vaultYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
sort_byNodeposits

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It details the return structure, pagination parameters, and plan restrictions. However, it does not explicitly state that the operation is read-only or non-destructive, which would be helpful for agents.

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

Conciseness4/5

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

The description is well-structured with clear sections for query parameters and responses, and front-loads the purpose. However, it is somewhat verbose, especially with detailed response examples and error codes that could be condensed.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, output schema), the description is comprehensive. It explains the output fields, pagination, error responses, and provides a cross-reference to a sibling tool. The presence of an output schema reduces the need to describe return values, so completeness is high.

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

Parameters3/5

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

Schema description coverage is high (75%), and the description adds little new meaning beyond what's already in the input schema. The 'sort_by' parameter lacks a description, but the schema provides its enum and default. Overall, the description complements the schema but does not significantly enhance parameter understanding.

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

Purpose5/5

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

The description clearly states it returns 'per-depositor breakdown for a single vault' and lists the specific fields (deposits, withdrawals, etc.). It distinguishes itself from sibling getV1HyperliquidVaults by explicitly directing to that endpoint for vault-level summary.

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

Usage Guidelines4/5

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

The description provides an explicit alternative for vault-level summary ('see /v1/hyperliquid/vaults'), giving clear when-to-use guidance. However, it does not include explicit when-not-to-use scenarios or exclusions beyond that.

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

getV1NetworksBInspect

Returns supported blockchain networks with identifiers, metadata, and indexed block information per database category.

Query Parameters:

  • network: Network ID to filter bySingle value or array of values* (separate multiple values with ,)*Plan restricted.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "networks": [
    {
      "id": "string",
      "fullName": "string",
      "shortName": "string",
      "aliases": [
        "string"
      ],
      "caip2Id": "string",
      "indexed_to": [
        {
          "category": "string",
          "version": "string",
          "block_num": 1.5,
          "timestamp": 1.5,
          "datetime": "string"
        }
      ],
      "icon": {
        "web3Icons": {
          "name": "string"
        }
      },
      "networkType": "string"
    }
  ]
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork ID to filter by<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
networksYes
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses access constraints ('Plan restricted') for filtering, but fails to declare safety characteristics (read-only, idempotent), rate limits, or pagination behavior for the list response. The extensive HTTP status code documentation is present but redundant with implied output schema.

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

Conciseness2/5

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

The description is severely bloated, spending approximately 90% of its length duplicating structured output schema data (HTTP status codes 400-500, full JSON response examples). Only the first sentence provides unique descriptive value; the rest wastes tokens on documentation that belongs in the output schema field.

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

Completeness3/5

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

While the description contains comprehensive response examples (rendering it information-complete), this is redundant given the presence of an output schema. It omits critical contextual guidance such as the relationship to sibling data tools and the discovery workflow, focusing instead on low-level HTTP documentation.

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

Parameters4/5

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

Despite 100% schema description coverage, the description adds valuable usage syntax not present in the raw schema: it clarifies that multiple values are separated with commas and reiterates the 'Plan restricted' constraint, providing actionable formatting guidance for the 'network' parameter.

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

Purpose4/5

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

The opening sentence clearly states the tool 'Returns supported blockchain networks with identifiers, metadata, and indexed block information,' specifying the exact resource (blockchain networks) and action (returns). It implicitly distinguishes from siblings like getV1EvmBalances (which query network data) by serving as a discovery/metadata endpoint, though 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.

Usage Guidelines2/5

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

The description documents the 'network' filter parameter and notes it is 'Plan restricted,' but provides no explicit guidance on when to use this tool versus the numerous EVM/SVM/TVM data siblings (e.g., 'Use this first to discover valid network IDs before querying balances'). Usage guidance is entirely implicit.

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

getV1PolymarketMarketsAInspect

Returns market metadata including question, outcomes with token IDs, volume, and status. Each market has exactly two outcomes (binary); multi-outcome scenarios are modeled as multiple markets grouped under one event.

Use this to discover token_id values needed for OHLCV and position queries, or to resolve a slug to identifiers. When no identifier is provided, returns a paginated list for discovery.

Query Parameters:

  • condition_id: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • market_slug: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_id: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • event_slug: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • closed: No description.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "condition_id": "string",
      "market_slug": "string",
      "event_slug": "unknown_type",
      "outcomes": [
        {
          "label": "string",
          "token_id": "string"
        }
      ],
      "neg_risk": true,
      "start_date": "string",
      "closed": true,
      "question": "string",
      "volume": 1.5,
      "fees_enabled": true,
      "event_title": "unknown_type",
      "description": "string",
      "end_date": "string",
      "accepting_orders": true
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
closedNo
sort_byNovolume
token_idNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
event_slugNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
market_slugNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
condition_idNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: pagination behavior ('Empty `data` array signifies end of results'), plan restrictions on limit, and the binary market structure. However, it doesn't mention rate limits, authentication requirements (though error responses hint at it), or whether this is a read-only operation. The description adds useful context but doesn't fully cover behavioral aspects for a tool with 8 parameters.

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

Conciseness3/5

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

The description is front-loaded with purpose and usage, but includes extensive response documentation that duplicates what an output schema would provide. The 'Query Parameters' section is helpful but could be more concise. While well-structured, it includes redundant information (full HTTP response examples) that could be omitted given the output schema exists.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, no annotations, but with output schema), the description is reasonably complete. It explains purpose, usage, parameters, pagination, and market structure. The output schema exists, so detailed response documentation isn't needed, but the description still provides it. For a read operation with many filtering options, this provides adequate context despite annotation gaps.

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

Parameters4/5

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

Schema description coverage is only 25%, but the description compensates well. It provides a detailed 'Query Parameters' section that documents all 8 parameters, adding meaning beyond the sparse schema. While it says 'No description' for most parameters, it still lists them with formatting, and provides good documentation for 'limit' and 'page'. The description adds substantial value over the low-coverage schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns market metadata including question, outcomes with token IDs, volume, and status.' It specifies the resource (Polymarket markets) and verb (returns metadata), and distinguishes itself from siblings by explaining that it's for discovery and provides token IDs needed for other tools like OHLCV and position queries. The binary market structure explanation further clarifies scope.

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

Usage Guidelines4/5

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

The description provides explicit usage guidance: 'Use this to discover `token_id` values needed for OHLCV and position queries, or to resolve a slug to identifiers.' It also explains behavior when no identifier is provided (returns paginated list for discovery). However, it doesn't explicitly state when NOT to use this tool versus alternatives like the sibling 'getV1PolymarketMarketsActivity' or other market-related tools.

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

getV1PolymarketMarketsActivityAInspect

Returns a chronological feed of on-chain trades, position splits, merges, and redemptions. Each row includes the transaction hash, block number, and scaled amounts.

For trades, market.token_id and market.outcome_label identify the specific outcome token. For splits, merges, and redemptions, these are null because the operation applies to the market as a whole.

At least one of user, token_id, or condition_id is required. Defaults to the last 24 hours when no time range is specified — provide start_time and end_time to query older data.

Query Parameters:

  • user: No description.

  • token_id: No description.

  • condition_id: No description.

  • event_type: Filter by event type

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "event_type": "string",
      "timestamp": "string",
      "block_num": 1.5,
      "amount": "string",
      "user": "string",
      "tx_hash": "string",
      "fee_value": 1.5,
      "value": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "unknown_type",
        "closed": true,
        "outcome_label": "unknown_type"
      },
      "fee_amount": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userNo
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
token_idNo
event_typeNoFilter by event type
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
condition_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read operation (implied by 'returns'), includes pagination details ('Empty `data` array signifies end of results'), mentions plan restrictions for the limit parameter, and explains how different event types affect the data structure. However, it doesn't mention rate limits, authentication requirements, or potential data volume concerns.

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

Conciseness3/5

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

The description is appropriately front-loaded with the core functionality, but it includes extensive documentation of HTTP responses that could be considered redundant since an output schema exists. The parameter and response sections are detailed but somewhat verbose, making the overall description longer than necessary for optimal conciseness.

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

Completeness4/5

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

Given the complexity (8 parameters, no annotations, but with output schema), the description is quite complete. It covers the tool's purpose, parameter usage, behavioral details, and includes response examples. The output schema reduces the need to explain return values in the description. The main gap is the lack of explicit guidance on when to use this tool versus sibling alternatives.

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

Parameters4/5

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

The schema description coverage is 63%, and the description adds significant value beyond the schema. It explains the purpose of the three required parameters ('At least one of `user`, `token_id`, or `condition_id` is required'), clarifies how `market.token_id` and `market.outcome_label` work for different event types, and provides context about the time range defaults. While some parameters like `event_type` have good schema descriptions, the description compensates well for the coverage gap.

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

Purpose5/5

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

The description clearly states the tool 'returns a chronological feed of on-chain trades, position splits, merges, and redemptions' with specific details about what each row includes. It distinguishes itself from sibling tools by focusing specifically on Polymarket markets activity, unlike other tools that handle balances, transfers, or other data types.

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

Usage Guidelines4/5

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

The description provides clear context about when to use certain parameters ('At least one of `user`, `token_id`, or `condition_id` is required') and default behavior ('Defaults to the last 24 hours when no time range is specified'). However, it doesn't explicitly state when to use this tool versus alternative tools for similar data, such as other market-related tools in the sibling list.

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

getV1PolymarketMarketsOhlcAInspect

Returns OHLCV price data for a single outcome token. Each market has two outcome tokens (e.g. Yes and No) — use /v1/polymarket/markets to discover them.

Prices are in USD per share (0 to 1). Volume and fees are in USDC.

Query Parameters:

  • token_id (Required): No description.

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "open": 1.5,
      "high": 1.5,
      "trades": 1.5,
      "total_refunds": 1.5,
      "net_fees": 1.5,
      "low": 1.5,
      "buys": 1.5,
      "total_fees": 1.5,
      "volume": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "closed": true,
        "outcome_label": "unknown_type"
      },
      "unique_makers": 1.5,
      "sells": 1.5,
      "fee_count": 1.5,
      "effective_fee_rate": 1.5,
      "unique_takers": 1.5,
      "effective_fee_rate_gross": 1.5,
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
token_idYes
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it explains price units (USD per share, 0 to 1), volume and fees units (USDC), pagination behavior (empty data array signifies end), and mentions plan restrictions for interval and limit. However, it lacks details on rate limits, authentication requirements beyond error codes, or performance implications, leaving some gaps.

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

Conciseness3/5

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

The description is front-loaded with the core purpose, but it includes extensive, repetitive sections like detailed parameter listings and full HTTP response examples that duplicate information from the schema and output schema. This makes it verbose and less efficient, though the initial sentences are clear.

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

Completeness4/5

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

Given the complexity (6 parameters, no annotations, but an output schema exists), the description is mostly complete. It covers purpose, usage context, parameter details, and behavioral aspects like units and pagination. The output schema handles return values, so the description doesn't need to explain them. However, it could better address authentication or error handling specifics beyond listing codes.

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

Parameters3/5

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

Schema description coverage is high at 83%, so the baseline is 3. The description adds minimal value beyond the schema: it repeats parameter details in a 'Query Parameters' section but does not provide additional context like examples for token_id or clarification on interval options beyond the enum. This meets the baseline but does not enhance understanding significantly.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns OHLCV price data for a single outcome token.' It specifies the resource (OHLCV price data), the scope (single outcome token), and distinguishes from sibling tools by mentioning '/v1/polymarket/markets' for discovery. This is specific and avoids tautology.

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

Usage Guidelines4/5

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

The description provides clear context for usage: it explains that each market has two outcome tokens and refers to another tool ('/v1/polymarket/markets') for discovering them, which helps guide the agent. However, it does not explicitly state when not to use this tool or name specific alternatives among siblings, keeping it from a perfect score.

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

getV1PolymarketMarketsOiAInspect

Returns open interest time-series for a market. Open interest is the USDC collateral locked into conditional token positions — it increases on splits (deposit USDC to mint Yes+No pairs) and decreases on merges (return pairs to withdraw USDC) or redemptions.

Provide one of condition_id or market_slug.

Query Parameters:

  • condition_id: No description.

  • market_slug: No description.

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "net_open_interest": 1.5,
      "split_amount": 1.5,
      "transactions": 1.5,
      "merge_amount": 1.5,
      "split_count": 1.5,
      "unique_stakeholders": 1.5,
      "merge_count": 1.5,
      "market": {
        "condition_id": "string",
        "market_slug": "unknown_type",
        "token_id": null,
        "closed": true,
        "outcome_label": null
      }
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
market_slugNo
condition_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the data returned (open interest time-series) and includes pagination behavior ('Empty `data` array signifies end of results'), but lacks details on rate limits, authentication requirements (though error responses hint at 401/403), or performance characteristics. The description 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.

Conciseness3/5

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

The description is front-loaded with the core purpose, but includes extensive parameter and response details that could be redundant given the schema and output schema. While informative, it could be more concise by focusing on value-added explanations rather than repeating schema information, such as the detailed error response examples.

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

Completeness4/5

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

Given the complexity (7 parameters, no annotations, but with output schema), the description is mostly complete. It covers the tool's purpose, parameter usage, and includes response examples, which compensates for the lack of annotations. However, it could improve by adding more behavioral context like rate limits or authentication needs, though the output schema reduces the need to explain return values.

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

Parameters4/5

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

Schema description coverage is 71%, so the description compensates by adding context beyond the schema. It clarifies that `condition_id` or `market_slug` are mutually exclusive options, explains the meaning of `interval` and `limit` as 'Plan restricted', and describes pagination behavior for `page`. However, it does not fully explain all parameters (e.g., `start_time` and `end_time` are only described in the schema).

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns open interest time-series for a market' with a specific explanation of what open interest represents in this context (USDC collateral locked into conditional token positions). It distinguishes itself from sibling tools by focusing on open interest data, unlike other Polymarket tools that handle markets, OHLC, positions, or platform data.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use this tool: 'Provide **one** of `condition_id` or `market_slug`', which clarifies the required input selection. However, it does not mention when to use alternatives or explicitly exclude other use cases, such as comparing it to other market data tools like `getV1PolymarketMarketsOhlc` for price data.

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

getV1PolymarketMarketsPositionsAInspect

Returns all user positions for a specific outcome token — a leaderboard view. Each row is one user's cumulative position: cost basis, PNL, shares held, and current value.

For a user's portfolio across all markets, use /v1/polymarket/positions instead.

Query Parameters:

  • token_id (Required): No description.

  • closed: No description.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "buy_cost": 1.5,
      "sell_revenue": 1.5,
      "transactions": 1.5,
      "current_price": 1.5,
      "sells": 1.5,
      "unrealized_pnl": 1.5,
      "buys": 1.5,
      "active": true,
      "avg_price": 1.5,
      "position_value": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "closed": true,
        "outcome_label": "unknown_type"
      },
      "total_pnl": 1.5,
      "pnl_pct": 1.5,
      "realized_pnl": 1.5,
      "net_position": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
closedNo
sort_byNoposition_value
token_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It mentions pagination behavior ('Empty `data` array signifies end of results') and plan restrictions ('*Plan restricted'), which are useful. However, it lacks details on authentication requirements (though hinted in error responses), rate limits, or side effects. The error response examples add some behavioral context but are not fully integrated into the description.

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

Conciseness2/5

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

The description is overly verbose and poorly structured. It includes extensive, redundant details like full HTTP response examples and error codes that are better suited for an output schema or API documentation. The core purpose and usage are buried among unnecessary technical details, reducing clarity and efficiency.

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

Completeness4/5

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

Given the complexity (5 parameters, 1 required), low schema coverage (40%), no annotations, but with an output schema (implied by the response examples), the description is fairly complete. It covers purpose, usage guidelines, and some behavioral aspects like pagination. However, the inclusion of excessive response details detracts from focus, and it could better address authentication or error handling explicitly.

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

Parameters3/5

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

Schema description coverage is 40%, with parameters like 'closed' and 'sort_by' having no schema descriptions. The description adds minimal semantics: it lists parameters but provides no additional meaning for 'token_id', 'closed', or 'sort_by' beyond what little the schema offers. It does clarify 'limit' and 'page' slightly, but overall, it doesn't fully compensate for the low coverage, aligning with the baseline for partial compensation.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Returns all user positions') and resources ('for a specific outcome token'), and explicitly distinguishes it from a sibling tool ('For a user's portfolio across all markets, use `/v1/polymarket/positions` instead'). It also adds context about the data format ('leaderboard view', 'Each row is one user's cumulative position').

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus an alternative: it specifies that this tool is for positions on a specific outcome token, while the sibling tool is for a user's portfolio across all markets. This directly addresses the 'when-to-use' and 'alternatives' aspects.

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

getV1PolymarketPlatformAInspect

Returns platform-wide time-series combining trading volume, open interest, and fee aggregates across all Polymarket markets.

Query Parameters:

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "timestamp": "string",
      "volume": 1.5,
      "buy_volume": 1.5,
      "trades": 1.5,
      "split_count": 1.5,
      "buys": 1.5,
      "merge_count": 1.5,
      "total_refunds": 1.5,
      "sell_volume": 1.5,
      "effective_fee_rate": 1.5,
      "net_fees": 1.5,
      "total_fees": 1.5,
      "split_amount": 1.5,
      "merge_amount": 1.5,
      "net_open_interest": 1.5,
      "sells": 1.5,
      "fee_count": 1.5,
      "oi_transactions": 1.5,
      "effective_fee_rate_gross": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries full burden and adds valuable behavioral context: it explains pagination behavior ('Empty `data` array signifies end of results'), includes detailed HTTP response codes with examples (200, 400, 401, 403, 404, 500), and mentions plan restrictions for certain parameters. However, it doesn't explicitly discuss rate limits or authentication requirements beyond error codes.

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

Conciseness2/5

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

The description is excessively long (over 100 lines) with redundant information. It repeats parameter details that are already in the schema, includes extensive HTTP response examples that could be summarized, and buries the core purpose in a sea of implementation details. The structure is not front-loaded with essential information.

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

Completeness5/5

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

Given the tool's complexity (time-series aggregation with multiple metrics), the description is complete despite its verbosity. It covers purpose, parameters, response format, error handling, and pagination behavior. With an output schema present (implied by the detailed response examples), the description doesn't need to explain return values in detail.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description repeats parameter information from the schema without adding significant additional semantic context beyond what's already in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('Returns') and resource ('platform-wide time-series combining trading volume, open interest, and fee aggregates across all Polymarket markets'). It distinguishes from sibling tools by focusing on platform-wide aggregates rather than individual markets or users.

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

Usage Guidelines3/5

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

The description implies usage through its parameter explanations (e.g., interval for aggregation, start/end times for time-series), but doesn't explicitly state when to use this tool versus alternatives like market-specific tools. No explicit when-not or alternative guidance is provided.

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

getV1PolymarketUsersAInspect

Returns trading statistics per user: volume, PNL (realized, unrealized, total), trade counts, and activity window. When no user address is provided, returns a paginated leaderboard for discovery.

Supports lookback windows via interval: 1h, 1d, 1w, 30d. Omit for all-time. Data refreshes hourly.

Query Parameters:

  • user: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • interval: Lookback window for user statistics (1 hour, 1 day, 1 week, 30 days). Omit for all-time.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "buys": 1.5,
      "sells": 1.5,
      "transactions": 1.5,
      "first_trade": "string",
      "unrealized_pnl": 1.5,
      "last_trade": "string",
      "total_pnl": 1.5,
      "volume_bought": 1.5,
      "volume_sold": 1.5,
      "total_volume": 1.5,
      "realized_pnl": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
sort_byNototal_volume
intervalNoLookback window for user statistics (1 hour, 1 day, 1 week, 30 days). Omit for all-time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the dual-mode functionality (user-specific vs. leaderboard), pagination behavior ('Empty `data` array signifies end of results'), data refresh rate ('hourly'), and plan restrictions on limit. However, it doesn't explicitly mention authentication requirements or rate limits, which would be helpful for a complete behavioral picture.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. The first paragraph clearly states the tool's purpose and key behaviors. The parameter and response sections are organized but somewhat verbose. Some redundancy exists between the description text and parameter table, but overall it's efficient and front-loaded with essential information.

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

Completeness5/5

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

Given the tool's complexity (dual-mode functionality, 5 parameters, pagination) and the presence of an output schema, the description is complete. It explains the core functionality, parameter semantics, behavioral aspects, and includes response examples. The output schema handles return value details, so the description appropriately focuses on usage context and behavior.

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

Parameters4/5

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

Schema description coverage is 60%, and the description adds significant value beyond the schema. It explains the dual-purpose nature of the 'user' parameter (when omitted vs. provided), clarifies the 'interval' parameter's purpose and effect ('Omit for all-time'), and provides context for 'limit' restrictions ('Plan restricted'). The description compensates well for the 40% coverage gap in the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns trading statistics per user' with specific metrics (volume, PNL, trade counts, activity window) and distinguishes between user-specific queries and leaderboard mode. It explicitly differentiates from sibling tools by focusing on Polymarket user statistics rather than balances, markets, or positions.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'When no user address is provided, returns a paginated leaderboard for discovery.' It also explains the alternative behavior (user-specific stats vs. leaderboard) and mentions data refresh frequency ('Data refreshes hourly'), giving clear context for usage decisions.

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

getV1PolymarketUsersPositionsAInspect

Returns a user's positions with PNL breakdown per outcome token. Each row is one token's cumulative position: cost basis, realized PNL, net shares held, average entry price, and current market price.

Use closed=false for positions on live markets, or closed=true for resolved markets.

Query Parameters:

  • user (Required): undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_id: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • condition_id: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • market_slug: undefinedSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • closed: No description.

  • sort_by: No description.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "user": "string",
      "buy_cost": 1.5,
      "sell_revenue": 1.5,
      "transactions": 1.5,
      "current_price": 1.5,
      "sells": 1.5,
      "unrealized_pnl": 1.5,
      "buys": 1.5,
      "active": true,
      "avg_price": 1.5,
      "position_value": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "closed": true,
        "outcome_label": "unknown_type"
      },
      "total_pnl": 1.5,
      "pnl_pct": 1.5,
      "realized_pnl": 1.5,
      "net_position": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userYesundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
closedNo
sort_byNoposition_value
token_idNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
market_slugNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
condition_idNoundefined<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses pagination behavior ('Empty `data` array signifies end of results') and includes rate-limiting hints ('*Plan restricted' for limit). However, it doesn't mention authentication requirements, error handling specifics beyond HTTP codes, or whether this is a read-only operation, leaving gaps for a tool with 8 parameters.

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

Conciseness3/5

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

The description is front-loaded with the core purpose, but includes extensive, redundant HTTP response documentation that belongs in an output schema. The parameter and response sections are verbose and repetitive with the input schema and output examples, reducing overall efficiency. Some sentences (e.g., the pagination note) are useful, but much content doesn't earn its place.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, no annotations) and the presence of an output schema (implied by the detailed response examples), the description is reasonably complete. It covers the core functionality, key parameter usage, and behavioral aspects like pagination. However, the lack of parameter semantics for most inputs and missing authentication details prevent a perfect score.

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

Parameters2/5

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

Schema description coverage is low at 25%, with most parameters having 'No description' in the tool description. The description adds minimal value beyond the schema: it clarifies the 'closed' parameter's usage but doesn't explain other key parameters like 'user', 'token_id', or 'condition_id'. This fails to compensate for the schema's coverage gap.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns a user's positions with PNL breakdown per outcome token.' It specifies the verb ('returns'), resource ('user's positions'), and granularity ('per outcome token'), distinguishing it from sibling tools like getV1PolymarketMarketsPositions which likely returns market-level positions.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use certain parameters: 'Use `closed=false` for positions on live markets, or `closed=true` for resolved markets.' This gives clear context for filtering. However, it doesn't specify when to use this tool versus alternatives like getV1PolymarketUsers or getV1PolymarketMarketsPositions, missing sibling differentiation.

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

getV1SvmBalancesAInspect

Returns SPL token balances for Solana token owners with mint and program data.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • owner (Required): Filter by owner addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • token_account: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • program_id: Filter by SPL token program ID

  • include_null_balances: Include zero/null balances in results

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "value": 1.5,
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "program_id": "11111111111111111111111111111111",
      "decimals": "unknown_type",
      "name": "unknown_type",
      "network": "solana",
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "token_account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
ownerYesFilter by owner address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
program_idNoFilter by SPL token program ID
token_accountNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
include_null_balancesNoInclude zero/null balances in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries full disclosure burden and succeeds reasonably: documents pagination behavior ('Empty `data` array signifies end of results'), plan restrictions ('*Plan restricted' on multiple parameters), and comprehensive HTTP error responses (400-500 range).

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

Conciseness2/5

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

Severely verbose: duplicates structured schema data in prose and includes massive JSON response examples (~100 lines) that belong in a formal output schema rather than description text. While front-loaded with purpose, most content repeats machine-readable fields.

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

Completeness4/5

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

Despite inefficient structure, coverage is comprehensive for an 8-parameter read tool: all inputs documented, response format exemplified (200 success with data/pagination/statistics structure), error cases enumerated, and rate-limiting hints ('Plan restricted') included.

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

Parameters3/5

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

Input schema has 100% description coverage (all 8 parameters documented), establishing baseline 3. The description repeats schema content in markdown format without adding semantic value beyond what's already structured in the schema properties.

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

Purpose5/5

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

Opens with specific verb ('Returns'), resource ('SPL token balances'), and scope ('Solana token owners with mint and program data'). The 'SPL' qualifier distinguishes this from sibling 'getV1SvmBalancesNative' (implied native SOL) and 'getV1EvmBalances' (Ethereum), providing clear sibling differentiation.

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

Usage Guidelines2/5

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

Provides no explicit guidance on when to use this tool versus siblings like 'getV1SvmBalancesNative' or 'getV1SvmTokens', nor does it mention prerequisites such as authentication requirements despite listing 401/403 response codes.

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

getV1SvmBalancesNativeBInspect

Returns SOL native balances for wallet addresses.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • address (Required): Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • include_null_balances: Include zero/null balances in results

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "address": "So11111111111111111111111111111111111111112",
      "value": 1.5,
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "program_id": "11111111111111111111111111111111",
      "decimals": "unknown_type",
      "name": "unknown_type",
      "network": "solana",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
addressYesFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
include_null_balancesNoInclude zero/null balances in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Notes pagination behavior ('Empty data array signifies end of results') and plan restrictions on certain parameters. Since no annotations are provided, the description carries full burden for behavioral disclosure but only implies this is read-only via the word 'Returns' without explicitly stating safety or idempotency characteristics.

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

Conciseness2/5

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

Severely bloated with extensive HTTP response examples (status codes 400-500 with full JSON payloads) that duplicate information likely present in the output schema. The verbosity obscures the actual usage instructions and represents poor information density for an MCP context.

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

Completeness4/5

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

Despite formatting issues, the description covers all necessary ground: required vs optional parameters, pagination logic, error responses, and return value structure. For a balance retrieval tool with 5 well-documented parameters, the functional content is complete.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description provides helpful formatting details (comma-separated values for address arrays) but largely repeats the schema descriptions verbatim without adding semantic context like valid address formats or network ID lookup guidance beyond the URL.

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

Purpose4/5

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

States it 'Returns SOL native balances for wallet addresses' with specific verb and resource. However, it doesn't explicitly distinguish from sibling tool getV1SvmBalances (likely for SPL tokens), leaving the agent to infer the distinction from the 'Native' suffix in the name.

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

Usage Guidelines2/5

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

Provides detailed parameter descriptions but offers no guidance on when to use this tool versus getV1SvmBalances or other balance-related siblings. No mention of prerequisites like authentication or rate limiting beyond error code examples.

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

getV1SvmDexesAInspect

Returns all supported Solana DEXs.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "program_name": "string",
      "amm": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "transactions": 1.5,
      "amm_name": "string",
      "is_aggregator": true
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations are provided, but the description carries the burden well by documenting all HTTP response codes (200, 400, 401, 403, 404, 500) with JSON examples, pagination behavior ('Empty data array signifies end of results'), and plan restrictions on the 'limit' parameter. Could improve by explicitly stating authentication requirements in prose.

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

Conciseness3/5

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

The opening sentence is efficient, but the description is bloated with extensive JSON response examples for every HTTP status code (five separate code blocks). Given that an output schema exists, this level of response documentation is redundant though well-structured.

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

Completeness4/5

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

Complete for a read-only list operation: covers pagination, filtering scope (all supported DEXs), and error conditions. Slight gap: does not explicitly describe authentication mechanisms (though 401/403 responses imply it).

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

Parameters4/5

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

Schema coverage is 100%, establishing a baseline of 3. The description adds value by providing the external URL for Graph Network IDs (https://thegraph.com/networks) and noting that the 'limit' parameter is 'Plan restricted'—context not present in the raw schema descriptions.

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

Purpose5/5

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

The description opens with 'Returns all supported Solana DEXs'—a specific verb ('Returns') and resource ('Solana DEXs'). It clearly distinguishes from EVM/TVM siblings (getV1EvmDexes, getV1TvmDexes) by specifying the Solana/SVM domain in both the text and the 'network' parameter enum.

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

Usage Guidelines3/5

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

Usage is implied through 'Solana' naming and the 'network' parameter (enum: ['solana']), but there is no explicit guidance on when to choose this over getV1EvmDexes or getV1TvmDexes. No 'when-not' or alternative recommendations are stated.

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

getV1SvmHoldersCInspect

Returns top token holders ranked by balance.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • mint (Required): Filter by mint address

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "value": 1.5,
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "decimals": 1.5,
      "name": "unknown_type",
      "network": "solana",
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "token_account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesFilter by mint address
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It successfully discloses pagination behavior ('Empty `data` array signifies end of results') and plan restrictions ('*Plan restricted'), and documents HTTP error codes. However, it lacks explicit statements about read-only safety, authentication requirements, or rate limiting that would fully clarify operational behavior.

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

Conciseness2/5

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

The description is severely bloated, containing extensive JSON response examples for multiple HTTP status codes (200, 400, 401, 403, 404, 500) that consume ~80% of the text. While it uses headers for structure, this redundancy against the output schema makes it inefficient for an AI agent to parse.

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

Completeness3/5

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

Despite the bloat, the description covers all functional aspects: parameters, pagination logic, and response structures. However, it omits operational context like rate limits or explicit usage patterns relative to the many sibling tools available (e.g., when to use holders vs balances endpoints).

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

Parameters3/5

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

Input schema has 100% description coverage, establishing a baseline of 3. The description largely repeats schema content (parameter names, types, and descriptions) without adding significant semantic value like input constraints, format validation rules, or cross-parameter dependencies beyond what the schema already provides.

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

Purpose4/5

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

The opening sentence 'Returns top token holders ranked by balance' is specific with clear verb and resource. It effectively distinguishes from sibling tools like getV1SvmTokens (token metadata) and getV1EvmHolders (different chain type), though it could explicitly mention 'SVM' or 'Solana' in the description text to strengthen differentiation.

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

Usage Guidelines2/5

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

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

getV1SvmHoldersNativeBInspect

Returns top token holders ranked by Native balance.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "amount": "string",
      "value": 1.5,
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "decimals": 1.5,
      "name": "unknown_type",
      "network": "solana",
      "symbol": "unknown_type",
      "token_account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses pagination behavior ('Empty `data` array signifies end of results') and includes error responses (400, 401, 403, 404, 500), which is helpful. However, it doesn't mention rate limits, authentication requirements (implied by 401/403 but not explicit), or whether this is a read-only operation (implied by 'Returns' but not confirmed).

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

Conciseness2/5

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

The description is overly long and poorly structured. It front-loads the purpose but then duplicates parameter documentation from the schema and includes extensive, verbose HTTP response examples that belong in an output schema. The response examples with placeholder values ('unknown_type', 1.5) add little value and waste space. Sentences don't earn their place efficiently.

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

Completeness4/5

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

Given the tool's complexity (3 parameters, paginated list operation) and the presence of an output schema (implied by detailed response examples), the description is reasonably complete. It covers the purpose, parameters, and response structure, though it lacks sibling differentiation and some behavioral details. The output examples compensate for missing annotations to some extent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all three parameters. The description repeats the parameter definitions verbatim from the schema, adding no additional meaning or context beyond what's already in structured fields. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Returns top token holders ranked by Native balance.' It specifies the verb ('Returns'), resource ('top token holders'), and ranking criteria ('by Native balance'). However, it doesn't explicitly differentiate from its sibling 'getV1SvmHolders' (which likely returns holders by non-native balance), leaving some ambiguity.

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

Usage Guidelines2/5

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. With many sibling tools (e.g., 'getV1SvmHolders', 'getV1EvmHoldersNative'), there's no mention of when this specific SVM-native-balance tool is appropriate versus EVM tools or non-native variants. Usage context is implied but not stated.

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

getV1SvmOwnerBInspect

Returns owner address of an associated token account (ATA) with closure status.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • account (Required): Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "account": "string",
      "is_closed": true,
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "network": "solana"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
accountYesFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses plan restrictions on certain parameters, pagination behavior (empty data array signifies end), and error conditions (401/403 imply authentication requirements). However, it lacks explicit statements about rate limits, caching behavior, or whether the operation is read-only (though implied by 'Returns').

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

Conciseness2/5

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

While front-loaded with a clear purpose statement, the description is extremely verbose due to extensive JSON examples for every HTTP response code (200, 400, 401, 403, 404, 500). The error examples are highly repetitive and consume excessive tokens without adding proportional value, violating 'every sentence should earn its place.'

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

Completeness4/5

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

Given the tool's complexity and lack of separate output schema, the description comprehensively documents input parameters, response structures, pagination behavior, and error cases. It includes concrete examples and field descriptions sufficient for invocation, though it lacks explicit sibling comparison.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description duplicates the parameter documentation from the schema (network, account, limit, page) without adding semantic meaning, syntax examples, or validation rules beyond what the schema already provides.

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

Purpose5/5

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

The opening sentence 'Returns owner address of an associated token account (ATA) with closure status' provides a specific verb (Returns), resource (owner address of an ATA), and distinguishing detail (closure status). It clearly differentiates from siblings like getV1SvmHolders or getV1SvmBalances by specifying ATA ownership specifically.

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

Usage Guidelines2/5

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 related siblings such as getV1SvmHolders or getV1SvmTokens. There is no mention of prerequisites, typical use cases, or conditions that would indicate this is the appropriate tool for a given task.

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

getV1SvmPoolsAInspect

Returns AMM pool information from Solana DEX protocols with transaction counts.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • amm: Filter by AMM addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • amm_pool: Filter by AMM pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • program_id: Filter by program IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "program_name": "string",
      "amm": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "transactions": 1.5,
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "input_decimals": "unknown_type",
      "output_decimals": "unknown_type",
      "network": "solana",
      "input_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "amm_name": "string",
      "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
ammNoFilter by AMM address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
amm_poolNoFilter by AMM pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
protocolNoProtocol name
program_idNoFilter by program ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries full behavioral disclosure burden. It documents pagination behavior ('Empty data array signifies end of results'), plan restrictions on parameters, and comprehensive HTTP status codes (401/403 for auth, etc.). Minor gap: no explicit mention of rate limiting or caching behavior.

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

Conciseness3/5

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

First sentence is front-loaded and efficient. However, the description is extremely verbose with extensive JSON response examples that replicate information already present in the output schema. While well-structured with headers, the massive example blocks reduce conciseness for an AI agent context.

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

Completeness4/5

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

Given the tool has 8 parameters and an output schema, the description provides comprehensive coverage: all parameters documented (mirroring schema), response structure detailed with examples, pagination logic explained, and network context (SVM/Solana) established. Output schema exists, so return values need less explanation in description.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description largely duplicates schema content in the Query Parameters section without adding additional semantic context (e.g., explaining AMM vs pool relationships, or mint address formats beyond 'filter by mint address').

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

Purpose5/5

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

The opening sentence 'Returns AMM pool information from Solana DEX protocols with transaction counts' provides a specific verb (Returns), resource (AMM pool information), domain (Solana/SVM), and distinguishes from siblings (EvmPools, TvmPools in sibling list).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings like getV1SvmPoolsOhlc (OHLC data) or getV1SvmSwaps (individual transactions). The description explains what data it returns but not selection criteria for choosing between related endpoints.

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

getV1SvmPoolsOhlcCInspect

Provides pricing data in the Open/High/Low/Close/Volume (OHCLV) format for DEX pools.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • amm_pool (Required): Filter by AMM pool address

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "datetime": "string",
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "amm": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "transactions": 1.5,
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "low": 1.5,
      "token1": "string",
      "token0": "string",
      "high": 1.5,
      "volume": 1.5,
      "token0_decimals": 1.5,
      "token1_decimals": 1.5,
      "open": 1.5,
      "uaw": 1.5,
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
amm_poolYesFilter by AMM pool address
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full disclosure burden. It successfully notes 'Plan restricted' limitations for certain parameters and explains pagination end-of-results behavior ('Empty data array signifies end of results'). However, it fails to explicitly characterize the operation as read-only/safe or describe rate limiting, caching, or authentication requirements beyond implied HTTP status codes.

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

Conciseness2/5

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

The description is severely bloated with extensive JSON response examples and HTTP status code documentation that duplicates what should exist in the output_schema field. This buries the actual tool description (one sentence) in a massive text block, wasting context window and reducing signal-to-noise ratio for an LLM trying to select the tool.

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

Completeness3/5

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

Despite the inefficient structure, the description contains necessary information about plan restrictions and pagination. However, given that output schema exists separately, the inclusion of full response examples in the description is redundant. The description is complete but could achieve the same informational density in one-third the length.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented in the structured schema. The description largely repeats the schema content without adding semantic context (e.g., no explanation of what '1h' vs '1d' interval implies functionally, or format constraints beyond the examples already in the schema). This meets the baseline expectation 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.

Purpose4/5

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

The opening sentence clearly states the tool provides pricing data in OHLCV format for DEX pools, using specific verb and resource terms. However, it fails to explicitly distinguish this SVM (Solana) variant from the EVM and TVM siblings (getV1EvmPoolsOhlc, getV1TvmPoolsOhlc) in the description text itself, relying solely on the tool name to convey the blockchain context.

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

Usage Guidelines2/5

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 EVM or TVM alternatives, nor does it explain selection criteria between the sibling pool data tools. While it documents parameters thoroughly, there is no strategic advice on tool selection, prerequisites, or typical use cases.

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

getV1SvmSwapsAInspect

Returns AMM swap events from Solana DEXs with input/output tokens and amounts.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • signature: Filter by transaction signatureSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • amm: Filter by AMM addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • amm_pool: Filter by AMM pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • fee_payer: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • signer: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • input_mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • output_mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • program_id: Filter by program IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "transaction_index": 1.5,
      "compute_units_consumed": 1.5,
      "output_amount": "string",
      "input_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "instruction_index": 1.5,
      "amm": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "fee_payer": "So11111111111111111111111111111111111111112",
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "input_value": 1.5,
      "fee": 1.5,
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "input_amount": "string",
      "summary": "string",
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "stack_height": 1.5,
      "network": "solana",
      "program_name": "string",
      "output_value": 1.5,
      "signature": "5pdoVcSiSBr3LMAijdRYKrL5RoLFjLgHxHbZ34dUBVubnsQt3q1v48LuPazebsSiBVuSbSTyJdzf3G9jqqn8o6jA",
      "user": "So11111111111111111111111111111111111111112",
      "protocol": "jupiter_v4",
      "signer": "So11111111111111111111111111111111111111112",
      "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
ammNoFilter by AMM address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
signerNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
amm_poolNoFilter by AMM pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
protocolNoProtocol name
end_blockNoFilter by block number
fee_payerNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
signatureNoFilter by transaction signature<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
input_mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
program_idNoFilter by program ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
output_mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description notes important behavioral constraints like 'Plan restricted' filters and pagination logic ('Empty `data` array signifies end of results'). However, it omits rate limits, auth requirements beyond HTTP codes, and explicit read-only nature.

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

Conciseness2/5

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

The description is extremely verbose, redundantly listing all 14 parameters and full response examples that are already defined in the input schema (100% coverage). While structured with headers, the duplication makes it inefficient.

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

Completeness4/5

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

Given the tool's complexity (14 parameters, output schema), the description adequately covers query parameters, response structures, error codes, and plan restrictions. It provides sufficient context for invocation despite not addressing sibling differentiation.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description largely duplicates the schema's content in markdown format without adding significant semantic meaning beyond what's already documented in the structured schema properties and examples.

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

Purpose5/5

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

The first sentence 'Returns AMM swap events from Solana DEXs with input/output tokens and amounts' provides a specific verb, resource, and scope. The explicit mention of 'Solana DEXs' effectively distinguishes this from sibling EVM and TVM swap tools (getV1EvmSwaps, getV1TvmSwaps).

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

Usage Guidelines3/5

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

While the description clearly establishes the domain (Solana/SVM), it does not explicitly state when to choose this over getV1EvmSwaps or provide other comparative guidance. Usage is implied by the scope but not directive.

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

getV1SvmTokensCInspect

Provides SVM token contract metadata.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "circulating_supply": 1.5,
      "program_id": "11111111111111111111111111111111",
      "decimals": "unknown_type",
      "name": "unknown_type",
      "network": "string",
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "holders": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations provided, so description carries full burden. Includes 'Plan restricted' warning indicating tiered access limitations, and comprehensive response structure showing pagination and token metadata fields. However, fails to explicitly state idempotency, read-only nature, or authentication requirements despite 401/403 response examples being present.

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

Conciseness2/5

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

Severely bloated with auto-generated OpenAPI response documentation. Contains redundant JSON examples for 5 HTTP error codes (400-500) that add no value for AI tool selection. The actual description ('Provides SVM...') is buried under massive text dump. Poor structure for MCP context.

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

Completeness3/5

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

Adequate for low-complexity tool (2 parameters, simple return). Output schema exists (implied by response documentation), so return values need not be explained in description. However, lacks domain context explaining SVM (Solana Virtual Machine) terminology or what metadata fields like 'program_id' represent.

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

Parameters3/5

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

Schema description coverage is 100%, documenting the 'network' enum and 'mint' filter with comma-separated array syntax. Description text largely repeats schema content without adding semantic value (e.g., explaining what a 'mint address' is in SVM context). Baseline 3 appropriate when schema is self-sufficient.

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

Purpose4/5

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

States 'Provides SVM token contract metadata' which identifies the specific resource (token contract metadata) and domain (SVM/Solana). Distinguishes from sibling tools like getV1SvmBalances or getV1EvmTokens through explicit SVM and 'token' scoping. Verb 'Provides' is weaker than 'Retrieves' but sufficient.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (getV1SvmBalances, getV1EvmTokens). Does not mention prerequisites like network selection criteria or when filtering by mint is preferable to other approaches.

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

getV1SvmTokensNativeBInspect

Returns Native metadata including supply and holder count.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "circulating_supply": 1.5,
      "program_id": "11111111111111111111111111111111",
      "decimals": "unknown_type",
      "name": "string",
      "network": "string",
      "symbol": "string",
      "holders": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that this is a read operation ('Returns'), includes error responses (400-500), and details the response structure, but lacks information on rate limits, authentication requirements, or side effects. The output schema is present, reducing the need for full behavioral description.

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

Conciseness2/5

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

The description is overly verbose, with extensive HTTP response details (200, 400, 401, 403, 404, 500) and JSON examples that clutter the core purpose. It's not front-loaded effectively, burying key information under unnecessary technical specifications.

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

Completeness4/5

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

Given the tool's simplicity (1 parameter, 100% schema coverage, output schema provided), the description is mostly complete. It covers the purpose, parameter, and response structure, though it could benefit from clearer usage guidelines and more concise presentation.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'network' fully documented in the schema. The description repeats the schema's parameter documentation verbatim without adding extra meaning, so it meets the baseline of 3 where the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Returns Native metadata including supply and holder count.' It specifies the verb ('Returns') and resource ('Native metadata'), but doesn't explicitly differentiate from sibling tools like 'getV1SvmTokens' (non-Native) or other SVM tools, though the 'Native' qualifier provides some distinction.

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

Usage Guidelines2/5

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 doesn't mention sibling tools, prerequisites, or specific contexts for usage, leaving the agent to infer based on tool names alone.

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

getV1SvmTransfersBInspect

Returns SPL token transfers with program, authority, and account information.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • signature: Filter by transaction signatureSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • mint: Filter by mint addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • source: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • destination: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • program_id: Filter by SPL token program IDSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • authority: Filter by authority addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • fee_payer: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • signer: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "source": "So11111111111111111111111111111111111111112",
      "transaction_index": 1.5,
      "compute_units_consumed": 1.5,
      "authority": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "instruction_index": 1.5,
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "value": 1.5,
      "fee": 1.5,
      "program_id": "11111111111111111111111111111111",
      "name": "unknown_type",
      "stack_height": 1.5,
      "destination": "So11111111111111111111111111111111111111112",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "network": "solana",
      "multisig_authority": [
        "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9"
      ],
      "symbol": "unknown_type",
      "signature": "string",
      "metadata": "unknown_type",
      "signer": "So11111111111111111111111111111111111111112",
      "decimals": "unknown_type",
      "uri": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
mintNoFilter by mint address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
signerNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
sourceNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
authorityNoFilter by authority address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_blockNoFilter by block number
fee_payerNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
signatureNoFilter by transaction signature<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
program_idNoFilter by SPL token program ID<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
destinationNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses 'Plan restricted' limitations on certain parameters and notes that 'Empty data array signifies end of results' for pagination. However, it lacks explicit read-only declaration, rate limit details, or data freshness guarantees.

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

Conciseness2/5

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

Severely bloated due to extensive JSON response examples and redundant response code documentation. Since the tool has a proper output schema (per context signals), including full JSON examples in the description text is wasteful. The structure is logical (summary → params → responses) but the payload is excessive.

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

Completeness4/5

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

Given the complexity (13 parameters with multiple filter types) and rich schema, the description covers all filter options and response codes. However, it lacks explanation of parameter interactions (e.g., can time filters combine with block filters?) and response pagination mechanics beyond the empty array note.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description essentially duplicates the schema content in the 'Query Parameters' section without adding semantic context beyond what's already in the inputSchema (e.g., no guidance on valid date formats beyond the schema description).

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

Purpose5/5

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

The description clearly states it 'Returns SPL token transfers with program, authority, and account information' — specific verb (Returns), specific resource (SPL token transfers), and specific scope (program/authority/account info). This effectively distinguishes it from siblings like getV1SvmSwaps or getV1EvmTransfers.

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

Usage Guidelines2/5

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

No guidance provided on when to use this tool versus alternatives (e.g., getV1SvmSwaps for DEX trades, or getV1EvmTransfers for Ethereum transfers). No mention of prerequisites, required vs optional filtering strategies, or parameter combinations.

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

getV1SvmTransfersNativeCInspect

Returns Native transfers with transaction and block data.

Query Parameters:

  • network (Required): The Graph Network ID for SVM networks https://thegraph.com/networks

  • signature: Filter by transaction signatureSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • source: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • destination: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • fee_payer: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • signer: Filter by token account addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "source": "So11111111111111111111111111111111111111112",
      "transaction_index": 1.5,
      "compute_units_consumed": 1.5,
      "instruction_index": 1.5,
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "fee_payer": "So11111111111111111111111111111111111111112",
      "value": 1.5,
      "fee": 1.5,
      "program_id": "11111111111111111111111111111111",
      "name": "unknown_type",
      "stack_height": 1.5,
      "destination": "So11111111111111111111111111111111111111112",
      "mint": "So11111111111111111111111111111111111111111",
      "network": "solana",
      "symbol": "unknown_type",
      "signature": "string",
      "signer": "So11111111111111111111111111111111111111112",
      "decimals": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
signerNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
sourceNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for SVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
end_blockNoFilter by block number
fee_payerNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
signatureNoFilter by transaction signature<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
destinationNoFilter by token account address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions plan restrictions for some parameters and pagination behavior ('Empty `data` array signifies end of results'), but lacks critical details: authentication requirements (implied by 401/403 error examples but not stated upfront), rate limits, whether it's read-only (implied by 'Returns' but not explicit), or performance characteristics. The error examples add some value but don't compensate for major gaps.

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

Conciseness3/5

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

The description is overly long due to extensive parameter repetition and full HTTP response documentation. While structured with sections, it's not front-loaded efficiently—the core purpose is stated briefly, then buried in details. The response examples and error details are excessive for a tool description, reducing conciseness. Some trimming would improve focus.

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

Completeness4/5

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

Given the tool's complexity (12 parameters, filtering capabilities) and the presence of an output schema (implied by detailed response examples), the description is reasonably complete. It covers parameters, responses, and errors, though it lacks behavioral context like authentication or rate limits. The output schema reduces the need to explain return values, but the absence of annotations leaves some gaps in safety/usage disclosure.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description repeats parameter details in the 'Query Parameters' section, adding minimal value beyond the schema. It does clarify plan restrictions and array formatting for some parameters, but this is largely redundant. Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the tool's purpose: 'Returns Native transfers with transaction and block data.' It specifies the resource (Native transfers) and includes transaction and block data context. However, it doesn't explicitly differentiate from sibling tools like 'getV1SvmTransfers' (non-Native) or other transfer-related tools, which would require a 5.

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

Usage Guidelines2/5

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 doesn't mention sibling tools (e.g., 'getV1SvmTransfers' for non-Native transfers or EVM/TVM equivalents) or clarify use cases like filtering needs. The only implied context is the 'Native' qualifier, but this is insufficient for explicit usage differentiation.

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

getV1TvmDexesBInspect

Returns all supported TVM DEXs.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "factory": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "protocol": "uniswap_v1",
      "transactions": 1.5,
      "last_activity": "string",
      "network": "tron",
      "uaw": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses plan restrictions on the limit parameter and pagination behavior, but fails to explicitly state this is a read-only operation or describe rate limiting. The extensive response documentation partially compensates but is structural rather than behavioral.

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

Conciseness2/5

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

Severely bloated with extensive JSON response examples for every HTTP status code (200, 400, 401, etc.). While the first sentence is adequately front-loaded, the massive response documentation (70%+ of text) is redundant given that output schema exists and makes the description inefficient for agent consumption.

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

Completeness4/5

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

Despite verbosity, the description is complete regarding inputs and outputs. With output schema present, the extensive response examples are redundant but not incomplete. All parameters are documented and the pagination logic is explained.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description largely duplicates schema content (network description, limit restrictions, pagination notes) without adding syntax examples or validation rules beyond what's already specified in the input schema.

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

Purpose4/5

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

The opening sentence 'Returns all supported TVM DEXs' provides a clear verb and resource. However, it fails to explicitly distinguish from sibling EVM/SVM DEX tools (getV1EvmDexes, getV1SvmDexes) or clarify that TVM here specifically means Tron Virtual Machine (supported by the 'tron' enum value).

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

Usage Guidelines2/5

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

Provides pagination guidance ('Empty data array signifies end of results') but lacks explicit when-to-use guidance versus EVM/SVM alternatives. No mention of authentication requirements despite including 401/403 response codes, and no prerequisites stated.

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

getV1TvmPoolsBInspect

Returns DEX pool metadata including tokens, fees and protocol.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • factory: Filter by factory addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • pool: Filter by pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • input_token: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • output_token: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "factory": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
      "pool": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "protocol": "uniswap_v1",
      "fee": 1.5,
      "network": "arbitrum-one"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolNoFilter by pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
factoryNoFilter by factory address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
protocolNoProtocol name
input_tokenNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
output_tokenNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, description carries the full disclosure burden. It successfully notes 'Plan restricted' limitations on several parameters and explains pagination termination ('Empty data array signifies end of results'). Includes HTTP status codes but lacks explicit read-only designation or rate limiting details beyond plan restrictions.

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

Conciseness2/5

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

Purpose is front-loaded effectively, but the description suffers from massive bloat. Extensive parameter tables and JSON response examples extensively duplicate structured schema data that is already complete. Every section does not earn its place given the high schema coverage; this is redundancy, not conciseness.

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

Completeness4/5

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

Despite verbosity, coverage is thorough for a complex 8-parameter tool. Documents all query parameters with filtering capabilities, provides detailed response schemas with pagination structures, and enumerates error codes. Sufficiently complete for agent invocation without external documentation, covering domain-specific context (DEX pools on TVM networks).

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

Parameters3/5

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

Input schema has 100% description coverage, establishing a baseline of 3. The description largely duplicates schema content but adds marginal value by clarifying the comma-separated array syntax for filters and emphasizing 'Plan restricted' constraints. Does not significantly enhance semantics beyond what the schema provides.

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

Purpose4/5

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

Clear specific purpose with verb 'Returns' and resource 'DEX pool metadata'. Details what data is included (tokens, fees, protocol). Distinguishes from OHLC sibling via 'metadata' focus, though does not explicitly mention TVM/Tron domain which is only evident in the schema enum.

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

Usage Guidelines2/5

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

No explicit guidance on when to use versus sibling alternatives like getV1TvmPoolsOhlc or getV1EvmPools. No mention of prerequisites, recommended filter combinations, or when results might be empty. Usage patterns must be inferred from parameter documentation.

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

getV1TvmPoolsOhlcAInspect

Returns OHLCV price data for liquidity pools.

OHLCV historical depth is subject to plan restrictions.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • pool (Required): Filter by pool address

  • interval: The interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "datetime": "string",
      "ticker": "string",
      "pool": "TFGDbUyP8xez44C76fin3bn3Ss6jugoUwJ",
      "transactions": 1.5,
      "low": 1.5,
      "high": 1.5,
      "volume": 1.5,
      "open": 1.5,
      "network": "tron",
      "close": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolYesFilter by pool address
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
intervalNoThe interval* for which to aggregate price data (1-minute, 5-minutes, 10-minutes, 30-minutes, hourly, 4-hours, daily or weekly).<br>*Plan restricted.1d
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

No annotations provided, so description carries full burden. Effectively discloses plan restrictions on historical depth, interval aggregation, and result limits. Documents pagination behavior ('Empty data array signifies end of results') and flexible timestamp input formats. Lacks explicit read-only safety declaration.

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

Conciseness2/5

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

Severely bloated. Includes extensive OpenAPI-style response documentation (JSON examples for 5 status codes) that belongs in the output_schema field, not the description. While structured with headers and front-loaded with the core purpose, the majority of text is wasteful repetition of HTTP response contracts.

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

Completeness4/5

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

Despite conciseness issues, content is comprehensive. Documents all query parameters, plan restrictions, pagination mechanics, and response structure. Given the presence of an output schema (per context signals), the extensive response documentation in the description is redundant but ensures completeness.

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

Parameters3/5

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

Schema description coverage is 100%, establishing baseline 3. The description duplicates schema content but does not add significant semantic layer beyond repeating 'Plan restricted' annotations already present in the schema. No additional context on parameter interactions or defaults beyond schema.

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

Purpose4/5

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

Clear verb ('Returns') and resource ('OHLCV price data for liquidity pools'). The name and description distinguish from sibling getV1TvmPools (current state) via the 'Ohlc' suffix, though the description could explicitly clarify this returns historical aggregated data versus current pool state.

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

Usage Guidelines3/5

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

Mentions 'OHLCV historical depth is subject to plan restrictions' indicating tiered access constraints. However, lacks explicit guidance on when to use this versus getV1TvmPools (current data) or versus EVM/SVM variants. Plan restriction warnings are present but buried in parameter sections.

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

getV1TvmSwapsAInspect

Returns DEX swaps events with input & output token amounts.

Address semantics: transaction_from is the onchain transaction initiator and user is the normalized user-oriented swap address. sender and recipient remain available for legacy compatibility, but new integrations should prefer user and plan for sender/recipient deprecation in a future major release.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • factory: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • pool: Filter by pool addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • transaction_from: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • user: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • sender: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • recipient: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • input_contract: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • output_contract: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • protocol: Protocol name

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "transaction_index": 1.5,
      "transaction_from": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "pool": "TFGDbUyP8xez44C76fin3bn3Ss6jugoUwJ",
      "output_amount": "string",
      "output_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "input_value": 1.5,
      "factory": "TKWJdrQkqHisa1X8HUdHEfREvTzw4pMAaY",
      "log_topic0": "string",
      "price": 1.5,
      "transaction_id": "string",
      "log_ordinal": 1.5,
      "input_amount": "string",
      "summary": "string",
      "input_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "price_inv": 1.5,
      "log_index": 1.5,
      "network": "tron",
      "output_value": 1.5,
      "recipient": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "user": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "sender": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "protocol": "uniswap_v1",
      "log_block_index": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
poolNoFilter by pool address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
userNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
senderNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
factoryNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
protocolNoProtocol name
end_blockNoFilter by block number
recipientNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
start_blockNoFilter by block number
input_contractNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
output_contractNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_fromNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries the full burden. It successfully discloses critical domain semantics (transaction_from vs user vs sender/recipient) and operational constraints ('Plan restricted' for array values). Lacks explicit mention of read-only nature and rate limits.

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

Conciseness2/5

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

Severely bloated by excessive HTTP response documentation (JSON examples for 400, 401, 403, 404, 500) that provides no value for tool invocation. Query parameters are essentially duplicated between description and schema. The core semantic guidance is buried under boilerplate.

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

Completeness4/5

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

Complete coverage of the TVM DEX swaps domain with rich parameter semantics and response structure documentation. The 'Plan restricted' annotations indicate access tiers, though the output schema examples are redundant given the structured output schema exists.

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

Parameters4/5

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

Despite 100% schema coverage (baseline 3), the description adds substantial value beyond the schema: it explains complex address field semantics, date string formats, and plan restrictions that clarify parameter intent. The semantic explanation of normalized vs legacy addresses is crucial context not present in the schema.

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

Purpose5/5

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

Opens with specific verb-resource combination: 'Returns DEX swaps events with input & output token amounts.' The 'Tvm' in the tool name and 'tron' enum in the network parameter clearly distinguish this as Tron-specific, differentiating from sibling EVM and SVM variants.

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

Usage Guidelines3/5

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

Provides explicit parameter-level guidance on address semantics ('new integrations should prefer user'), clarifying when to use user vs sender/recipient. However, lacks explicit guidance on when to choose this TVM tool over getV1EvmSwaps or getV1SvmSwaps siblings.

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

getV1TvmTokensCInspect

Provides ERC-20 token contract metadata.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • contract (Required): Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
      "total_transfers": 1.5,
      "network": "tron",
      "decimals": "unknown_type",
      "name": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
contractYesFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

With no annotations provided, the description carries the full burden. It comprehensively documents the response structure (status codes 200-500) and data shape (ISO 8601 datetime, pagination), which aids transparency. However, it omits operational details like authentication requirements, rate limits, or data freshness guarantees that are not self-evident from the response schema.

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

Conciseness2/5

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

The description is excessively verbose due to embedding full OpenAPI-style response documentation (JSON examples for six HTTP status codes, full property listings). Since context signals indicate an output schema exists, this response documentation is redundant and clutters the description. The essential purpose statement ('Provides ERC-20 token contract metadata') is front-loaded but immediately buried by technical bloat.

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

Completeness3/5

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

Despite the bloat, the description covers all parameters and response structures. However, given the complexity of distinguishing between TVM/ERC-20 tokens and native assets, and the crowded sibling space (EVM/SVM/TVM variants), it lacks contextual guidance on the specific domain (Tron/TVM) that would help an agent select this over structurally similar tools.

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

Parameters3/5

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

The input schema has 100% description coverage, establishing a baseline score of 3. The description largely duplicates the schema's content (e.g., repeating the contract address description and URL reference for networks) without adding semantic depth like format validation rules or example use cases beyond what the schema's 'example' fields already provide.

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

Purpose4/5

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

The description clearly states it 'Provides ERC-20 token contract metadata,' which specifically identifies the resource (token metadata) and the token standard (ERC-20). This implicitly distinguishes it from the sibling 'getV1TvmTokensNative' (which likely handles native TRX), though it could explicitly mention the TVM/Tron network context to differentiate from the EVM variant.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives like 'getV1EvmTokens' or 'getV1TvmTokensNative'. While it notes that array values for the contract parameter are 'Plan restricted,' this is a constraint rather than usage guidance for tool selection.

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

getV1TvmTokensNativeCInspect

Provides Native metadata.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "last_update": "string",
      "last_update_block_num": 1.5,
      "last_update_timestamp": 1.5,
      "network": "string",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior2/5

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

No annotations provided, so the description carries full burden. It lists HTTP status codes (401, 403, etc.) implying authentication is required, but does not explain what 'Native metadata' represents, pagination behavior, rate limits, or data freshness (last_update fields in schema suggest caching but are unexplained).

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

Conciseness2/5

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

While the initial sentence is terse, the description is bloated with extensive OpenAPI-style response documentation (JSON examples for all HTTP codes) that belongs in output_schema. Poorly structured with critical semantics buried after massive code blocks.

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

Completeness2/5

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

Despite having output schema and only one parameter, the description fails to explain the domain concept (what constitutes a native TVM token) or interpret the response fields (e.g., distinguishing 'last_update' vs 'last_update_block_num'). Relies entirely on schema auto-documentation.

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

Parameters3/5

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

Schema coverage is 100% (network parameter fully documented with enum and URL reference). The description contains redundant parameter documentation ('Query Parameters: network...') that adds no semantic value beyond the schema, warranting the baseline score.

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

Purpose2/5

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

The description 'Provides Native metadata' is extremely vague and tautological (restating the tool name 'getV1TvmTokensNative'). It fails to specify what 'Native' means (native currency like TRX vs. TRC-20 tokens) or distinguish from sibling getV1TvmTokens.

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

Usage Guidelines1/5

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 alternatives (e.g., getV1TvmTokens for non-native tokens), no prerequisites mentioned, and no workflow context provided despite clear sibling relationships in the server.

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

getV1TvmTransfersBInspect

Returns ERC-20 transfers with transaction and block data.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • contract: Filter by contract addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "transaction_index": 1.5,
      "contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
      "transaction_id": "daddbf0810fb73620ebb1ad3c915afd32f3cf13a267d740f27284583df97a01a",
      "value": 1.5,
      "log_ordinal": 1.5,
      "log_index": 1.5,
      "to": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "network": "tron",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
contractNoFilter by contract address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior4/5

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

With no annotations provided, the description carries full behavioral disclosure burden. It successfully documents pagination behavior ('Empty `data` array signifies end of results'), plan restriction constraints, and comprehensive response/error schemas. Minor gap: lacks explicit auth method description beyond error codes.

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

Conciseness2/5

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

The description is severely bloated with redundant information. It repeats all 11 parameter descriptions already defined in the schema and includes verbose JSON response examples. While the first sentence is front-loaded, the overall content wastes significant context window on duplicated structured data.

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

Completeness3/5

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

Given the output schema exists and parameter schemas are complete, the description adequately covers essential behavioral context (pagination, plan limits). However, it could clarify TVM-specific behavior or explicit sibling distinctions rather than duplicating parameter and response documentation.

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

Parameters3/5

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

Schema description coverage is 100%, establishing a baseline of 3. The description largely duplicates parameter documentation already present in the schema (network, contract, etc.) with added HTML formatting and 'Plan restricted' notes, adding minimal semantic value beyond the structured schema.

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

Purpose5/5

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

The first sentence 'Returns ERC-20 transfers with transaction and block data' provides a specific verb (Returns), resource (ERC-20 transfers), and scope (with transaction and block data). It effectively distinguishes from sibling getV1TvmTransfersNative by specifying ERC-20 (token standard) versus implicit native transfers.

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

Usage Guidelines2/5

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

While 'Plan restricted' annotations on several parameters hint at usage constraints, there is no explicit guidance on when to use this tool versus getV1TvmTransfersNative or the EVM/SVM variants. No prerequisites, filtering recommendations, or alternative selection logic is provided.

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

getV1TvmTransfersNativeBInspect

Returns Native transfers with transaction and block data.

Query Parameters:

  • network (Required): The Graph Network ID for TVM networks https://thegraph.com/networks

  • transaction_id: Filter by transaction hashSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • from_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • to_address: Filter by addressSingle value or array of values* (separate multiple values with ,)*Plan restricted.

  • start_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • end_time: UNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).

  • start_block: Filter by block number

  • end_block: Filter by block number

  • limit: Number of items* returned in a single request.*Plan restricted.

  • page: Page number to fetch.Empty data array signifies end of results.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

      • request_time: ISO 8601 datetime string

    • Example:

{
  "data": [
    {
      "block_num": 1.5,
      "datetime": "string",
      "timestamp": 1.5,
      "amount": "string",
      "transaction_index": 1.5,
      "transaction_id": "daddbf0810fb73620ebb1ad3c915afd32f3cf13a267d740f27284583df97a01a",
      "value": 1.5,
      "to": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "name": "unknown_type",
      "decimals": "unknown_type",
      "network": "tron",
      "symbol": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "request_time": "string",
  "duration_ms": 1.5,
  "results": 1.5
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch.<br>Empty `data` array signifies end of results.
limitNoNumber of items* returned in a single request.<br>*Plan restricted.
networkYesThe Graph Network ID for TVM networks https://thegraph.com/networks
end_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
end_blockNoFilter by block number
start_timeNoUNIX timestamp in seconds or date string (e.g. "2025-01-01T00:00:00Z", "2025-01-01", ...).
to_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
start_blockNoFilter by block number
from_addressNoFilter by address<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.
transaction_idNoFilter by transaction hash<br>Single value or array of values* (separate multiple values with `,`)<br>*Plan restricted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
resultsYes
paginationYes
statisticsYes
duration_msYes
request_timeYesISO 8601 datetime string
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It documents 'Plan restricted' limitations on certain parameters and pagination behavior ('Empty data array signifies end of results'), and includes HTTP error codes (401, 403, etc.). However, it lacks explicit mention of authentication requirements, rate limits, or whether the data is real-time or cached.

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

Conciseness2/5

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

The description is excessively verbose, embedding extensive JSON response examples and full HTTP status code documentation. While thorough, this reference-manual approach is poorly structured for an AI agent making rapid tool selection decisions, with critical information buried in lengthy technical documentation.

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

Completeness4/5

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

Despite verbosity, the description is contextually complete: it documents all 10 parameters, includes comprehensive response schemas (including error responses), and mentions plan restrictions. Given the lack of separate output schema field in the MCP definition, the embedded response documentation ensures completeness.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description essentially duplicates the schema documentation for parameters without adding additional semantic context (e.g., explaining what constitutes a valid TVM address format or the implications of the network enum value 'tron').

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

Purpose4/5

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

The description clearly states it 'Returns Native transfers with transaction and block data,' providing a specific verb and resource. However, it does not distinguish when to use this tool versus the sibling getV1TvmTransfers (likely for token transfers), leaving the 'Native' distinction unexplained.

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

Usage Guidelines2/5

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 getV1TvmTransfers or the EVM/SVM variants. The description lists parameters but provides no decision criteria, prerequisites (like authentication requirements), or use-case scenarios.

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

getV1VersionBInspect

Returns API version, build date, and commit information.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "version": "string",
  "date": "string",
  "commit": "string"
}
  • 400: Client side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 401: Authentication failed

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 403: Forbidden

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 404: Not found

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "authentication_failed",
  "message": "string"
}
  • 500: Server side error

    • Content-Type: application/json

    • Response Properties:

    • Example:

{
  "status": "unknown_type",
  "code": "bad_database_response",
  "message": "string"
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateYes
commitYes
versionYes
Behavior3/5

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

Without annotations, the description carries the full burden of behavioral disclosure. It documents the successful response structure (version, date, commit) and error codes (400-500), implicitly indicating authentication is required (401/403). However, it lacks explicit statements about rate limits, idempotency, or whether this is a safe read-only operation.

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

Conciseness2/5

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

While the first sentence is appropriately concise, approximately 80% of the description consists of verbose HTTP response documentation (status codes 200-500 with JSON examples) that is inappropriate for an MCP tool description. AI agents do not need HTTP-level details in the description field; this information belongs in structured output schemas or MCP protocol handling.

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

Completeness3/5

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

For a simple metadata endpoint with no parameters, the description adequately explains what data is returned. However, given the lack of annotations and output schema, the description should prioritize clarifying operational context over HTTP status documentation. It misses opportunity to explain relationship to getV1Health or typical polling intervals.

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

Parameters4/5

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

The input schema has zero parameters, establishing a baseline of 4 per evaluation rules. The description appropriately does not invent parameter documentation, though since there are no parameters, there is no additional semantic value to add beyond the empty schema definition.

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

Purpose5/5

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

The first sentence clearly states the tool returns 'API version, build date, and commit information' using a specific verb and resource. It effectively distinguishes from siblings (all blockchain data queries like balances/transfers) by identifying this as a metadata/healthcheck endpoint.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives like getV1Health. While it is somewhat self-evident for a version endpoint, there is no mention of typical use cases such as API compatibility checks or health verification before other operations.

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

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources