Read-only Spirit Cards MCP: PoW-mined NFT cards on Robinhood Chain — stats, cards, leaderboard.
One address for any MCP client. No sign-in needed on this server.
9 read
Grouped by tool name. At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
A read-only Model Context Protocol (MCP) server for
Spirit Cards (Proof of Card) — a proof-of-work minted collectible card game on
Robinhood Chain — mainnet chainId 4663, live since 2026-10-05.
It runs over stdio, so Claude Desktop and Cursor can launch it
with npx. It fetches live game data from the hosted web API and computes the proof-of-work
locally with viem — so an agent can inspect the collection, verify a
nonce, or even grind a valid nonce, without a wallet, a private key, or a single transaction.
Read-only. No keys, no secrets, no signing, no sending. Every network call is a plain GET.
npx spirit-cards-mcp
npm install
node src/index.mjs # starts the stdio server (logs to stderr)
The server speaks MCP over stdin/stdout and logs only to stderr — it is normally launched by an MCP client, not by hand.
Add this to claude_desktop_config.json
(~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):
{
"mcpServers": {
"spirit-cards": {
"command": "npx",
"args": ["-y", "spirit-cards-mcp"],
"env": { "SPIRIT_CARDS_API": "https://spiritcards.fun" }
}
}
}
Add this to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"spirit-cards": {
"command": "npx",
"args": ["-y", "spirit-cards-mcp"],
"env": { "SPIRIT_CARDS_API": "https://spiritcards.fun" }
}
}
}
| Env var | Default | Meaning |
|---|---|---|
SPIRIT_CARDS_API | https://spiritcards.fun | Base URL of the hosted site/API |
All data endpoints are read-only GETs:
/.well-known/ai.json — project descriptor (chain id, core contract, mechanics, links)/stats/current.json — live supply, price, required difficulty (baseBits), cooldown/api/meta/{tokenId} — card metadata/api/points — points leaderboard/api/pool — staking pool / emissions snapshot (accrued pool, split shares, vault weight)/api/recent — recent on-chain activity| Tool | Args | Description |
|---|---|---|
get_project_info | — | /.well-known/ai.json + a composed human summary |
get_collection_stats | — | Live stats: supply, price, baseBits, cooldown, paused flag |
get_card | tokenId | Card metadata (/api/meta/{tokenId}) |
get_leaderboard | limit? (default 25) | Points leaderboard, trimmed to limit |
get_pool | — | Staking pool: accrued pool, split shares, vault weight (undistributed) |
get_recent_activity | limit? (default 10) | Recent events, trimmed to limit |
verify_nonce | miner, nonce | Verify a nonce's work locally (no tx): {work, leadingZeroBits, valid} |
find_nonce | miner, maxAttempts? (≤5M) | Grind nonce 0.. until valid (~20 s wall cap) |
get_mining_guide | — | Step-by-step mint guide with live price/difficulty/cooldown |
A nonce is valid when:
work = keccak256(abi.encodePacked(uint256 chainId, address core, address miner, uint256 nonce))
leadingZeroBits(work) >= baseBits
Both verify_nonce and find_nonce compute this locally with viem's keccak256 over
concatHex([chainId, core, miner, nonce]) — byte-for-byte identical to Solidity's
abi.encodePacked.
| Prompt | Args | Description |
|---|---|---|
project_overview | — | Introduce the game to a newcomer (calls the info + stats tools) |
start_mining | wallet? | Walk through finding a nonce and the exact mint transaction |
Prefer HTTP over stdio? The same server is also hosted at:
https://spiritcards.fun/api/mcp
MIT © 2026 Spirit Cards (Proof of Card). See LICENSE.