Skip to main content
Glama

Token Price

token_price
Read-only

Multi-venue median spot price for any major crypto asset (Binance, Coinbase, Kraken, CoinGecko) with min/max, deviation and confidence score – one call instead of four. No API key. Pay per call with USDC or USDT on Base via x402. 3 free calls per wallet.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
assetYesTicker, e.g. ETH.
quoteNoQuote currency (default USD).USD
venuesNoSubset of binance, coinbase, kraken, coingecko.
walletNoYour EVM wallet address (0x...). Unlocks the free tier (3 free calls per wallet).
api_keyNoOptional AMR enterprise API key.
x_paymentNoOptional signed x402 payment payload (base64 JSON) for USDC/USDT on Base.
max_age_secondsNoMax cache age (default 5).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
assetYes
priceYes
quoteYes
tokenNoToken actually used for payment (USDC, USDT or FREE).USDC
routingYesHow the request was routed (provider, fallback, cache, latency).
sourcesYes
cost_usdcYesPrice charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier.
price_maxYes
price_minYes
confidenceYes
fetched_atNoUTC timestamp when the data was fetched.
change_24h_pctNo
sources_failedNo
sources_checkedYes
freshness_secondsYesAge of the underlying data in seconds (0 = fetched live).
max_deviation_pctYes
x_payment_responseNoBase64-encoded x402 settlement receipt (mirrors the X-PAYMENT-RESPONSE header). Only present when the call was paid with `x_payment`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Response for ``POST /token-price``.",
      +  "properties": {
      +    "asset": {
      +      "title": "Asset",
      +      "type": "string"
      +    },
      +    "change_24h_pct": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Change 24H Pct"
      +    },
      +    "confidence": {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "title": "Confidence",
      +      "type": "number"
      +    },
      +    "cost_usdc": {
      +      "description": "Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier.",
      +      "title": "Cost Usdc",
      +      "type": "number"
      +    },
      +    "fetched_at": {
      +      "description": "UTC timestamp when the data was fetched.",
      +      "format": "date-time",
      +      "title": "Fetched At",
      +      "type": "string"
      +    },
      +    "freshness_seconds": {
      +      "description": "Age of the underlying data in seconds (0 = fetched live).",
      +      "title": "Freshness Seconds",
      +      "type": "integer"
      +    },
      +    "max_deviation_pct": {
      +      "title": "Max Deviation Pct",
      +      "type": "number"
      +    },
      +    "price": {
      +      "title": "Price",
      +      "type": "number"
      +    },
      +    "price_max": {
      +      "title": "Price Max",
      +      "type": "number"
      +    },
      +    "price_min": {
      +      "title": "Price Min",
      +      "type": "number"
      +    },
      +    "quote": {
      +      "title": "Quote",
      +      "type": "string"
      +    },
      +    "routing": {
      +      "description": "How the request was routed (provider, fallback, cache, latency).",
      +      "properties": {
      +        "cache_hit": {
      +          "default": false,
      +          "description": "True if the result was served from cache.",
      +          "title": "Cache Hit",
      +          "type": "boolean"
      +        },
      +        "fallback_used": {
      +          "default": false,
      +          "description": "True if the primary provider failed and a fallback served the result.",
      +          "title": "Fallback Used",
      +          "type": "boolean"
      +        },
      +        "latency_ms": {
      +          "default": 0,
      +          "description": "End-to-end routing latency in milliseconds.",
      +          "title": "Latency Ms",
      +          "type": "integer"
      +        },
      +        "provider": {
      +          "description": "Name of the upstream provider that served the result.",
      +          "title": "Provider",
      +          "type": "string"
      +        },
      +        "providers_tried": {
      +          "description": "Providers attempted, in order.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "title": "Providers Tried",
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "provider"
      +      ],
      +      "title": "RoutingMeta",
      +      "type": "object"
      +    },
      +    "sources": {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "title": "Sources",
      +      "type": "array"
      +    },
      +    "sources_checked": {
      +      "title": "Sources Checked",
      +      "type": "integer"
      +    },
      +    "sources_failed": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "title": "Sources Failed",
      +      "type": "object"
      +    },
      +    "token": {
      +      "default": "USDC",
      +      "description": "Token actually used for payment (USDC, USDT or FREE).",
      +      "title": "Token",
      +      "type": "string"
      +    },
      +    "x_payment_response": {
      +      "description": "Base64-encoded x402 settlement receipt (mirrors the X-PAYMENT-RESPONSE header). Only present when the call was paid with `x_payment`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "asset",
      +    "quote",
      +    "price",
      +    "price_min",
      +    "price_max",
      +    "max_deviation_pct",
      +    "sources",
      +    "sources_checked",
      +    "confidence",
      +    "freshness_seconds",
      +    "cost_usdc",
      +    "routing"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / max_age_seconds / default
      Added value: +5
    • addedInput schema / properties / quote / default
      Added value: +"USD"
    • changedInput schema / properties / wallet / description
      Previous value: -"Your EVM wallet address (0x...). Unlocks the free tier (3 calls per wallet)."New value: +"Your EVM wallet address (0x...). Unlocks the free tier (3 free calls per wallet)."
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the call read-only and open-world, and the description adds material non-obvious context: no API key is required, calls are metered via x402 payment in USDC/USDT on Base, and each wallet gets three free calls. This discloses the cost and auth model, which the annotations do not cover.

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?

Two compact sentences front-load the core function and venue aggregation, then state payment and cost constraints. No filler or duplicated schema 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?

With a full input schema and an output schema, the description covers everything needed to select and invoke the tool: purpose, venues, pricing/auth model, and free-tier condition. Remaining parameters like max_age_seconds and quote are already documented in the schema.

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 already documents all 7 parameters at 100% coverage, so the baseline is 3. The description adds useful semantics around payment-related parameters (wallet free-tier unlocking, x_payment via x402, optional key) and the asset scope, without restating schema details.

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

Purpose5/5

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

Clearly identifies a specific operation: retrieving a multi-venue median spot price with min/max, deviation, and confidence score for a crypto asset, naming the four aggregated venues. This distinguishes it from sibling tools like dex_price or currency_convert without requiring schema inspection.

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 'one call instead of four' phrasing signals that this tool aggregates venue-specific price data, giving clear context for when it is the right choice. It does not explicitly name alternative tools or state exclusion conditions, but the venue-scoped median-price description is enough to orient an agent.

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.