nft/SKILL.md
SIP-009 NFT operations on Stacks L2 — list NFT holdings, get token metadata, transfer NFTs, get token owner, get collection information, and get transfer history. Transfer operations require an unlocked wallet.
npx skillsauth add aibtcdev/skills nftInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Provides SIP-009 NFT (Non-Fungible Token) operations on Stacks L2. Transfer operations require an unlocked wallet (use bun run wallet/wallet.ts unlock first). Query operations work without a wallet.
bun run nft/nft.ts <subcommand> [options]
List all NFTs owned by an address.
bun run nft/nft.ts get-holdings [--address <addr>] [--contract-id <id>] [--limit <n>] [--offset <n>]
Options:
--address (optional) — Stacks address to check (uses active wallet if omitted)--contract-id (optional) — Filter by specific NFT collection contract ID--limit (optional) — Maximum number of results (default: 20)--offset (optional) — Offset for pagination (default: 0)Output:
{
"address": "SP2...",
"network": "mainnet",
"total": 5,
"nfts": [
{ "collection": "SP2....nft-contract::my-nft", "tokenId": "u1" },
{ "collection": "SP2....nft-contract::my-nft", "tokenId": "u2" }
]
}
Get metadata for a specific NFT (SIP-016).
bun run nft/nft.ts get-metadata --contract-id <id> --token-id <n>
Options:
--contract-id (required) — NFT collection contract ID (e.g., SP2....my-nft)--token-id (required) — Token ID of the NFT (integer)Output:
{
"contractId": "SP2....my-nft",
"tokenId": 1,
"network": "mainnet",
"metadata": {
"name": "My NFT #1",
"description": "...",
"image": "https://..."
}
}
Transfer an NFT (SIP-009) to a recipient address. Requires an unlocked wallet.
bun run nft/nft.ts transfer --contract-id <id> --token-id <n> --recipient <addr> [--fee low|medium|high|<microStx>]
Options:
--contract-id (required) — NFT collection contract ID--token-id (required) — Token ID of the NFT to transfer (integer)--recipient (required) — Stacks address to send to--fee (optional) — Fee preset (low|medium|high) or micro-STX amount; auto-estimated if omittedOutput:
{
"success": true,
"txid": "abc123...",
"from": "SP2...",
"recipient": "SP3...",
"contractId": "SP2....my-nft",
"tokenId": 1,
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Get the current owner of a specific NFT.
bun run nft/nft.ts get-owner --contract-id <id> --token-id <n>
Options:
--contract-id (required) — NFT collection contract ID--token-id (required) — Token ID of the NFT (integer)Output:
{
"contractId": "SP2....my-nft",
"tokenId": 1,
"network": "mainnet",
"owner": "SP2..."
}
Get information about an NFT collection including its name, total supply, and available functions.
bun run nft/nft.ts get-collection-info --contract-id <id>
Options:
--contract-id (required) — NFT collection contract IDOutput:
{
"network": "mainnet",
"contractId": "SP2....my-nft",
"name": "my-nft",
"totalSupply": 10000,
"functions": ["transfer", "get-owner", "get-last-token-id", "get-token-uri"]
}
Get the transfer history of NFTs in a collection.
bun run nft/nft.ts get-history --contract-id <id> [--limit <n>] [--offset <n>]
Options:
--contract-id (required) — NFT collection contract ID--limit (optional) — Maximum number of results (default: 20)--offset (optional) — Offset for pagination (default: 0)Output:
{
"contractId": "SP2....my-nft",
"network": "mainnet",
"total": 150,
"events": [
{
"sender": "SP2...",
"recipient": "SP3...",
"tokenId": "u1",
"txId": "abc123...",
"blockHeight": 150000
}
]
}
SP<deployer-address>.<contract-name>development
Web of Trust operations for Nostr pubkeys — trust scoring, sybil detection, trust path analysis, neighbor discovery, follow recommendations, and network health. Free tier (wot.klabo.world, 50 req/day) with paid fallback (maximumsats.com, 100 sats via L402). Covers 52K+ pubkeys and 2.4M+ zap-weighted trust edges. Use --key-source to select nip06 (default), taproot, or stacks derivation path.
data-ai
BTC ordinals marketplace operations via Magic Eden — browse active listings, list inscriptions for sale via PSBT flow, submit signed listings, buy inscriptions, and cancel active listings. BTC ordinals only (not Solana). Mainnet-only.
testing
Pay-per-call access to LunarCrush social and market intelligence (Galaxy Score, AltRank, market cap rank, price, 24h change) via x402 on Stacks. USD-pegged pricing recomputed hourly from live STX/USD. Mainnet endpoint live; testnet supported.
devops
Detects HODLMM LP inventory drift (token-ratio imbalance from one-sided swap flow) and restores the target ratio via a corrective Bitflow swap plus a hodlmm-move-liquidity redeploy, gated by the 4h per-pool cooldown.