Skip to main content
Glama
p1xelapp

solana-nft-mcp

by p1xelapp

solana-nft-mcp

The NFT APIs I tried return an empty ownership history for a Metaplex Core asset, and an AI reading that empty answer tells you the card has never traded. solana-nft-mcp reads the chain itself: who owned it, who can freeze it, what sold and for how much, and where the deals are. Read-only, no sign-up, nothing collected, runs on your machine.

TypeScript MCP License: MIT Sign-up


Why

Ask an assistant about a Solana card today and it answers from memory. It will say a card "never traded", because the mainstream NFT APIs return an empty history for Metaplex Core assets while the transfers sit on chain the whole time. It will compare two floors quoted in two currencies as if they were one.

solana-nft-mcp hands the same assistant live, labelled data instead: the chain for supply, ownership, provenance and custody rules, Magic Eden without a key, and OpenSea through a free key the server issues itself. Each number comes back with its marketplace, its currency, its read time, and what the source could not see.

The server runs on your machine and your AI app starts it. There is no hosted service and no account between you and the data. The picture is generated from the running server, so the counts cannot drift from the code: npm test fails if they do.

Related MCP server: polskidegen-hl-tracker

Install

Node 22 or newer. Two ways to run it.

From npm, no clone. Wherever a client asks for a command, give it npx with the arguments -y solana-nft-mcp. The first start downloads the package; later starts reuse it.

claude mcp add solana-nft -- npx -y solana-nft-mcp

From source. Build once, then point the client at dist/index.js:

git clone https://github.com/p1xelapp/solana-nft-mcp.git
cd solana-nft-mcp && npm install && npm run build

Claude Code

claude mcp add solana-nft -- node /absolute/path/to/solana-nft-mcp/dist/index.js

Claude Desktop. Settings -> Developer -> Edit Config, add the block below, then quit the app fully and reopen it. Or install the .mcpb bundle from the latest release by dragging it onto Settings -> Extensions.

{
  "mcpServers": {
    "solana-nft": {
      "command": "node",
      "args": ["/absolute/path/to/solana-nft-mcp/dist/index.js"]
    }
  }
}

Other clients. Tested: Claude Desktop, Claude Code, Codex CLI 0.153.4 (codex exec -c 'mcp_servers.solana-nft.command="node"' -c 'mcp_servers.solana-nft.args=["/absolute/path/to/dist/index.js"]'). Cursor, Windsurf, Gemini CLI, Zed, Cline and VS Code take the same command / args pair in their own config; the server is plain stdio with no client-specific code, but those have not been tested here. ChatGPT on the web and Grok cannot run a local process.

Did it work? Your app lists the tools near the message box (Claude Code: /mcp). You should see 21, starting with identify. If none: the path must be absolute and end in dist/index.js, npm run build must have run, and the app must be fully quit and reopened.

OpenSea is on without any setup. The first question that needs it makes the server ask OpenSea for a free agent key, stored at ~/.solana-nft-mcp/opensea-key.json and renewed before it expires. The key is never logged or printed into an answer. A collection's OpenSea slug is found from its on-chain address, or by name and then proved against that address; pass openseaSlug to override. Options, set in the config's env block (clients launch the server with a clean environment):

  • OPENSEA_API_KEY - your own key, overrides the self-issued one.

  • SOLANA_NFT_MCP_NO_AUTO_KEYS=1 - never request a key; OpenSea is off unless you set one.

  • SOLANA_RPC_URL, DAS_RPC_URL - a private endpoint, neither required. A key in the URL is registered and redacted from every answer (details in docs/FAQ.md).

  • SOLANA_NFT_MCP_NO_UPDATE_CHECK=1 - skip the one startup request to npm for a newer version.

Ask it anything

Nobody types a tool name. These are asked in plain words and the assistant picks the calls.

  • Who has owned this card since it was minted, with dates and the marketplaces involved?

  • Is it true this card has never traded?

  • Can the project still freeze, move or burn what is in my wallet?

  • What is in wallet 7HHs3..., and does that wallet flip or hold?

  • What is the cheapest Legendary listing in that DC collection right now?

  • Any Superman or Batman DC comic #1 or #100 for sale, and are any close to floor?

  • What did Shohei Ohtani cards sell for this week, and how many changed hands?

  • Are the Magic Eden and OpenSea floors for this collection even comparable?

  • What would it take to build a sales bot on this, and where would it fail quietly?

A collection name, a player name, a card number or a trait is enough to start. Names resolve against a bundled snapshot of the Magic Eden directory, against OpenSea's Solana index, and against the marketplace itself, and a fuzzy match is offered as a candidate with the mismatch stated, never presented as the answer. Long answers are sized to arrive whole: a client that caps a tool result gets fewer per-row details before it gets fewer rows, and the answer says what it left out.

What it reads

Source

Answers

Key

Solana RPC (three public endpoints, rotated)

supply, current owner from decoded Core account bytes, transfer history, wallet age

none

Asset index (DAS) on the public RPC

a second, independent opinion on ownership and wallet contents

none

Magic Eden v2

floors, listings, sales, activity, top traders, trending

none

OpenSea v2

second-marketplace floors, sales, supply, royalty, wallet transfers

self-issued

No account, no sign-in, no telemetry, no log of your questions, and no signing code anywhere in the repository; every tool declares readOnlyHint. What leaves the machine: the public address, symbol or name you asked about, sent to the source that can answer it; one startup request to npm for the latest version number; one request to OpenSea for a free key, the first time a question needs it. One file is written, the key file above, at permissions 600. Nothing else touches disk. To remove everything: uninstall or delete the clone, then delete ~/.solana-nft-mcp/.

Tools

21 tools. Names are frozen: agents reference them in prompts, and a rename breaks integrations without raising an error.

Tool

Back

identify

what an address or name is, where it trades, which tool to call next

verify_claim

confirmed, contradicted or unverifiable, with the numbers seen and how to re-check

get_asset_trust

Core plugins decoded from bytes: delegates, frozen state, enforced vs advisory royalties, mutable metadata, editions

get_integration_recipe

endpoints, pacing, running cost, skeleton and the silent failure modes for a given build

search_collections

name lookup across the Magic Eden directory and the OpenSea Solana index, saying which layers were read

get_collection_stats

chain supply, floors per marketplace, and a reconciliation that refuses to rank SOL against USDC

get_collection_holders

census of a Core collection from the chain's asset index, each holder with a role (issuer, marketplace escrow, wallet), capped and saying so

get_floor_prices

current floor and listed count for up to 10 collections, Magic Eden only

get_recent_sales

latest completed fills with buyer, seller, price, mint and signature

get_asset

three readers for one item: the marketplace, a byte-level decode, and the chain's asset index, with owner agreement reported

get_asset_provenance

bounded ownership history of a Core asset, dated, marketplaces named, every unread hole marked in place. historyComplete says every transaction was read; mintObserved says the mint itself was decoded. They are different claims

get_wallet_holdings

holdings from two independent readers, with the gap between them named

get_wallet_profile

holdings by collection, share of wallet and of supply, listed and compressed counts, floor ceiling with assumptions, wallet age

get_wallet_activity

buys and sells, net flow, marketplace split, every flip with hold time and P&L, a behaviour label with its reason

get_collection_sales

sales over a window: count, volume, median, buyers, sellers, per-day series, per-name breakdown, how far back the feed was read

find_in_group

one edition number hunted across a whole family of collections, each match against its own floor

find_listings

cheapest-first listings, trait filters, a name filter that says what it matched, a lowest-serials mode, each ask against its trait floor on both marketplaces

get_top_traders

the largest wallets in a collection by Magic Eden volume

get_trending

Magic Eden's trending list, with an explicit note when the marketplace publishes nothing

explain_mechanics

escrow, freezing, delegates, royalties, wash trades and migrations, per standard and marketplace, each entry citing its source

get_source_status

every source pinged live: tier, fallback, what it cannot see, credential state

Three prompts: getting_started, collection_report, wallet_report. No MCP resources, on purpose: everything they would carry is reachable by a tool the assistant calls itself.

Trust and limits

  • Buying, selling, listing and signing are absent. No code exists for them.

  • Provenance and trust decoding cover Metaplex Core only. Legacy SPL and compressed NFTs are reported as named gaps, never as empty lists. Holdings and activity cover both.

  • Magic Eden and OpenSea only. Tensor has no self-serve keys; Rarible's Solana coverage is unconfirmed. Both are catalogued with the condition that would add them.

  • Every money figure names its currency and the API it came from, on the summary and on every priced row, and counts keep their coverage flags beside them (truncated, stale, historyComplete). A program should refuse to act on a row whose flag says the read was partial.

  • Two error surfaces. Input that fails a tool's schema is refused before the handler runs: isError: true, no structuredContent. Every failure inside a handler carries structuredContent.error, a stable category (not-found, wrong-kind, escrow, source-unsupported, bad-input, upstream-unavailable, upstream-rate-limit, error).

  • No valuations and no currency conversion. Solana only.

Full detail: docs/TRUST-AND-LIMITS.md.

Security

Minting is permissionless, so a collection name is attacker-controlled text. Every name and every field from a chain or a marketplace is checked against the shape it claims to have before a model sees it, and every credential this process has sent is redacted from every answer. Covered by the offline suite. Reporting: SECURITY.md.

Development

npm test           # offline: every tool, prompt, validation, wallet and market logic,
                   # the OpenSea contract, the prompt-injection defence. No network.
npm run test:live  # live: floors, a real provenance trace, source status, name lookup
npm run snapshot   # refresh the bundled Magic Eden collection directory
npm run inspect    # open the MCP Inspector against a local build

CI runs a full-history secrets scan on every push to every branch; the offline suite, lint, the tarball check and npm audit on main, pull requests and release tags; and the live check weekly.

Docs

About

Built and maintained by P1xel (p1xel.app, @P1xelCollector), a long-time Solana collector. The story of why it exists is in docs/DEEP-DIVE.md.

Running on the same decoding

CandyScan tracks the Candy Digital collections on Solana: supply, holders, migrations and sales, kept current. It is where the Core decoding was written first, and this repository is the keyless half of that pipeline. Each project shaped the other.

Shipped something on top of solana-nft-mcp? Open an issue and it goes here.

Independent project, not affiliated with the Solana Foundation. SOLANA and SOL are trademarks of the Solana Foundation. They appear in this project's name and documentation for one reason only: to say which chain the server reads. Nothing here is endorsed, sponsored or reviewed by the Solana Foundation, and no affiliation is claimed or implied.

License

MIT. See LICENSE.

Available Tools

21 tools
explain_mechanicsHow NFTs are handled: escrow, freezing, delegates, royaltiesA
Read-only

Plain-words explanation of how a standard or a marketplace actually handles an asset: why an NFT moved to an unknown wallet (escrow), whether a project can take it back (permanent delegates), why it cannot be listed (freeze), who gets paid on a sale and where royalties are enforced, why two sites show different floors, what a wash trade looks like, what changes in a standards migration. Covers Metaplex Core plugins, Token Metadata and programmable NFTs, compressed NFTs, and the Solana marketplaces (Magic Eden order book and pools, Tensor, OpenSea, Candy Digital, Collector Crypt). Every entry cites the documentation or program source it came from and says when observed behaviour differs from what is documented. Answers 'what does frozen mean', 'can they burn my card', 'is Magic Eden custodial'.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesA question or a term: 'escrow', 'royalties on Tensor', 'permanent transfer delegate'

TDQS

A4.3/5.0
Behavior5/5

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

Annotations provide readOnlyHint and openWorldHint, but the description goes beyond by stating that every entry cites its documentation or program source and notes when observed behavior differs from documentation. This is a valuable behavioral disclosure about reliability and transparency, and it also hints at the depth and verification behind answers. 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 a single dense paragraph but efficiently packs a broad scope into a few sentences. It front-loads the core purpose and then lists concrete coverage areas. It is not overly verbose given the complexity of the tool, and every sentence contributes information. Slightly more structured formatting could improve readability, but it remains concise.

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?

For an explanation tool with no output schema, the description provides ample context: what it covers, what types of questions it answers, and its source-citation behavior. It does not explicitly state the output format (e.g., a text answer), but that is implied. Given the breadth of topics, the description is sufficiently complete for an agent to decide when to invoke it.

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?

There is only one parameter, 'topic', and the schema already provides a rich description with examples ('escrow', 'royalties on Tensor', 'permanent transfer delegate'). The tool description repeats those examples but adds no new information about the parameter. With 100% schema coverage, the description adds no extra semantic value beyond the schema, so a baseline of 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 uses a specific verb ('explain') and a clear resource ('how a standard or a marketplace handles an asset'), then enumerates concrete scenarios (escrow, freeze, royalties, wash trades, standards migration). It distinguishes itself from sibling data-retrieval tools by focusing on conceptual explanation rather than raw facts, and even names the specific protocols and marketplaces covered.

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 makes the tool's use case obvious through the list of example questions ('what does frozen mean', 'can they burn my card', 'is Magic Eden custodial') and the explicit coverage of platforms and standards. It does not explicitly name sibling tools or state when not to use them, but the contrast with the data-lookup siblings is implicit and strong.

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

find_in_groupHunt across a family of collectionsA
Read-only

Search MANY collections at once for a specific edition number. DC comics on Candy are 272 separate collections, one per issue, so 'is any DC #1 or #100 listed, and how close to floor' cannot be asked of one collection - this asks a batch of them and hands back a cursor for the rest. Answers 'any #1 for sale across DC', 'cheapest low serial in the MLB set', 'which issues have a #100 listed under 1 SOL'. Each match names its collection, its ask, that collection's floor and how far above floor it is. Use groups from search_collections, or name the collections yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
batchNoHow many collections to read in this call. Each one costs a request or two, so a large batch is a long wait.
groupNoA family in the registry: DC, MLB or Other. Case-insensitive.
serialsNoEdition numbers to hunt, e.g. [1, 100]. Ignored when lowestOnly is true. Default [1, 100].
startAtNoWhere in the group to start; use nextStartAt from the previous call. Default 0.
lowestOnlyNoReturn the lowest serial listed in each collection instead of specific numbers. Default false.
collectionsNoExplicit collection names, ids or Magic Eden symbols, instead of a group
maxPriceSolNoKeep only asks at or below this price
pagesPerCollectionNoPages of 100 listings to read per collection, cheapest first. Default 2.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations mark it readOnlyHint=true and openWorldHint=true, and nothing in the text contradicts those. The description adds concrete runtime behavior: batching costs ('each one costs a request or two'), pagination ('hands back a cursor for the rest'), and per-match fields ('its ask, that collection's floor and how far above floor'). This goes 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 front-loads the action ('Search MANY collections at once') and stays information-dense; every sentence adds either a use case, an output detail, or a grouping instruction. The examples and parameter context are compact rather than padded.

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 eight parameters and no output schema, the description covers the key missing pieces: output shape ('Each match names its collection, its ask, that collection's floor'), pagination/cursor behavior, cost implications of batch, and source of groups. This is sufficient for an agent to construct a valid first call.

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 the schema carries the parameter-level burden and the baseline is 3. The description adds cross-parameter meaning by mapping serials to edition numbers, linking startAt to the returned cursor, and explaining that collections can be named directly or sourced from search_collections. It does not repeat the schema's per-parameter 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?

The description opens with the core verb and scope: 'Search MANY collections at once for a specific edition number.' It then gives concrete example questions and states what each match returns, making the resource and output unambiguous. This clearly differentiates it from single-collection tools without restating the tool name.

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 gives a clear trigger: questions like 'any #1 for sale across DC' that cannot be asked of one collection. It also directs agents to 'Use groups from search_collections, or name the collections yourself.' It does not explicitly say to use find_listings for single-collection lookups, so alternative exclusion is implicit rather than stated.

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

find_listingsFind listings and dealsA
Read-only

What is for sale in a collection right now, cheapest first, with optional trait filters, a name filter, and a lowest-serials mode that reads the whole book and sorts by edition number. Answers 'cheapest Rex', 'find #1390', 'is a #1 or #100 for sale', 'lowest serial I can buy and what it costs versus floor', 'is there a deal on a Judge card', 'what is listed under 1 SOL', 'which traits are cheap right now'. Several trait filters mean all of them. Rarity ranks appear when the marketplace publishes them (Core collections usually carry none). Prices are asks on Magic Eden, not what buyers pay; get_collection_sales shows that.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many listings to return. Default 20.
symbolYesMagic Eden collection symbol
traitsNoTrait filters, combined with AND
openseaSlugNoOpenSea collection slug; adds OpenSea's per-trait floor next to Magic Eden's on every deal. Registry entries that carry one are used automatically.
nameContainsNoKeep only listings whose name contains this text, e.g. '#1390' or 'Judge'
lowestSerialsNoHunt low edition numbers: read up to 1,000 listings, parse the serial from each name (#9, 12/250) and return the lowest serials with their asks against the floor

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, openWorldHint), the description discloses significant behavioral traits: 'cheapest first' ordering, 'lowest-serials mode that reads the whole book' (heavy operation), trait filter AND semantics ('Several trait filters mean all of them'), the conditional nature of rarity ranks, and the distinction between ask prices and sale prices. No contradiction with annotations exists.

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 purpose, followed by usage examples and important caveats. Every sentence earns its place, though it is a single stream-of-consciousness paragraph; a bulleted structure would improve scannability. Still, it is concise relative to the complexity of six parameters and multiple modes.

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?

For a tool with six parameters and no output schema, the description covers the essential behavioral context: what it returns (listings cheapest first), filtering modes, the heavy read behavior of lowestSerials, rarity rank caveats, and pricing semantics. It does not describe pagination or output field details, but the schema documents parameters and the annotations cover safety. This is nearly complete for correct invocation.

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 the baseline is 3. The description adds value beyond the schema by explaining the semantics of 'lowestSerials' ('reads the whole book and sorts by edition number'), clarifying that multiple trait filters are ANDed, and providing concrete examples for 'nameContains' ('#1390' or 'Judge'). This extra context lifts it above baseline.

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 precise statement of what the tool does: 'What is for sale in a collection right now, cheapest first' – a specific verb and resource with a clear scope. It then names concrete capabilities (trait filters, name filter, lowest-serials mode) and differentiates itself from a sibling by noting that prices are asks on Magic Eden and that get_collection_sales shows buyer-paid prices.

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 when-to-use guidance through example user intents ('cheapest Rex', 'find #1390', 'is there a deal on a Judge card') that map directly to this tool's features. It also names an alternative (get_collection_sales) for a specific need (buyer-paid prices), giving clear when-not guidance. This is more than enough for an agent to route correctly.

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

get_assetAsset lookupA
Read-only

Everything known about one asset by mint address: marketplace metadata (name, image, collection, traits, listing state) plus the on-chain owner read from the Core account for Metaplex Core assets, and the chain's asset index for every other standard. Each reader's freshness is reported; the two owners are only called agreeing when both were read live.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesAsset mint address

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses that owner data comes from different sources depending on asset standard, that each reader's freshness is reported, and that the two owners are only treated as agreeing when both reads were live. This meaningfully warns agents about potential owner disagreement on stale reads.

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 compact and front-loaded with the core lookup behavior. Both sentences add information about output contents or freshness behavior, with no filler or redundant restatement of the schema.

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 one-parameter read-only tool with no output schema, the description names the concrete fields and data sources returned, including freshness reporting and the owner-agreement caveat. This is sufficient for an agent to invoke the tool and interpret the result correctly.

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%: the only parameter, mint, is already described as 'Asset mint address.' The description simply restates 'by mint address' and adds no further format, validation, or encoding detail, so the baseline score applies.

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 identifies a get-by-key lookup for a single asset: 'Everything known about one asset by mint address.' It enumerates the content groups returned, including marketplace metadata and the on-chain owner, which distinguishes it from wallet-level and collection-level 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 Guidelines4/5

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

The phrase 'one asset by mint address' provides clear invocation context: use this when the caller already has a mint address and needs a full asset picture. It does not explicitly name alternatives or when-not-to-use conditions among the many siblings, but the single-asset scope is clear enough to avoid obvious confusion.

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

get_asset_provenanceAsset provenance (Core)A
Read-only

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.

ParametersJSON 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.

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.

get_asset_trustWhat owning this actually meansA
Read-only

Decode the Metaplex Core plugins on an asset and translate them into custody facts: can the issuer move or burn it without the holder's signature (permanent delegates - normal on packs, a red flag on keepers), is it frozen, are royalties enforced by a program rule set or merely advisory, is the metadata mutable, is the serial an on-chain edition or just printed text. Plugins set on the COLLECTION apply to every asset in it and are read too, marked inherited. Marketplaces show the picture and the price; this shows the rules attached to the account. Use before a purchase, when a listing 'cannot transfer', or when someone asks whether a pack burns on open. Read-only, decoded from raw bytes, no indexer.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesMetaplex Core asset address

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description adds valuable behavioral detail: data is 'decoded from raw bytes, no indexer,' collection-level plugins are read and 'marked inherited,' and the read is purely read-only. This gives an agent accurate expectations about data sourcing and coverage without contradicting the annotations.

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 dense but every sentence earns its place: purpose, concrete facts, collection inheritance nuance, marketplace contrast, use cases, and data-source caveat. The most important purpose statement is front-loaded, and there is no filler or repetition.

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 single-parameter read tool with no output schema, the description covers what the tool does, what questions it answers, how it handles collection-level plugins, when to use it, and the raw-bytes/no-indexer caveat. An agent has enough context to invoke it correctly and interpret its high-level purpose.

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 schema already documents the only parameter, mint, as 'Metaplex Core asset address,' giving 100% schema description coverage. The tool description reinforces that the asset is a Metaplex Core asset but does not add meaningful syntactic or semantic details beyond the schema, so the baseline score of 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 opens with a specific verb and resource: 'Decode the Metaplex Core plugins on an asset and translate them into custody facts.' It then enumerates concrete questions the tool answers (delegates, frozen state, royalties, metadata mutability, serial authenticity), and distinguishes itself from marketplaces that show only picture and price. This clearly differentiates it from siblings like get_asset and explain_mechanics.

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 gives explicit when-to-use triggers: 'Use before a purchase, when a listing "cannot transfer", or when someone asks whether a pack burns on open.' It also hints at a contrast with marketplaces, but does not name alternative sibling tools or provide explicit when-not-to-use exclusions, so it falls just short of a 5.

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

get_collection_holdersWho holds every item in a collectionA
Read-only

CENSUS of a Core collection: every asset grouped under it, with its current owner, straight from the chain's asset index. This is the only tool that sees items NOBODY HAS LISTED - every other collection-wide tool reads a marketplace's listing book, so an unsold item is invisible to them. Answers 'who won the 36 packs from that drop', 'is one wallet holding half the supply', 'how many are still with the issuer', 'which wallets hold this set'. Filter to part of a collection with trait/value (e.g. Item Type = Pack) or namePrefix (e.g. 'Gold Series - Aces'). Returns the rows plus a holder count per address, largest first. Every holder row carries a ROLE: issuer (the collection's update authority, read from the chain: the issuer's key, which says nothing about how an item got there), venue-escrow (listed), wallet, or unknown (the collection account could not be read, so nobody could be checked against the issuer's key). An item currently listed for sale shows the MARKETPLACE'S ESCROW as its owner, not the seller: call get_asset_provenance on that mint to see who handed it over.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMost assets to read from the index before truncating. Default 2000.
traitNoTrait name to filter on, e.g. 'Item Type'. Case-insensitive. Needs `value` too.
valueNoTrait value to keep, e.g. 'Pack'. Case-insensitive.
collectionYesCore collection ADDRESS. Use identify or search_collections to turn a name into one.
namePrefixNoKeep only assets whose name starts with this, e.g. 'Gold Series - Aces'. Case-insensitive.

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint and openWorldHint annotations. It discloses that listed items show the marketplace's escrow as owner rather than the seller, that holder rows carry a ROLE field with specific meanings (issuer, venue-escrow, wallet, unknown), and that the issuer role is read from the chain and says nothing about how an item got there. It also explains the 'unknown' role condition. This is rich behavioral context that an agent needs to interpret results correctly.

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 but well-organized, front-loading the core purpose and key differentiator. Every sentence adds information, and the examples are useful. It is longer than average, but the length is justified by the behavioral nuances (roles, escrow ownership) that are essential for correct interpretation. Slight redundancy in the role explanation could be tightened, but overall it earns its 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?

For a read-only census tool with 100% schema coverage and no output schema, the description is remarkably complete. It covers what the tool returns (rows plus holder count per address, largest first), how filtering works, how to interpret roles, and the escrow caveat. It even points to a sibling tool for follow-up provenance questions. There is no critical missing information an agent would need to invoke or interpret this 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 description coverage is 100%, so the schema already documents all five parameters. The description adds meaningful context beyond the schema: it explains the purpose of trait/value filtering with a concrete example ('Item Type = Pack') and namePrefix with an example ('Gold Series - Aces'). It also clarifies that collection is an ADDRESS and how to obtain one. This adds value beyond the schema, though the schema already carries most of the parameter documentation.

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 precise verb and resource: 'CENSUS of a Core collection: every asset grouped under it, with its current owner, straight from the chain's asset index.' It clearly distinguishes itself from sibling tools by stating it is the only tool that sees unlisted items, and it provides concrete example questions. This makes the tool's purpose unmistakable and differentiates it from collection-wide tools that read marketplace listing books.

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 states when to use this tool versus alternatives: it is the only tool that sees items nobody has listed, while other collection-wide tools read a marketplace's listing book. It also names a specific alternative, get_asset_provenance, for seeing who handed an item over when it is listed. This gives clear when-to-use and when-not-to-use guidance.

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

get_collection_salesSales over a periodA
Read-only

Sales for a collection over the last N days, as Magic Eden recorded them, with every sale named by the chain's asset index so it can be filtered and grouped by player, character or issue: how many sold, total volume, highest and lowest sale, median and average, unique buyers and sellers, the biggest buyers, a per-day series for charts, a per-name breakdown, and the split between the order book and Magic Eden's AMM pools. Answers 'how many sales this week', 'how many Ohtani cards sold', 'which player sold the most', 'what was the top sale', 'is volume up', 'chart the last month', 'who is buying'. The result says how far back the feed was read and whether older sales exist beyond the page budget; it never fills a gap with an estimate. Magic Eden's API feed only: each row carries the execution marketplace that feed reported, and fills it did not index are not here.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoWindow ending now. Default 7.
symbolYesMagic Eden collection symbol (search_collections resolves a name to one)
maxPagesNoPages of 500 events to read; busy collections need more to cover long windows. Default 6.
nameContainsNoKeep only sales whose item name contains this text, e.g. 'Ohtani' or 'Batman'; names come from the chain's asset index

TDQS

A4.6/5.0
Behavior5/5

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

Even with readOnlyHint and openWorldHint annotations, the description adds substantial behavior: it reads the Magic Eden API feed only, never fills gaps with estimates, reports how far back the feed was read, indicates if older sales exist beyond the page budget, and clarifies that execution marketplace is recorded per row. This goes far beyond the annotations, disclosing pagination, completeness, and sourcing quirks.

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 information-dense: every clause adds functional or behavioral detail. It front-loads the core purpose and then provides examples and caveats. While it could be tightened, the length is justified by the tool's complexity and the absence of an output schema. It is structured logically and not redundant.

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 complex tool with no output schema, the description thoroughly covers return values (aggregates, per-day series, per-name breakdown, order book vs AMM split), limitations (feed only, no estimates, pagination), and inputs. An agent can understand exactly what the tool returns and how to interpret results, making it fully self-sufficient despite missing an output 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 schema already documents all parameters (100% coverage), so baseline is 3. The description adds value by giving concrete examples for nameContains ('Ohtani' or 'Batman') and explaining maxPages in context ('busy collections need more to cover long windows'), plus clarifying that names come from the chain's asset index. This helps an agent use the parameters effectively beyond 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 starts with a specific verb-resource-scope ('Sales for a collection over the last N days') and enumerates what the tool returns (aggregates, series, breakdowns). It also lists concrete questions it answers, and its scope (collection-level, Magic Eden feed only) distinguishes it from siblings like get_recent_sales or get_collection_stats without needing to name them.

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 clearly states the use case: sales for a specific collection over a time window, with filtering/grouping. It gives example queries and notes the data source and limitations. It does not explicitly state when NOT to use it or name alternative tools, but the context is strong enough that an agent can infer applicability.

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

get_collection_statsCollection statsA
Read-only

Market + supply stats for a collection. Accepts a registry id, a Magic Eden symbol, or a Metaplex Core collection ADDRESS. Addresses are decoded straight from the chain (name, minted, current size) - works for collections no marketplace indexes, e.g. Candy Digital drops. If OPENSEA_API_KEY is set, an OpenSea cross-marketplace view is added (pass openseaSlug, or rely on registry entries that carry one): OpenSea's floor, supply and royalty, plus its 7-day floor trend and the largest holders with their share of supply. Answers 'is the floor up or down this week', 'who holds the most', 'is one wallet holding half of it'.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionYesRegistry id, ME symbol, or Core collection address
openseaSlugNoOptional OpenSea slug for a cross-marketplace view. OpenSea is read with the key the server issues itself, or OPENSEA_API_KEY if set. The slug's collection is checked against this one before floors are ranked.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: addresses are decoded straight from the chain, the OpenSea slug is checked against the collection before floors are ranked, and the OpenSea view is conditional on OPENSEA_API_KEY. This goes beyond what annotations alone convey.

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 but well-structured: it front-loads the core purpose, then explains the chain-decoding behavior, then the optional OpenSea view, and ends with example questions. It earns its length by covering multiple important behaviors, though it could be slightly 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?

For a read-only stats tool with 2 parameters and no output schema, the description covers the key inputs, the conditional OpenSea behavior, and the kind of questions it answers. It doesn't describe the exact return shape, but with no output schema and a read-only annotation, the description is reasonably complete for an agent to select and invoke it correctly.

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 both parameters. The description adds context about what the collection parameter can be (registry id, ME symbol, or Core address) and explains the openseaSlug behavior, but it doesn't add syntax or format details beyond the schema. 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 opens with a clear verb+resource ('Market + supply stats for a collection') and then enumerates the three accepted identifier forms, which distinguishes it from sibling tools like get_floor_prices or get_collection_holders. It also explicitly names the OpenSea cross-marketplace extension, so an agent can tell exactly what this tool returns.

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 gives explicit when-to-use guidance: it works for collections that marketplace indexes may not cover (e.g., Candy Digital drops) and explains when the OpenSea view is added (if OPENSEA_API_KEY is set or openseaSlug is passed). It also answers concrete user questions ('is the floor up or down this week', 'who holds the most'), which helps an agent match the tool to a user intent.

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

get_floor_pricesFloor prices (Magic Eden only)A
Read-only

Current floor price in SOL for up to 10 collections, read from MAGIC EDEN ONLY - it takes Magic Eden symbols and returns Magic Eden rows, with no other marketplace and no other currency, whether or not an OpenSea key is configured. For a cross-marketplace floor comparison use get_collection_stats, which quotes each marketplace in its own currency and refuses to compare across them. Use search_collections first if you only know a human name.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesMagic Eden collection symbols

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so safety is covered. The description adds concrete behavioral constraints: Magic Eden symbols and rows only, no other marketplace or currency, and independence from an OpenSea key. It does not mention failure modes or data freshness, but those are minor for a simple read-only lookup.

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 front-loaded with the core behavior and scope, then states exclusions, then routes to relevant sibling tools. It is dense but every sentence serves a purpose; the repeated 'Magic Eden only' emphasis is intentional and not padding.

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 one-parameter, read-only tool with fully documented schema, the description supplies all needed context: source marketplace, currency, input type, size limit, exclusions, and fallback tools. No output schema exists, but the description's 'returns Magic Eden rows' plus the stated floor-price-in-SOL behavior is enough for correct invocation.

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% and the single symbols parameter already has type, pattern, min/max length, min/max items, and a description. The description restates that it takes Magic Eden symbols and supports up to 10 collections, adding slight provenance context but not materially going beyond 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 first sentence states a specific verb ('returns current floor price') with the resource (up to 10 collections) and a precise scope (Magic Eden only, in SOL). It also distinguishes itself from siblings like get_collection_stats and search_collections, so an agent can identify it without ambiguity.

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 when to use this tool: for Magic Eden-only floor prices in SOL. It names get_collection_stats as the alternative for cross-marketplace comparison and explains why that tool is different, and also instructs agents to use search_collections first when only a human-readable collection name is known.

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

get_integration_recipeGet a build recipeA
Read-only

Use when the user wants to BUILD something with collectible data - a sales bot, a floor dashboard, a provenance page, a wallet tracker, a pack-pull watcher - rather than just look a number up. Returns the verified endpoints and their real rate limits, a runnable skeleton, the steady-state running cost, a pre-launch checklist, and the specific ways this kind of integration fails SILENTLY. The pitfalls come from production incidents on live trackers (a feed capped too low silently dropped 8,409 real records; an idle two-minute cron cost $180 in a month) and are not in any API documentation. Read this BEFORE writing integration code, not after it breaks.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesWhat the user is building

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, leaving the description to carry the behavioral burden. The description goes far beyond that, detailing the output components (endpoints, rate limits, skeleton, cost, checklist, pitfalls), including concrete failure examples from production incidents, and warning about silent failures. It fully discloses what the tool returns and why it matters, with no contradictions to annotations.

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 front-loaded with the critical when-to-use clause, followed by a clear list of return contents and supporting evidence. Every sentence earns its place: it states usage, lists deliverables, provides a concrete failure anecdote, and gives timing guidance. It is appropriately sized for the tool's complexity and no words are wasted.

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 return values — and it does thoroughly, listing all components of the recipe. It also covers the 'why' behind the tool (silent failure modes, cost traps) and the timing of use. For a tool with a single enum parameter, nothing essential is missing. The description is self-sufficient.

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 covers the single parameter 'goal' with an enum and a brief description. The description adds value by listing concrete examples of goals ('a sales bot, a floor dashboard...') that map directly to the enum values, giving the agent a richer sense of what each goal might entail. This goes beyond the schema's minimal 'What the user is building', so it earns above baseline.

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 states a specific action ('Returns the verified endpoints and their real rate limits, a runnable skeleton...') and clearly distinguishes the tool from siblings by saying 'rather than just look a number up'. It names the resource (a build recipe) and the scope (collectible data integrations). This is unambiguous and differentiates it from the lookup tools in the 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 Guidelines5/5

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

The description explicitly conditions usage: 'Use when the user wants to BUILD something... rather than just look a number up.' It provides a clear when-to-use rule, gives concrete example goals, and adds timing advice ('Read this BEFORE writing integration code, not after it breaks'). While it doesn't name specific sibling tools, the contrast with simple lookups is sufficient to route an agent correctly.

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

get_recent_salesRecent salesA
Read-only

Most recent completed sales for a collection (price in SOL, buyer, seller, tx signature). Accepts a registry id or Magic Eden symbol. With OPENSEA_API_KEY set and an openseaSlug, OpenSea sales are included for a cross-marketplace picture.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many sales to return. Default 10.
collectionYes
openseaSlugNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the description adds value by specifying the returned fields (price, buyer, seller, tx signature) and the conditional OpenSea inclusion behavior. No contradiction with annotations; it provides operational context beyond the annotations.

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 sentences, front-loaded with the core purpose and then detailing the conditional OpenSea behavior. No wasted words; each clause adds relevant 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 the tool's read-only nature and presence of annotations, the description covers the essential details: return fields, collection identifier formats, and the optional OpenSea integration. It does not mention error cases or pagination behavior, but the limit parameter in the schema covers count. The lack of an output schema makes the field list valuable; overall it is sufficiently complete 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?

Schema coverage is only 33% (only limit has a description). The description compensates by explaining that collection accepts a registry id or Magic Eden symbol and that openseaSlug is used for OpenSea inclusion. It does not repeat limit's schema description but adds meaning for the other two parameters.

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 the most recent completed sales for a collection, listing the included fields (price in SOL, buyer, seller, tx signature) and the accepted collection identifiers (registry id or Magic Eden symbol). This is specific and actionable, though it does not explicitly differentiate from sibling get_collection_sales, which may serve a similar function.

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 gives conditional guidance for including OpenSea sales (requires OPENSEA_API_KEY and openseaSlug) but does not state when to prefer this over other collection-related tools like get_collection_sales or find_listings. It implies usage for recent sales but lacks explicit exclusions or alternatives.

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

get_source_statusWhich sources are answeringA
Read-only

Live health of every data source this server reads, with tier, what each answers, what it cannot see, which need a key, and the fallback order. Answers 'is Magic Eden down', 'why is a number missing', 'what does this tool read', 'which sources need a key'. Use it when a result came back partial.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description adds useful behavioral detail: it reports what sources cannot see, which require keys, and fallback order. This goes beyond the structured annotations without contradicting them.

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 dense and front-loaded, with the core purpose in the first sentence, illustrative queries in the second, and a precise usage trigger in the third. Every sentence earns its place without redundancy.

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, no output schema, and read-only annotations, the description fully covers what the tool reports, how it can be phrased, and when to invoke it. Nothing essential is missing for correct selection and invocation.

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 no parameters, so the baseline is 4. The description appropriately focuses on what the report contains rather than parameter details, which are unnecessary here.

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 states the tool reports 'live health of every data source this server reads' and enumerates specific outputs such as tier, what each answers, what it cannot see, key requirements, and fallback order. This clearly distinguishes it from asset-oriented siblings like get_asset or get_floor_prices.

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 gives explicit usage context with 'Use it when a result came back partial' and provides concrete natural-language queries it can answer. It does not list excluded cases or alternatives, but the context is sufficiently clear for an agent to know when this tool applies.

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

get_top_tradersTop traders of a collectionA
Read-only

The wallets with the most volume in a collection as Magic Eden counts it (its own fills, all time). Answers 'who are the whales', 'biggest buyers', 'is one wallet moving this market'. Volume on other marketplaces is invisible here, and a high-volume wallet can be a market maker or a wash trader; get_wallet_activity on a wallet shows which.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many traders to return. Default 10.
symbolYesMagic Eden collection symbol

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark it read-only, and the description adds useful behavioral context: the metric is Magic Eden's own fills all-time, volume from other marketplaces is excluded, and high volume may include market makers or wash traders. This goes beyond the annotation baseline, though it doesn't describe output format.

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 three sentences with no fluff. It front-loads the core definition, then adds use cases, then a caveat with a sibling pointer. Every sentence earns its place.

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 simple two-parameter read-only tool with no output schema, the description provides enough context: what is returned (wallets), how it is ranked (volume), limitations, and a follow-up strategy. Nothing critical is missing for correct invocation.

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 both parameters (symbol and limit) are already fully documented. The description adds no new parameter-specific detail, so the baseline score of 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 the tool returns the wallets with the most volume in a collection, using a specific verb and resource. It also distinguishes itself from siblings by noting it reflects Magic Eden's own fills and contrasts with get_wallet_activity.

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 tells when to use this tool (to identify top traders/whales) and when not to trust it alone, pointing to get_wallet_activity as the alternative for verifying a wallet's activity. This is direct, actionable guidance.

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

get_wallet_activityWallet activity & behaviourA
Read-only

How a wallet trades: buys and sells with SOL totals, net flow, listings and bids, which marketplace (Magic Eden order book vs AMM pools; OpenSea with a key), the collections it trades most, every flip (bought then sold: hold time and P&L before fees), a behaviour label (flipper / holder / mixed / lister / quiet) with the reason, and the first purchase inside the window. With OPENSEA_API_KEY set, plain transfers are included so 'was this airdropped, gifted or bought?' gets an evidence-based answer. Every figure says which feed it came from and what that feed cannot see. Read-only; needs no key.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoMagic Eden activity pages of 100 events, newest first. Default 3.
walletYesWallet address
includeOpenSeaNoAdd OpenSea sales and transfers when OpenSea can be read (self-issued key or OPENSEA_API_KEY). Default true.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, the description discloses conditional key-dependent behavior (OpenSea only 'with a key', transfers only with OPENSEA_API_KEY set), states computed outputs (P&L before fees, behavior label with reason), and explicitly acknowledges data blind spots: 'Every figure says which feed it came from and what that feed cannot see.' This openly discloses limitations rather than hiding them, going well beyond what annotations already provide. 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?

Three sentences with the core scope front-loaded before the detail enumeration. The first sentence is a long run-on listing eight output categories, which is dense but each item earns its place for a tool this complex. Sentences two and three are tight single-purpose statements covering the key condition and provenance/auth. Slightly heavy, but appropriately sized for the breadth of what the tool returns.

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?

With no output schema, the description's enumeration carries the return-value spec, and it is impressively detailed: totals, flows, marketplace identification, flips with hold time and P&L, behavior labels with reasons, and per-figure feed provenance. The main gaps are the absence of edge-case behavior (empty wallet, no trades in window) and no sibling-routing guidance, but for a tool this broad the description is nearly self-sufficient.

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 the baseline is 3. The description adds behavioral meaning beyond the schema: it explains includeOpenSea's purpose (answering 'was this airdropped, gifted or bought?' via plain transfers), ties it to the OPENSEA_API_KEY requirement, and connects the pages parameter to the 'window' containing the first purchase. These enrich the cold schema descriptions with rationale and dependencies.

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 'How a wallet trades' and enumerates the tool's specific outputs: SOL totals, net flow, listings and bids, marketplace identification (Magic Eden order book vs AMM pools), most-traded collections, flips with hold time and P&L, and a behavior label with reason. This unmistakably differentiates it from siblings like get_wallet_holdings (what a wallet owns) and get_wallet_profile (static profile), so an agent can separate it without opening the schema. The noun-phrase opening is the only minor weakness, but the scope is precise and comprehensive.

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 provides invocation context: 'Read-only; needs no key' and a conditional behavior when OPENSEA_API_KEY is set (transfers included so airdrop/gift/purchase questions get evidence-based answers). However, it never names an alternative tool or states when NOT to use this one, leaving the agent to infer that get_wallet_holdings or get_wallet_profile cover adjacent questions. Guidance is implied but never explicit.

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

get_wallet_holdingsWallet holdingsA
Read-only

Collectibles held by a wallet, from two independent readers: Magic Eden's index (names, collections, images, listing state) and the chain's own asset index (every standard, including compressed and unlisted items a marketplace may not carry). Answers 'what does this wallet hold', 'what is in my wallet', 'does this address own anything'. The two counts are compared and any gap is named. Read-only - this server never asks for keys and cannot move anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many items to read from the marketplace index. Default 50.
walletYesWallet address

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds meaningful behavioral detail: it uses two independent readers, compares counts, and explicitly states it never asks for keys and cannot move anything. This enriches the agent's understanding of safety and scope, though it could mention pagination or 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.

Conciseness4/5

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

The description is concise but packs substantial information: purpose, dual-source behavior, question coverage, and a read-only guarantee. It is front-loaded with the main function and uses efficient phrasing, though it could be slightly 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?

For a read-only tool with a simple two-parameter schema, the description covers the core semantics, return scope, and safety profile. The absence of an output schema is compensated by explaining what the result represents (holdings from two readers with a comparison), so the agent can anticipate the response shape reasonably well.

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 both parameters are documented with clear descriptions and constraints. The description adds no additional parameter-level nuance beyond what the schema provides, so a baseline of 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 states a specific verb ('get') with a clear resource ('wallet holdings') and explicitly answers common questions. It distinguishes itself from siblings by emphasizing the dual-reader approach and coverage of unlisted/compressed assets, which is not obvious from the name alone.

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 clearly indicates the intended use case ('what does this wallet hold') and sets expectations about read-only behavior. However, it does not explicitly mention alternatives or state when not to use it (e.g., when to prefer get_wallet_profile or get_wallet_activity), leaving some inference to the agent.

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

get_wallet_profileWallet profileA
Read-only

What a wallet holds and what that means: items grouped by collection with counts and share of the wallet, which collection dominates, how many are listed or compressed, the creator royalty each collection asks for, share of total supply where a supply is known, a floor-times-count CEILING (never called a value) for the largest holdings, and the wallet's age and transaction count from the chain. Answers 'what do they collect', 'how much of X do they own', 'how big a holder are they', 'is this a fresh wallet', 'what is it worth at floor' - with each number labelled for what it is. Read-only; needs no key.

ParametersJSON Schema
NameRequiredDescriptionDefault
walletYesWallet address
maxItemsNoCap on items fetched (500 per request). Default 1000.
priceTopNoHow many of the largest collections to price at floor (one paced Magic Eden request each; registry collections add one supply read). Default 5.
includeAgeNoRead the wallet's first/last transaction from the chain (up to 3 RPC calls). Default true.

TDQS

A4.2/5.0
Behavior5/5

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

The description goes well beyond the annotations. It explicitly states 'Read-only; needs no key', aligning with readOnlyHint and openWorldHint. It discloses the 'CEILING (never called a value)' nuance, preventing misinterpretation of financial worth. It also transparently mentions pacing for external API requests ('one paced Magic Eden request each', 'up to 3 RPC calls'), informing the agent of potential latency or rate limits. This is rich behavioral disclosure beyond what annotations provide.

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 a single, information-dense paragraph. It front-loads the core purpose ('What a wallet holds and what that means') and then enumerates specific outputs and answerable questions. While somewhat lengthy, every sentence contributes distinct information; there is no redundancy or filler. It is efficiently structured for an agent to scan and understand the scope.

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 there is no output schema, the description compensates by enumerating nearly all the data points returned: grouped items, counts, shares, dominant collection, listed/compressed counts, royalties, supply share, floor ceiling, wallet age, and transaction count. It also covers usage context (read-only, no key, pacing) and the intended questions. For a tool with 4 parameters and this complexity, the description fully equips an agent to understand what to expect and how to interpret results.

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%, and each parameter (wallet, maxItems, priceTop, includeAge) has clear descriptions including defaults and constraints. The tool description itself does not add parameter-specific semantics; it focuses on outputs. However, it does provide context about why these parameters matter (e.g., priceTop controls how many collections are priced), but that is also in the schema. Thus the description adds no new parameter meaning 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.

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: analyzing a wallet's holdings, grouped by collection, with counts, dominance, listed/compressed counts, royalties, supply share, and a floor-based ceiling. It explicitly lists the questions it answers, such as 'what do they collect' and 'how big a holder are they', distinguishing it from sibling tools like get_wallet_holdings which likely just returns raw items. The verb 'profile' plus the detailed explanation of outputs makes its function unambiguous.

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 wallet profiling but does not explicitly state when to choose this tool over alternatives. It lists the kinds of insights it provides, which helps an agent infer its use case, but it never names sibling tools like get_wallet_holdings or get_collection_stats or provides exclusion criteria. The 'Read-only; needs no key' note gives some operational guidance but does not address selection among similar tools.

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

identifyIdentify anythingA
Read-only

START HERE when you do not already know what an identifier is. Takes ANY string a user might paste - a Solana address, a marketplace symbol or slug, or a plain collection name - works out what it actually is, which marketplaces list it, and which tools to call next. Works on collections that launched today and are in no registry, because it probes live sources rather than matching a hardcoded list. Returns the evidence: every source checked INCLUDING the ones that found nothing, what was not checked and why, and a confidence rating. Never report 'this does not exist' from an empty result - report what was searched.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesAn address, marketplace symbol/slug, or collection name

TDQS

A5/5.0
Behavior5/5

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

Annotations already provide readOnlyHint and openWorldHint, but the description adds significant behavioral detail: it probes live sources rather than matching a hardcoded list, returns evidence including sources that found nothing, reports what was not checked and why, and warns against reporting 'does not exist' from empty results. These are valuable traits that go beyond the annotations and are not contradicted by them.

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 front-loaded with the critical 'START HERE' directive, then efficiently covers scope, behavior, and return value. Every sentence adds value—there is no filler. It is appropriately sized for the complexity of the tool and well structured for quick comprehension.

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 there is no output schema, the description thoroughly explains what the tool returns (evidence, sources checked, confidence rating, what wasn't checked and why). It also covers edge cases like new collections and empty results. An agent has everything needed to decide when to call it and what to expect from the response.

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 schema describes the query parameter as 'An address, marketplace symbol/slug, or collection name,' which is already high coverage. The description enriches this by specifying examples (Solana address, marketplace symbol or slug, plain collection name) and clarifying that it handles strings from any user paste, making the parameter's intent and acceptable inputs even clearer.

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: to take any string and identify what it is, which marketplaces list it, and which tools to call next. It uses a specific verb ('identify') and resource (any identifier), and explicitly positions itself as the starting point for unknown identifiers, distinguishing it from siblings like search_collections or get_asset.

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?

It opens with 'START HERE when you do not already know what an identifier is,' which is an explicit usage condition. It also mentions that it works on collections that launched today and probes live sources, implying it is the go-to for unknown or unregistered identifiers. It doesn't name specific alternatives, but it says it determines 'which tools to call next,' providing routing guidance.

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

search_collectionsSearch collectionsA
Read-only

Find digital-collectible collections by name (e.g. 'candy gold series', 'batman', 'mad lads'). Returns curated entries with the identifiers other tools need (Magic Eden symbol, Core collection address). Collections not in the registry still work: pass a Magic Eden symbol or a Metaplex Core collection address directly to the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFree-text name search

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only and open-world behavior. The description adds valuable behavioral detail: it returns curated registry entries, and unregistered collections are still supported by passing identifiers directly to other tools. This goes beyond the annotations without contradicting them.

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?

Three tightly packed sentences with no filler: the first states purpose and examples, the second explains what is returnedholistically, and the third covers the open-world fallback. Every sentence earns its place and important information is front-loaded.

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 single-parameter search tool with read-only and open-world annotations, the description is complete. It tells the agent what the tool returns, why that matters for downstream tools, and how to handle collections absent from the registry. No critical calling information 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?

The schema already defines the query parameter well ('Free-text name search') with 100% coverage. The description adds helpful examples and clarifies the query expectation, but it does not substantially extend what the schema already communicates about the parameter.

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 verb and resource: 'Find digital-collectible collections by name', reinforced with concrete examples. It also distinguishes itself from sibling collection tools by stating it returns the identifiers (Magic Eden symbol, Core collection address) that other tools need.

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 clearly states when to use the tool: when searching by name, not by structured identifiers. The fallback guidance for collections not in the registry is a useful alternative path, though it does not explicitly name sibling tools or say 'use this instead of X'.

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

verify_claimVerify a claim against the chainA
Read-only

Check whether something a user was TOLD is actually true. Use this whenever a claim about a collection or asset carries stakes - a project announcing a supply, a seller saying a card has never been traded, a post claiming a wallet holds something, a quoted floor price. Returns confirmed, contradicted, or unverifiable, together with the exact numbers observed, where they were read, and instructions to reproduce the check independently - so the answer does not require trusting this server either. Willingly answers UNVERIFIABLE rather than guessing; a tool that always returns true or false will eventually return false with confidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimYesWhat kind of statement is being checked
valueNoThe claimed number - required for supply (count) and floor (SOL)
walletNoThe wallet said to own it - required for ownership claims
subjectYesCollection address for supply, asset mint for never-traded/ownership, Magic Eden symbol for floor

TDQS

A4.8/5.0
Behavior5/5

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

The description goes beyond annotations: it states the tool returns 'confirmed, contradicted, or unverifiable', provides the exact numbers and instructions to reproduce the check independently, and explicitly says it returns UNVERIFIABLE rather than guessing. This adds critical behavioral context that annotations (readOnlyHint, openWorldHint) do not cover. It also emphasizes trust independence, which is a valuable behavioral trait.

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 detailed but not bloated. It front-loads the core purpose and usage, then explains return values and the tool's cautious behavior within the same paragraph. It is a single, dense paragraph that earns its length; could be slightly more scannable, but it's effective for the complexity.

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 tool with 4 parameters, 100% schema coverage, and no output schema, the description is complete. It explains what the tool returns, how to interpret results, and how to reproduce the check, which is critical for trust. Nothing essential is missing for an agent to call it 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?

Although schema coverage is 100% (each parameter has a description), the tool description adds important context by tying the 'claim' types to the 'subject' and 'value' requirements. It clarifies that 'value' is required for supply and floor claims, and that 'wallet' is for ownership. This goes beyond the schema's individual descriptions but does not fully re-explain every parameter, so a 4 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 the tool's purpose: verify a claim a user was told against on-chain reality. It enumerates concrete example claims (supply, never-traded, ownership, floor price), which also align with the claim enum. It distinguishes itself from data-fetching siblings (like get_collection_stats) by focusing on verification of external assertions, not just retrieving data.

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 when to use: 'Use this whenever a claim about a collection or asset carries stakes' and provides examples. It does not explicitly name sibling alternatives to avoid, but it clearly implies that this is the go-to for validating assertions, while siblings (like get_floor_prices) are for direct queries. The guidance is strong enough for an agent to select correctly.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv1.17.2
    • First observedexplain_mechanics
    • First observedfind_in_group
    • First observedfind_listings
    • First observedget_asset
    • First observedget_asset_provenance
    • First observedget_asset_trust
    • First observedget_collection_holders
    • First observedget_collection_sales
    • First observedget_collection_stats
    • First observedget_floor_prices
    • First observedget_integration_recipe
    • First observedget_recent_sales
    • First observedget_source_status
    • First observedget_top_traders
    • First observedget_trending
    • First observedget_wallet_activity
    • First observedget_wallet_holdings
    • First observedget_wallet_profile
    • First observedidentify
    • First observedsearch_collections
    • First observedverify_claim

TDQS

A4.2/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have clearly distinct purposes, separating asset, collection, wallet, marketplace, and education domains. A few pairs like get_recent_sales vs get_collection_sales and get_wallet_holdings vs get_wallet_profile are related, but their descriptions and output types make the boundaries clear enough.

Naming Consistency5/5

All tool names follow a consistent lowercase snake_case verb_noun pattern, with get_ dominating and a handful of special-purpose verbs like search, find, identify, verify, and explain. There are no mixed conventions or vague generic names.

Tool Count3/5

At 21 tools, the set is above the typical well-scoped range of 3-15 and falls into the heavy zone. Each tool has a distinct role, but the server could be streamlined, especially around overlapping wallet and sales tools.

Completeness4/5

The toolset covers Solana NFT data broadly: identity resolution, asset trust, provenance, wallet activity, market stats, listings, trending, education, source health, and even integration recipes. Minor gaps exist (e.g., no bid/offer book, no trait rarity distribution, non-Core collection census), but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Solana DeFi Intelligence MCP server enabling natural language queries for wallet analytics, DeFi positions, protocol metrics, and token prices.
    8
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Hyperliquid that provides read-only on-chain wallet analytics. Enables natural-language queries about positions, fills, funding, and realized PnL for any public address.
    8
    7 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides read-only access to Solana on-chain data, enabling natural language queries for wallet balances, token holdings, prices, transactions, and more via MCP-compatible clients.
    8
    MIT