Skip to main content
Glama

getTokenMultiPrices

Read-onlyIdempotent

Get current USD prices for up to 10 tokens on the same network in one batched call, returned as a prices array plus a missing_tokens list. Read-only and keyless. Tokens that cannot be priced come back in missing_tokens rather than being dropped, so check that list for partial failures. Use for 'prices for these tokens', 'compare the price of X, Y and Z', or building a portfolio/dashboard snapshot. For one token with full metadata and multi-timeframe stats use getTokenDetails. Params: network (required slug, all tokens must share it); tokens (required array of 1 to 10 contract addresses).

Input Schema

NameRequiredDescriptionDefault
tokensYesREQUIRED: Up to 10 token contract addresses on the same network.
networkYesREQUIRED: Network ID from getNetworks
rationaleYesREQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples.

Output Schema

NameRequiredDescriptionDefault
pricesYesUSD prices for the requested tokens, in input order.
missing_tokensNoInput tokens that upstream could not price (invalid address, no liquidity, unknown contract). Empty array when all input tokens were resolved.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedOutput schema / properties / missing_tokens / items / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / prices / items / additionalProperties
      Removed value: -true
    • addedOutput schema / properties / prices / items / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "chain": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "description": "Token contract address.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "price_usd": {
      +        "description": "Current USD price; null if not available.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / prices / items / properties
      Removed value: -{
      -  "chain": {
      -    "type": "string"
      -  },
      -  "id": {
      -    "description": "Token contract address.",
      -    "type": "string"
      -  },
      -  "price_usd": {
      -    "description": "Current USD price; null if not available.",
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  }
      -}
    • removedOutput schema / properties / prices / items / type
      Removed value: -"object"
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "missing_tokens": {
      +      "description": "Input tokens that upstream could not price (invalid address, no liquidity, unknown contract). Empty array when all input tokens were resolved.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "prices": {
      +      "description": "USD prices for the requested tokens, in input order.",
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "chain": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "Token contract address.",
      +            "type": "string"
      +          },
      +          "price_usd": {
      +            "description": "Current USD price; null if not available.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "prices"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the 'read-only' phrasing is partially redundant. However, the description adds genuinely new behavior: it is keyless, it batches up to 10 tokens on one network, and failed tokens surface in missing_tokens instead of being dropped, which tells the agent to handle partial failures.

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?

Front-loaded with the core behavior and failure semantics before use cases and the sibling pointer. Slightly dense with three example phrasings, but each sentence carries actionable content.

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?

An output schema exists, so return shape needn't be spelled out, and the description still notes the two top-level keys. Rich annotations plus full schema coverage mean the remaining gap is minor: the required rationale convention is only referenced indirectly.

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%, so the baseline is 3. The description reinforces the shared-network constraint and the 1-10 address range, but it omits the required `rationale` parameter entirely, leaving that convention to the schema and server instructions.

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?

States a specific verb and resource with scope: batched USD prices for up to 10 tokens on one network, returned as a prices array plus missing_tokens. It also explicitly names getTokenDetails as the sibling for single-token metadata, so the agent can differentiate without opening schemas.

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

Usage Guidelines5/5

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

Gives concrete trigger phrasings ('prices for these tokens', 'compare the price of X, Y and Z', portfolio snapshot) and an explicit exclusion rule routing single-token multi-timeframe requests to getTokenDetails. Both when-to-use and when-not are covered.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources