Skip to main content
Glama

Crypto Bot Audit + Market Data (x402 paid)

Who owned an NFT at a block

chain_nft_owner_at
Read-onlyIdempotent

ownerOf(id) read at a chosen block and again at the head: previous holder, current holder, and whether it moved — the ownership history a sale-attribution or stolen-collection check needs. Costs $0.001 USDC per call. Chains: base, ethereum, arbitrum, bsc, polygon, optimism, avalanche. Byte-identical to GET /chain/nft-owner-at?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&tokenId=1&block=latest.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
blockYesolder block number or tag to compare the current owner against [required]
chainYeschain key: base, ethereum, arbitrum, bsc, polygon, optimism, avalanche [required]
tokenYestoken / NFT contract address [required]
tokenIdYestoken id (decimal) [required]

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
tsNo
noteNo
chainNo
movedNo
staleNo
tokenNo
caveatNo
reasonNo
sourceNo
chainIdNo
tokenIdNo
ownerNowNo
readableNo
blockThenNo
ownerThenNo
chainLabelNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "blockThen": {
      +      "type": "string"
      +    },
      +    "caveat": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "chain": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "chainId": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "chainLabel": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "moved": {
      +      "type": "boolean"
      +    },
      +    "note": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "ownerNow": {
      +      "type": "string"
      +    },
      +    "ownerThen": {
      +      "type": "string"
      +    },
      +    "readable": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "source": {
      +      "type": "string"
      +    },
      +    "stale": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "token": {
      +      "type": "string"
      +    },
      +    "tokenId": {
      +      "type": "string"
      +    },
      +    "ts": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, but the description adds valuable context beyond that: the per-call cost ($0.001 USDC), supported chains, the dual-block read behavior, and the nature of the result (previous/current/moved). It also discloses that the behavior is byte-identical to a specific GET endpoint, which implies no side effects. No contradiction with annotations.

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

Conciseness4/5

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

The description is dense and front-loaded with the core function and use case. The second sentence packs cost, chains, and an exact endpoint example. The endpoint example is useful for grounding but adds length; still, it is not wasteful. Overall it earns a high score for efficiency, though the example could be shortened without loss.

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

Completeness5/5

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

An output schema exists, so the description is not required to detail return values, yet it still does (previous/current/moved). It covers cost, chain availability, and the dual-read behavior. The inclusion of the exact REST equivalence ensures an agent can predict the result precisely. Nothing needed to invoke the tool correctly is missing.

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's mention of 'block' as 'older block number or tag to compare the current owner against' largely mirrors the schema's own parameter description. It adds little beyond restating the parameters, though the overall description clarifies the intended comparison. No extra semantic meaning beyond the schema is provided.

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 a specific technical operation ('ownerOf(id) read at a chosen block and again at the head') and clearly states the outputs: previous holder, current holder, and whether it moved. This unambiguously differentiates it from sibling chain_nft_owner, which presumably returns only the current owner. The inclusion of a concrete REST endpoint equivalence further reinforces what the tool does.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'the ownership history a sale-attribution or stolen-collection check needs.' It also notes the cost, chains, and exact endpoint, which helps an agent decide when to call it. However, it does not explicitly mention alternatives or state when *not* to use it, so it falls short of a full 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources