Skip to main content
Glama
p1xelapp

solana-nft-mcp

by p1xelapp

Asset provenance (Core)

get_asset_provenance
Read-only

Get the complete on-chain ownership trail for a Metaplex Core NFT: mint, transfers with marketplace labels, and current owner. Check historyComplete to confirm the trail is fully captured.

Instructions

BOUNDED on-chain ownership history of a Metaplex Core asset: mint -> transfers (with marketplace labels) -> current owner. Decoded from TransferV1 instruction accounts - data most NFT APIs return EMPTY for on Core assets. Ideal for Candy Digital cards and any Core collectible. This decodes at most depth transactions, so on a heavily traded asset the earliest ownership can be outside the result: ALWAYS read historyComplete before describing the trail as the whole story, and skippedTransactions for how much was left out. Raise depth to cover more. A bounded walk keeps the newest transactions and the mint and drops the middle, which is where a recently minted asset's sale usually sits: any hole appears in events as an unread_gap row IN ITS PLACE in the order, so never read across one as though the trail were continuous. Lowering depth to save time is how a 'who bought it' question gets the wrong answer. Ownership events only: traits live in get_asset (marketplace attributes) and get_asset_trust (the on-chain Attributes plugin), so an empty trait picture here means nothing.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mintYesCore asset mint address
depthNoMax transactions to decode (each is one paced RPC call). historyComplete says whether this covered everything, and an unread_gap row in events shows where anything was left out. Lower it only to go faster, never to answer who owned something. Default 15.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.17.2

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description carries the behavioral burden and does so thoroughly. It discloses the bounded walk, the at-most-depth limit, the dropping of the middle of the history, the unread_gap rows placed in order, the need not to read across gaps, and the meaning of skippedTransactions. This is exactly the behavioral context an agent needs beyond the annotation hints.

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 long but densely informative and front-loaded with the core promise before moving into operational warnings. Every sentence earns its place, and the repeated warnings—read historyComplete, don't read across gaps, don't lower depth for provenance—are correctness-critical rather than fluff. The structure leads from what it does to how to interpret results safely.

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 no output schema, the description must explain what comes back, and it does: mint, transfers with marketplace labels, current owner, historyComplete, skippedTransactions, events, and unread_gap rows. It also explains the empty-traits case and directs the agent to the right tools for traits. An agent can interpret the response safely and decide when depth is insufficient.

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 depth semantics with 'Raise depth to cover more' and warns that newer transactions are kept while the middle is dropped, but most depth details like RPC pacing, historyComplete, unread_gap, and lowering-only-for-speed already appear in the schema description. For mint, neither the schema nor the description goes beyond identifying a Core asset mint address, so the description adds only modest parameter-level value.

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 names the exact operation and resource: 'BOUNDED on-chain ownership history of a Metaplex Core asset: mint -> transfers (with marketplace labels) -> current owner.' It further distinguishes the tool by noting it decodes from TransferV1 instruction accounts and that other APIs return empty for Core assets. Ownership-only scoping is explicit when it routes trait questions to get_asset and get_asset_trust.

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

Usage Guidelines5/5

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

The description explicitly says it is ideal for Candy Digital cards and any Core collectible, and it states what it is not for: 'Ownership events only: traits live in get_asset... and get_asset_trust.' It also gives concrete usage rules, such as always reading historyComplete before describing a trail as complete and never lowering depth to answer who-owned-it. This is strong when-to-use and when-not-to-use guidance with named alternatives.

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