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

69 tools
getLlmsTextAInspect

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

Responses:

  • 200 (Success): Successful Response

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

    • Example:

"# Pinax API\n\n> Real-time Token API, prediction market, and perp exchange data.\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?

No annotations are provided, so the description carries the full burden. It describes the response format and content type, but does not explicitly state that the action is read-only, safe, or that it may have rate limits. The example is helpful but insufficient for full transparency.

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

Conciseness5/5

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

The description is brief and front-loaded with the purpose. It includes an example and response details without extraneous text.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, clear purpose, and output schema described via response example), the description is complete. It tells the agent what the tool does and what to expect in return.

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 tool has zero parameters, so baseline 4 is appropriate. The description does not need to add param info, and the schema coverage is 100% with no params.

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 public llms.txt documentation index for AI tools discovering Pinax API', which is a specific verb+resource that distinguishes it from siblings like getOpenapiSpec and getSkillsMarkdown.

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 tool versus alternatives such as getOpenapiSpec or getSkillsMarkdown. The description does not mention usage context, prerequisites, or exclusions.

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 Pinax 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?

The description states it returns a 'public' specification and includes an example output, making behavior clear. No annotations exist, so the description carries full burden; it adequately covers the read-only, no-side-effect nature.

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?

A single sentence plus a relevant example. No wasted words; the description is front-loaded and well-structured.

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 tool, the description is complete: it specifies what is returned, provides an example, and the context is sufficient for an agent to invoke 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?

With zero parameters, the schema coverage is 100%, so baseline is 4. The description correctly omits parameter details as none are needed.

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 Pinax API', a specific verb and resource. It distinguishes from sibling tools which return specific data metrics (e.g., balances, transfers) rather than the API specification itself.

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 guidance on when to use this tool versus alternatives is provided. However, the unique purpose (returning the API spec) implies its use case; still, adding explicit context would improve clarity.

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 Pinax API.

Responses:

  • 200 (Success): Successful Response

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

    • Example:

"---\nname: pinax-api\ndescription: Query Pinax API datasets including Token API, prediction markets, and perp exchange data.\n---\n\n# Pinax API\n\n> Quick reference for AI agents using Pinax API. The authoritative machine-readable contract is `GET /openapi`.\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?

With no annotations, the description carries the full behavioral transparency burden. It discloses the tool is public, returns markdown with 200 success, and provides an example. However, it omits any error responses or potential issues, and does not mention if authentication or rate limits apply.

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, with a clear first sentence stating purpose. The response details and example add value but slightly increase length; overall it is appropriately sized and front-loaded.

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

Completeness4/5

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

Given the tool's simplicity (no parameters) and the presence of an output schema, the description is fairly complete. It states the return format, provides an example, and indicates the tool is public. It lacks any error codes or prerequisites, but these are less critical for a static resource.

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 tool has zero parameters, and schema coverage is 100% (trivially). The description correctly adds no parameter-specific info, meeting the baseline of 4 for no-parameter tools.

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 'the public Markdown reference for AI agents integrating with Pinax API', specifying the verb ('returns') and resource ('public Markdown reference'). This distinguishes it from sibling tools like getOpenapiSpec (returns OpenAPI spec) and data retrieval 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?

The description implies usage for AI agents needing integration reference but does not explicitly state when to use or avoid this tool, nor does it mention alternatives like getOpenapiSpec. Context is implied but no exclusionary guidance is provided.

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,
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "name": "unknown_type",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "close": 1.5,
      "decimals": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "low": 1.5,
      "name": "unknown_type",
      "open": 1.5,
      "high": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "close": 1.5,
      "decimals": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "low": 1.5,
      "name": "unknown_type",
      "open": 1.5,
      "high": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "name": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "last_activity": "string",
      "network": "arbitrum-one",
      "transactions": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "is_contract": "unknown_type",
      "name": "unknown_type",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "is_contract": "unknown_type",
      "name": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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": "unknown_type",
      "contract_creator": "unknown_type",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "symbol": "unknown_type",
      "total_supply": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "total_transfers": 1.5,
      "total_unique_supply": 1.5,
      "owners": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "percentage": 1.5,
      "unique_tokens": 1.5,
      "network": "arbitrum-one",
      "quantity": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "description": "unknown_type",
      "image": "unknown_type",
      "uri": "unknown_type",
      "network": "arbitrum-one",
      "attributes": [
        {
          "trait_type": "string",
          "value": "string",
          "display_type": "string"
        }
      ],
      "name": "unknown_type",
      "token_standard": "ERC721"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "name": "unknown_type",
      "token_standard": "ERC721"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "sale_amount": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "token_id": "5712",
      "name": "unknown_type",
      "recipient": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "sale_currency": "string",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "offerer": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "@type": "BURN",
      "symbol": "unknown_type",
      "transfer_type": "string",
      "amount": "string",
      "token_id": "5712",
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "network": "arbitrum-one",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
      "token_standard": "ERC721"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "network": "arbitrum-one",
      "fee": 1.5,
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "transactions": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "close": 1.5,
      "volume": 1.5,
      "network": "arbitrum-one",
      "transactions": 1.5,
      "open": 1.5,
      "low": 1.5,
      "high": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "log_index": 1.5,
      "price_inv": 1.5,
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "sender": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "transaction_from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "factory": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
      "log_topic0": "string",
      "input_amount": "string",
      "recipient": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "summary": "string",
      "caller": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "network": "arbitrum-one",
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "log_block_index": 1.5,
      "pool": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "user": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "input_value": 1.5,
      "transaction_index": 1.5,
      "output_amount": "string",
      "output_value": 1.5,
      "call_index": "unknown_type",
      "price": 1.5,
      "log_ordinal": 1.5,
      "transaction_id": "string",
      "protocol": "uniswap_v1"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "circulating_supply": 1.5,
      "holders": 1.5,
      "symbol": "unknown_type",
      "total_supply": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type",
      "total_transfers": 1.5,
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "circulating_supply": 1.5,
      "holders": 1.5,
      "symbol": "unknown_type",
      "total_supply": 1.5,
      "network": "arbitrum-one",
      "name": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca",
      "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "arbitrum-one",
      "amount": "string",
      "to": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "name": "unknown_type",
      "transaction_id": "0xf6374799c227c9db38ff5ac1d5bebe8b607a1de1238cd861ebd1053ec07305ca"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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?

No annotations provided, so description carries full burden. It discloses it is public, no auth, and describes the output structure (list of DEXs with activity stats). It also explains the Hyperliquid context (core perps and builder-deployed DEXs), providing clear behavioral traits.

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 front-loaded with purpose and usage, but includes a lengthy response schema with examples that may be partially redundant given the output schema exists. Still, it earns its place by providing concrete detail, but could be slightly more concise.

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

Completeness5/5

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

Given zero parameters and an existing output schema, the description provides complete context: usage guidance, alternative tools, business logic (core vs builder DEXs), and auth requirement. No gaps.

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

Parameters5/5

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

Input schema has zero parameters, so schema coverage is 100% trivially. The description compensates by explaining the output and usage, adding meaning beyond the schema. No parameter documentation needed.

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 perpetuals DEXs and spot with 24h activity stats. It specifies the verb ('Returns') and resource, and distinguishes from siblings by explaining how it provides valid dex filter values for other endpoints.

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 endpoint (to discover valid dex filter values for venue-scoped queries) and when to use an alternative (platform-wide totals over arbitrary intervals via /v1/hyperliquid/platform). Also notes it is public with no auth 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 discovery filters across spot and perp markets: ?base_token=HYPE returns every market with HYPE on the base side. 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: Token symbol (e.g. HYPE, USDC, BTC). Use to discover markets 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: Token symbol (e.g. HYPE, USDC, BTC). Use to discover markets 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",
      "trades_24h": 1,
      "funding_snapshot_time": "unknown_type",
      "open_interest": "unknown_type",
      "price_24h": "unknown_type",
      "sell_volume_24h": 1.5,
      "price_24h_change": 1.5,
      "volume_24h": 1.5,
      "unique_users_24h": 1,
      "price": 1.5,
      "quote_token": "unknown_type",
      "funding_rate": "unknown_type",
      "base_token": "unknown_type",
      "buy_volume_24h": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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_tokenNoToken symbol (e.g. `HYPE`, `USDC`, `BTC`). Use to discover markets 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_tokenNoToken symbol (e.g. `HYPE`, `USDC`, `BTC`). Use to discover markets 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?

With no annotations, description carries full burden. It details return fields, filtering behavior, pagination (page, limit), plan restrictions, and error response codes. Does not mention authentication or rate limits explicitly, but covers behavioral traits adequately.

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?

Description is well-structured with sections for description, parameters, and responses. However, it repeats parameter descriptions that are already in the schema, making it slightly verbose. Still readable and front-loaded with key information.

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 6 parameters and an output schema, description is comprehensive. Covers output fields, filtering, pagination, error responses, and plan restrictions. Output schema exists so return values are fully documented. Minor lack of calculation details for derived fields like funding_rate.

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). Description adds significant meaning beyond schema: explains additive filtering, empty results for mismatched combos, usage of coin as identifier for other endpoints, and plan restrictions. Example values and detailed context enhance 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?

Clearly states it returns the latest market snapshot with specific fields like price, volume, open interest. Verb 'Returns' and resource 'markets' are clear, but does not explicitly differentiate from sibling tools like getV1HyperliquidMarketsActivity or getV1HyperliquidMarketsLiquidations.

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?

Provides explicit guidance on filtering: filters compose additively, mismatched combos return empty, omit all for full listing sorted by 24h volume. Explains use of base_token and quote_token as discovery filters. Lacks explicit 'when not to use' but context is sufficient.

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",
      "closed_pnl": 1.5,
      "side": "string",
      "direction": "string",
      "coin": "string",
      "twap_id": 1,
      "size": 1.5,
      "crossed": true,
      "dex": "string",
      "fee_token": "string",
      "start_position": "string",
      "market_name": "string",
      "notional": 1.5,
      "client_order_id": "string",
      "user": "string",
      "price": 1.5,
      "order_id": 1,
      "transaction_id": 1,
      "fee": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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 are provided, so the description carries full burden. It discloses default 24-hour time range, empty results for mismatched filters, field semantics (e.g., negative fees for maker rebates), and pagination end signal. Minor omissions: no mention of authentication or rate limits, but comprehensive overall.

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 opening, parameter details, and response examples. However, it repeats schema parameter descriptions verbatim, making it longer than necessary. Still front-loaded 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?

With 7 parameters, an output schema, and no annotations, the description fully covers filtering constraints, time defaults, response fields, error examples, and links to related tools, leaving no significant gaps.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds significant value with examples (e.g., coin prefix rules, DEX identifier list) and contextual details (e.g., array syntax, plan restrictions) beyond schema field descriptions.

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

Purpose5/5

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

The description clearly states the tool returns a chronological fill feed with filters, and distinguishes it from the balance-changing events endpoint, ensuring no confusion with sibling tools.

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

Usage Guidelines5/5

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

Explicitly states that at least one of `coin`, `dex`, or `user` is required, explains additive filtering, and directs to an alternative endpoint for balance-changing events, providing clear when-to-use guidance.

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",
      "liquidation_kind": "string",
      "market_name": "string",
      "liquidation_method": "string",
      "avg_fill_price": 1.5,
      "notional": 1.5,
      "liquidated_user": "string",
      "total_size": 1.5,
      "mark_price": 1.5,
      "total_fees": 1.5,
      "dex": "string",
      "direction": "string",
      "fills": 1,
      "coin": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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
Behavior5/5

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

With no annotations, the description carries full burden and discloses many behavioral details: aggregation of fills, exclusion of counterparty, field meanings, filtering, sorting, pagination, and response status codes. It also explains parameter validation and plan restrictions, providing a comprehensive view.

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 opening, parameter list, and response details. However, it is somewhat verbose, with some parameter descriptions repeated from the schema. Still, it is organized and easy to follow.

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 8 parameters and an output schema, the description covers input and output adequately. It explains pagination (empty data array signals end), plan restrictions, and filter composition. Minor gaps: no rate limits or authentication details, but overall complete enough.

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%), but the description adds value by explaining naming conventions for coin (e.g., core perps no prefix, spot pairs @N) and dex (calling live set endpoint). This goes beyond the schema's parameter descriptions, though some repetition exists.

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 from multiple fills, and excludes counterparty side. It specifies the verb 'Returns' and the resource 'liquidation events', distinguishing it from sibling tools like getV1HyperliquidMarketsLiquidationsOhlc which provides OHLC 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 explains filtering by coin, dex, liquidated_user, and sorting options, and notes that filters compose additively and default sort is by notional. It does not explicitly state when not to use this tool or mention alternatives like the OHLC endpoint, but the provided context is sufficient for most use cases.

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",
      "open_long_volume": 1.5,
      "gross_volume": 1.5,
      "total_fees": 1.5,
      "buys": 1,
      "unique_liquidators": 1,
      "net_volume": 1.5,
      "mark_price_low": 1.5,
      "dex": "string",
      "mark_price_close": 1.5,
      "unique_liquidated": 1,
      "high": 1.5,
      "mark_price_high": 1.5,
      "mark_price_open": 1.5,
      "sells": 1,
      "open": 1.5,
      "sell_volume": 1.5,
      "open_short_volume": 1.5,
      "close": 1.5,
      "buy_volume": 1.5,
      "close_long_volume": 1.5,
      "interval_min": 1,
      "close_short_volume": 1.5,
      "transactions": 1,
      "low": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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 bears full burden. It describes the data returned and parameter constraints but does not disclose behavioral traits such as rate limits, authentication requirements, or the nature of 'plan restricted' limits. The safety profile (read-only vs destructive) is implied but not stated.

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 sections for purpose, parameters, and responses. It is front-loaded with the core purpose. However, it is somewhat lengthy due to detailed parameter descriptions and example JSON, which could be considered slightly verbose for a tool description.

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 (7 parameters, output schema present), the description covers all necessary aspects: purpose, parameter details, response format with examples, and multiple status codes. The presence of an output schema reduces the need to explain return values, and the description adds valuable context like plan restrictions.

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%, giving a baseline of 3. The description adds significant meaning beyond the schema, e.g., explaining coin identifier prefixes ('Core perps have no prefix...'), dex values with a live endpoint reference, and clarifying plan restrictions. This provides actionable 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 the tool returns 'liquidation-only OHLCV candles' and distinguishes itself from the sibling endpoint '/v1/hyperliquid/markets/ohlc' which is for all-fill candles. The verb 'Returns' combined with specific resource 'liquidation-only OHLCV candles' and added mark-price OHLC makes the purpose precise.

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

Usage Guidelines4/5

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

The description explicitly references an alternative endpoint for all-fill candles ('For all-fill candles, use /v1/hyperliquid/markets/ohlc'), guiding the agent on when to use this tool vs a sibling. It doesn't explicitly state 'when not to use', but the context is clear.

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",
      "open_long_volume": 1.5,
      "gross_volume": 1.5,
      "total_fees": 1.5,
      "buys": 1,
      "net_volume": 1.5,
      "dex": "string",
      "high": 1.5,
      "sells": 1,
      "unique_users": 1,
      "open": 1.5,
      "sell_volume": 1.5,
      "open_short_volume": 1.5,
      "close": 1.5,
      "buy_volume": 1.5,
      "close_long_volume": 1.5,
      "interval_min": 1,
      "close_short_volume": 1.5,
      "transactions": 1,
      "low": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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
Behavior4/5

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

No annotations are provided, so the description carries full burden. It explains that OHLCV is derived from regular trade fills, details volume breakdown by side and directional intent, and notes spot-market behavior. It mentions plan restrictions on interval and limit. It does not explicitly state read-only behavior or authentication requirements, but the level of detail is high.

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 long but well-structured: purpose paragraph, alternative note, detailed parameter list, response schema, and examples. It is front-loaded with key information. Every section adds necessary detail for a complex tool with 7 parameters, so it is appropriately concise despite length.

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 presence of an output schema (with a full example), the description does not need to explain return values. It covers tool purpose, parameter semantics, volume breakdown, plan restrictions, and links to related endpoints. It is comprehensive for the tool's complexity.

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

Parameters5/5

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

The input schema has 100% description coverage, and the description adds significant value: explains coin naming conventions (core perps, spot @N, builder DEX prefix), lists interval options with defaults, and clarifies pagination. The parameter descriptions in the narrative are richer and more helpful than the schema alone.

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 OHLCV candles for a single coin and interval from regular trade fills. It distinguishes from liquidation-only candles by naming the sibling endpoint `/v1/hyperliquid/markets/liquidations/ohlc`, providing specificity and differentiation.

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

Usage Guidelines4/5

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

The description explicitly tells the agent when to use the alternative tool for liquidation candles and explains volume breakdown nuances. It references `/v1/hyperliquid/dexes` for available DEX identifiers. However, it does not provide comprehensive when-to-use or when-not-to-use advice beyond the one alternative.

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",
      "open_interest": 1.5,
      "long_positions": 1,
      "interval_min": 1,
      "short_size": 1.5,
      "positive_funding": 1.5,
      "long_size": 1.5,
      "dex": "string",
      "short_positions": 1,
      "negative_funding": 1.5,
      "net_position": 1.5,
      "total_funding": 1.5,
      "funding_rate": 1.5,
      "funding_events": 1
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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?

With no annotations, the description carries full burden. It explains that the tool returns historical snapshots, defines 'open_interest' as 'sum of absolute signed position sizes across all users,' and lists all fields. It also covers pagination and parameter behavior. Could be more explicit about read-only nature, but the context 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.

Conciseness4/5

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

The description is well-structured: it starts with a clear purpose sentence, then describes response fields, then lists query parameters with examples. It is longer but every sentence adds value, and the front-loaded structure aids quick understanding.

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 (7 parameters, detailed response schema), the description is comprehensive. It covers all parameters, response structure, error codes, and provides examples. It lacks explicit authentication or rate-limit info, but those are not critical for a data 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?

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the meaning of fields (e.g., open_interest calculation) and providing examples for coin identifiers (e.g., 'BTC' vs '@107' vs 'xyz:SILVER'). This goes slightly beyond the schema's built-in 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 it returns 'historical open-interest and funding-rate time series for a coin' and specifies it is useful for 'detecting crowded sides, funding pressure, and position flushes.' This specific verb+resource combination distinguishes it from sibling tools like getV1HyperliquidMarkets (general market info) and getV1HyperliquidMarketsActivity.

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 context on when to use the tool (detecting crowded sides, funding pressure) and explains the query parameters in detail. However, it does not explicitly mention when not to use it or compare it to alternatives like getV1HyperliquidMarkets, which could provide similar data without the OI/funding focus.

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,
      "active_coins": 1,
      "buy_volume": 1.5,
      "liquidations_count": 1,
      "liquidations_volume": 1.5,
      "total_fees": 1.5,
      "buys": 1,
      "sells": 1,
      "transactions": 1,
      "unique_liquidated_users": 1,
      "sell_volume": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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?

No annotations are provided, so the description carries full burden. It details the return structure (trade volume split by side, trade/counterparty counts, distinct active coins, total fees, liquidation data) and pagination behavior ('Empty data array signifies end of results'). However, it does not explicitly mention readonly hint, auth requirements, or rate limits, but the GET verb implies readonly.

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 summary at the top, followed by usage guidelines, a parameter table, and response examples. It is front-loaded. However, it repeats parameter descriptions that are already in the schema, making it slightly longer than necessary. It earns high marks for structure and readability.

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, output schema provided), the description covers the return structure via an example and response properties, pagination, and error responses. It mentions plan restrictions. However, it does not explain the statistics or pagination fields in detail, but the output schema covers those. Overall, it is quite 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?

All 5 parameters are described in the schema with 100% coverage. The description repeats these parameter descriptions, adding minimal extra value beyond the schema. It does note 'Plan restricted' for interval and limit, which adds slight context. Overall, the description does not significantly enhance understanding beyond what the schema 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 description clearly states that the tool returns a platform-wide time series aggregating all coins and DEXs into one row per timestamp. It also explicitly distinguishes itself from sibling tools by mentioning that per-coin OHLCV is on '/v1/hyperliquid/markets/ohlc' and per-DEX on '/v1/hyperliquid/dexes', which provides 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.' It also names alternative endpoints for per-coin and per-DEX data, giving clear context for when to use this tool vs. alternatives.

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",
      "total_volume": 1.5,
      "interval": "unknown_type",
      "first_trade": "string",
      "realized_pnl": 1.5,
      "total_fees": 1.5,
      "buys": 1,
      "volume_sold": 1.5,
      "liquidation_fills": 1,
      "transactions": 1,
      "sells": 1,
      "coins_traded": 1,
      "volume_bought": 1.5,
      "last_trade": "string",
      "total_funding": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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?

No annotations are provided, so the description carries full responsibility. It discloses aggregation windows via `interval`, hourly data refresh, pagination behavior, treatment of vault accounts as normal, and the meaning of negative fees (maker rebates). This is highly 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 well-structured, starting with return values, then usage modes, filters, intervals, vaults, and parameter details. It is somewhat long but every sentence adds value, and the structure is logical.

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 7 parameters with high schema coverage and an output schema, the description covers all major aspects: return fields, modes, filters, pagination, error responses, and even cross-references another vault endpoint. No significant 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 86%, and the description adds significant value beyond the schema: it explains the two usage modes based on `user`, composition of `coin` and `dex` filters, and details on `sort_by` options. While some parameter descriptions overlap with schema, the description provides context missing from schema alone.

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 trading aggregates per user, listing specific metrics (fill count, volume, fees, etc.). It uniquely identifies the resource (Hyperliquid users) and distinguishes from sibling tools by focusing on per-user aggregates, not market 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 two modes (leaderboard vs profile) by whether `user` is provided, explains additive filtering for `coin` and `dex`, and notes behavior for mismatched filters. It does not explicitly state when not to use this tool, but the context is clear enough.

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",
      "event_type": "bridge_deposit",
      "notes": "string",
      "token": "string",
      "amount": 1.5,
      "event_index": 1,
      "counterparty": "string",
      "user": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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 are present, so the description carries the full burden. It discloses the chronological order, event types, response structure with example, and error codes. However, it does not explicitly state that the tool is read-only or non-destructive, which is typical for such a GET endpoint. The transparency is high but lacks an explicit safety statement.

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 quite lengthy and includes parameter descriptions that largely duplicate the schema. While well-structured with headings and code blocks, it could be more concise by removing redundant parameter details. It is not excessively wordy but could be tightened.

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 6 parameters and an output schema, the description covers purpose, parameter usage, response structure with examples, and alternatives. It lacks explanation of 'Plan restricted' and some statistics fields, but overall it provides sufficient context for an AI 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?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining usage nuances: e.g., event_types are comma-separated, default time range is 30 days, and how to use start_time/end_time for older data. These details go beyond the schema and provide practical guidance.

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 chronological feed of balance-changing events for a user, listing specific event types. It distinguishes itself from the sibling tool `/v1/hyperliquid/markets/activity` by noting that for trade fills, that other tool should be used. This makes the purpose clear and uniquely identifiable.

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 clear when-to-use guidance by explicitly stating the alternative for trade fills. It also explains how to filter by event_types and how to query older data using start_time and end_time, with default behavior for missing time range. This provides a comprehensive usage context.

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",
      "last_update": "string",
      "position_size": 1.5,
      "dex": "string",
      "funding_rate": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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 that positions are reconstructed from funding snapshots, includes a caveat about missing positions between snapshots, and explains pagination behavior. No annotations are provided, so the description carries the burden. However, it does not mention authentication, rate limits, or cost implications.

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, using bullet points and code blocks. It is front-loaded with the core purpose, but some redundancy with the schema exists, making it slightly longer than necessary.

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 complexity (5 parameters, existing output schema), the description is fully complete: it explains return format with an example, covers all parameter details, provides caveats, and lists possible error responses. No gaps are evident.

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 adds significant value by explaining coin identifier formats (core perps, spot @N, builder DEX prefixes), dex identifiers, plan restrictions, and page/limit defaults with end-of-results indication. This goes beyond the schema alone.

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 current signed position per coin for a user, reconstructed from funding snapshots, with interpretation of position_size sign. It differentiates from siblings by specifying its focus on positions, not just user activity or other aspects.

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 filtering options (by coin or dex) and references another endpoint for DEX list, but does not provide explicit when-to-use or when-not-to-use guidance compared to sibling tools like getV1HyperliquidUsers or getV1HyperliquidUsersActivity.

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",
      "lifetime_leader_commissions": 1.5,
      "create_fee": 1.5,
      "initial_deposit": 1.5,
      "deposit_count": 1,
      "depositor_count": 1,
      "last_activity_at": "unknown_type",
      "lifetime_deposits": 1.5,
      "lifetime_distributions": 1.5,
      "withdrawal_count": 1,
      "lifetime_withdrawals": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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
Behavior5/5

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

Discloses important behavioral traits such as null values for pre-cutover vaults, plan restrictions on parameters, and response structure. Also implies authentication via error examples.

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 parameters and responses, but includes verbose example JSON that could be trimmed. First sentence effectively states purpose.

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

Completeness5/5

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

Covers multiple response codes, error examples, null behavior, and relationships to other tools. Output schema exists but description still adds value. Complete for a vault summary 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?

Description adds some value beyond schema (e.g., plan restrictions, comma-separation hint for vault parameter) but sort_by parameter lacks description. Coverage is 75%, so baseline 3 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 vault summaries with specific fields like leader, lifetime flow totals, etc. It also distinguishes sibling tools by mentioning where to find trading PnL and per-depositor breakdowns.

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 versus alternatives (e.g., for trading PnL use /v1/hyperliquid/users, for depositor breakdowns use /v1/hyperliquid/vaults/depositors). Also describes data cutover behavior.

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,
      "last_activity_at": "string",
      "withdrawal_count": 1,
      "distributions_received": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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 describes the output fields, error responses, and mentions plan restrictions for some parameters, implying rate limits. It does not explicitly state it is read-only, but the context (no side effects mentioned) and error codes (401, 403) suggest it is a query endpoint.

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 lengthy and includes a structured listing of parameters and responses. While well-organized, it could be more concise by reducing repetition (e.g., error examples are verbose). The first sentence is efficient, but the overall text is dense.

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?

The tool description covers what it returns, pagination, error conditions, and references the vault-level summary. The output schema is provided via the example. The only gap is the sort_by parameter lacking a description, but otherwise it is comprehensive.

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 75%: vault, page, and limit have descriptions, but sort_by has no description in either the schema or the tool description (explicitly labeled 'No description'). The description for vault adds formatting details beyond the schema, but overall, the parameter semantics are adequate but not exceptional.

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 it returns the per-depositor breakdown for a single vault, listing specific fields. It distinguishes itself from the vault-level summary endpoint (getV1HyperliquidVaults) by referencing it, making the purpose clear and specific.

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?

It mentions when to use this endpoint vs. the vault-level summary. However, it does not provide guidance on when not to use it or how it relates to the many other sibling tools (e.g., other Hyperliquid endpoints). The pagination and sort_by parameters are explained, but use cases for sort_by are not detailed.

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",
      "caip2Id": "string",
      "indexed_to": [
        {
          "category": "string",
          "version": "string",
          "block_num": 1.5,
          "timestamp": 1.5,
          "datetime": "string"
        }
      ],
      "networkType": "string",
      "aliases": [
        "string"
      ],
      "icon": {
        "web3Icons": {
          "name": "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",
      "end_date": "string",
      "volume": 1.5,
      "start_date": "string",
      "description": "string",
      "neg_risk": true,
      "event_title": "unknown_type",
      "fees_enabled": true,
      "question": "string",
      "outcomes": [
        {
          "label": "string",
          "token_id": "string"
        }
      ],
      "closed": true,
      "accepting_orders": true
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "unknown_type",
        "outcome_label": "unknown_type",
        "closed": true
      },
      "fee_value": 1.5,
      "value": 1.5,
      "fee_amount": "string",
      "tx_hash": "string",
      "amount": "string",
      "user": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "outcome_label": "unknown_type",
        "closed": true
      },
      "close": 1.5,
      "volume": 1.5,
      "unique_takers": 1.5,
      "effective_fee_rate": 1.5,
      "fee_count": 1.5,
      "trades": 1.5,
      "total_fees": 1.5,
      "buys": 1.5,
      "sells": 1.5,
      "net_fees": 1.5,
      "total_refunds": 1.5,
      "effective_fee_rate_gross": 1.5,
      "unique_makers": 1.5,
      "low": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "market": {
        "condition_id": "string",
        "market_slug": "unknown_type",
        "token_id": null,
        "outcome_label": null,
        "closed": true
      },
      "split_count": 1.5,
      "unique_stakeholders": 1.5,
      "merge_count": 1.5,
      "transactions": 1.5,
      "merge_amount": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "current_price": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "outcome_label": "unknown_type",
        "closed": true
      },
      "position_value": 1.5,
      "pnl_pct": 1.5,
      "active": true,
      "realized_pnl": 1.5,
      "buys": 1.5,
      "sells": 1.5,
      "avg_price": 1.5,
      "transactions": 1.5,
      "unrealized_pnl": 1.5,
      "net_position": 1.5,
      "total_pnl": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "net_open_interest": 1.5,
      "trades": 1.5,
      "total_fees": 1.5,
      "buys": 1.5,
      "oi_transactions": 1.5,
      "merge_amount": 1.5,
      "effective_fee_rate": 1.5,
      "fee_count": 1.5,
      "merge_count": 1.5,
      "sells": 1.5,
      "net_fees": 1.5,
      "effective_fee_rate_gross": 1.5,
      "sell_volume": 1.5,
      "split_count": 1.5,
      "total_refunds": 1.5,
      "split_amount": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "total_volume": 1.5,
      "first_trade": "string",
      "realized_pnl": 1.5,
      "volume_sold": 1.5,
      "transactions": 1.5,
      "unrealized_pnl": 1.5,
      "volume_bought": 1.5,
      "total_pnl": 1.5,
      "last_trade": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "current_price": 1.5,
      "market": {
        "condition_id": "unknown_type",
        "market_slug": "unknown_type",
        "token_id": "string",
        "outcome_label": "unknown_type",
        "closed": true
      },
      "position_value": 1.5,
      "pnl_pct": 1.5,
      "active": true,
      "realized_pnl": 1.5,
      "buys": 1.5,
      "sells": 1.5,
      "avg_price": 1.5,
      "transactions": 1.5,
      "unrealized_pnl": 1.5,
      "net_position": 1.5,
      "total_pnl": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "program_id": "11111111111111111111111111111111",
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "value": 1.5,
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "network": "solana",
      "amount": "string",
      "name": "unknown_type",
      "token_account": "string",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "address": "So11111111111111111111111111111111111111112",
      "decimals": "unknown_type",
      "program_id": "11111111111111111111111111111111",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "solana",
      "amount": "string",
      "name": "unknown_type",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "amm_name": "string",
      "is_aggregator": true,
      "transactions": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": 1.5,
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "value": 1.5,
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "network": "solana",
      "amount": "string",
      "name": "unknown_type",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "token_account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": 1.5,
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "solana",
      "amount": "string",
      "name": "unknown_type",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "token_account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "owner": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "is_closed": true,
      "network": "solana",
      "account": "string"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "output_decimals": "unknown_type",
      "input_decimals": "unknown_type",
      "amm_name": "string",
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "network": "solana",
      "input_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "transactions": 1.5,
      "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "close": 1.5,
      "volume": 1.5,
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "token1": "string",
      "transactions": 1.5,
      "high": 1.5,
      "open": 1.5,
      "token0": "string",
      "uaw": 1.5,
      "low": 1.5,
      "token1_decimals": 1.5,
      "token0_decimals": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "input_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "protocol": "jupiter_v4",
      "input_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "instruction_index": 1.5,
      "input_amount": "string",
      "amm": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "summary": "string",
      "signer": "So11111111111111111111111111111111111111112",
      "amm_pool": "AmmpSnW5xVeKHTAU9fMjyKEMPgrzmUj3ah5vgvHhAB5J",
      "network": "solana",
      "output_token": {
        "address": "unknown_type",
        "symbol": "unknown_type",
        "decimals": "unknown_type"
      },
      "stack_height": 1.5,
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "output_mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "user": "So11111111111111111111111111111111111111112",
      "input_value": 1.5,
      "transaction_index": 1.5,
      "output_amount": "string",
      "output_value": 1.5,
      "program_name": "string",
      "compute_units_consumed": 1.5,
      "fee_payer": "So11111111111111111111111111111111111111112",
      "signature": "5pdoVcSiSBr3LMAijdRYKrL5RoLFjLgHxHbZ34dUBVubnsQt3q1v48LuPazebsSiBVuSbSTyJdzf3G9jqqn8o6jA",
      "fee": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "circulating_supply": 1.5,
      "program_id": "11111111111111111111111111111111",
      "holders": 1.5,
      "uri": "unknown_type",
      "symbol": "unknown_type",
      "network": "string",
      "name": "unknown_type",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "circulating_supply": 1.5,
      "program_id": "11111111111111111111111111111111",
      "holders": 1.5,
      "symbol": "string",
      "network": "string",
      "name": "string",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "source": "So11111111111111111111111111111111111111112",
      "decimals": "unknown_type",
      "mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn",
      "multisig_authority": [
        "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9"
      ],
      "program_id": "11111111111111111111111111111111",
      "value": 1.5,
      "instruction_index": 1.5,
      "destination": "So11111111111111111111111111111111111111112",
      "symbol": "unknown_type",
      "uri": "unknown_type",
      "authority": "GXYBNgyYKbSLr938VJCpmGLCUaAHWsncTi7jDoQSdFR9",
      "signer": "So11111111111111111111111111111111111111112",
      "network": "solana",
      "metadata": "unknown_type",
      "amount": "string",
      "stack_height": 1.5,
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "transaction_index": 1.5,
      "compute_units_consumed": 1.5,
      "name": "unknown_type",
      "signature": "string",
      "fee": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "source": "So11111111111111111111111111111111111111112",
      "decimals": "unknown_type",
      "mint": "So11111111111111111111111111111111111111111",
      "program_id": "11111111111111111111111111111111",
      "value": 1.5,
      "instruction_index": 1.5,
      "destination": "So11111111111111111111111111111111111111112",
      "symbol": "unknown_type",
      "signer": "So11111111111111111111111111111111111111112",
      "network": "solana",
      "amount": "string",
      "stack_height": 1.5,
      "signers": [
        "So11111111111111111111111111111111111111112"
      ],
      "transaction_index": 1.5,
      "compute_units_consumed": 1.5,
      "name": "unknown_type",
      "fee_payer": "So11111111111111111111111111111111111111112",
      "signature": "string",
      "fee": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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": "TKWJdrQkqHisa1X8HUdHEfREvTzw4pMAaY",
      "pool": "TFGDbUyP8xez44C76fin3bn3Ss6jugoUwJ",
      "input_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "network": "tron",
      "protocol": "uniswap_v1",
      "output_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "transactions": 1.5,
      "fee": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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",
      "close": 1.5,
      "volume": 1.5,
      "network": "tron",
      "transactions": 1.5,
      "open": 1.5,
      "low": 1.5,
      "high": 1.5
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "log_index": 1.5,
      "price_inv": 1.5,
      "input_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "sender": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "transaction_from": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "factory": "TKWJdrQkqHisa1X8HUdHEfREvTzw4pMAaY",
      "log_topic0": "string",
      "input_amount": "string",
      "recipient": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "summary": "string",
      "network": "tron",
      "output_token": {
        "address": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
        "symbol": "string",
        "name": "string",
        "decimals": 1.5
      },
      "log_block_index": 1.5,
      "pool": "TFGDbUyP8xez44C76fin3bn3Ss6jugoUwJ",
      "user": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "input_value": 1.5,
      "transaction_index": 1.5,
      "output_amount": "string",
      "output_value": 1.5,
      "price": 1.5,
      "log_ordinal": 1.5,
      "transaction_id": "string",
      "protocol": "uniswap_v1"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "symbol": "unknown_type",
      "network": "tron",
      "name": "unknown_type",
      "total_transfers": 1.5,
      "contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "decimals": "unknown_type",
      "symbol": "unknown_type",
      "network": "string",
      "name": "unknown_type"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "log_index": 1.5,
      "transaction_index": 1.5,
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "tron",
      "amount": "string",
      "to": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "name": "unknown_type",
      "log_ordinal": 1.5,
      "transaction_id": "daddbf0810fb73620ebb1ad3c915afd32f3cf13a267d740f27284583df97a01a",
      "contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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,
      "transaction_index": 1.5,
      "decimals": "unknown_type",
      "value": 1.5,
      "symbol": "unknown_type",
      "network": "tron",
      "amount": "string",
      "to": "TRX9Uehj3GuFVh5jjVjNqb6q9cgVHJ4jGX",
      "name": "unknown_type",
      "transaction_id": "daddbf0810fb73620ebb1ad3c915afd32f3cf13a267d740f27284583df97a01a"
    }
  ],
  "statistics": {
    "elapsed": 1.5,
    "rows_read": 1.5,
    "bytes_read": 1.5
  },
  "pagination": {
    "previous_page": 1,
    "current_page": 1
  },
  "duration_ms": 1.5,
  "results": 1.5,
  "request_time": "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
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.

getX402DiscoveryAInspect

Returns the public x402 discovery document. Payment enforcement, verification, settlement, and metering are handled by the proxy layer.

Responses:

  • 200 (Success): Successful Response

    • Content-Type: application/json; charset=UTF-8

    • Example:

{
  "x402Version": 2,
  "name": "Pinax API",
  "resourceServer": "https://api.pinax.network",
  "payment": {
    "enforcement": "proxy"
  },
  "discovery": {
    "openapi": "https://api.pinax.network/openapi",
    "llms": "https://api.pinax.network/llms.txt",
    "skill": "https://api.pinax.network/SKILL.md"
  },
  "datasets": []
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior3/5

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

The description states it returns a public document and provides a response example. It does not mention error conditions, rate limits, or authentication beyond 'public'. With no annotations, the description carries the burden; it is adequate but minimal in revealing behavioral traits.

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 two short sentences plus a well-structured response example. It is front-loaded with the core purpose and provides essential additional context without unnecessary verbosity.

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 simplicity of the tool (no parameters, public endpoint), the description covers the main aspects: purpose, response format, and a note about proxy layer handling. It lacks explicit error handling details or alternative status codes, but the provided example is comprehensive enough for an agent to understand the output.

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?

There are no parameters in the input schema, and the description does not need to add parameter info. Baseline for 0 parameters is 4. The description implicitly confirms no parameters are needed.

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 'Returns the public x402 discovery document.' It is specific about the resource (x402 discovery document) and its public nature. This distinguishes it from sibling tools, which are all data retrieval endpoints for various APIs.

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 implies usage for retrieving the discovery document. The mention that payment enforcement etc. are handled by the proxy layer provides context, but it lacks explicit when-to-use or when-not-to-use guidance. Sibling tools are diverse, making this tool's purpose clear enough for an agent.

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