$THREE Token
io.github.nirholas/three-token-mcp · 231 stars · JavaScript · Apache-2.0
MCP server Price, hold, and burn $THREE on Solana — the first MCP server whose actions burn a token.
Install
The repo has no one-line install. Follow its README.
Published as
- npm
@three-ws/three-token-mcpstdio
From the server's entry in the official MCP Registry.
Configuration
| Name | Set as | What it is |
|---|---|---|
SOLANA_SECRET_KEYOptional · Secret | Env var | Base58 Solana secret key that signs burns (the wallet that holds the $THREE). Not needed for the read-only tools (three_price, three_balance). Treat like cash. |
SOLANA_RPC_URLOptional | Env var | Solana mainnet RPC endpoint. Defaults to the public cluster — bring your own (Helius / Quicknode / Triton) for production traffic. |
THREE_WS_BASEOptional | Env var | Base URL of the three.ws token API (serves /api/token/config and /api/token/price). Override only when self-hosting. |
MAX_BURN_USDOptional | Env var | Max USD value of $THREE a single three_burn call may destroy. |
REQUIRE_CONFIRMOptional | Env var | When on (default), three_burn refuses until re-issued with confirm:true. Set 0/false to disable the gate. |
Files
@three-ws/three-token-mcp
The first MCP server whose actions burn a token — let any AI agent price, hold, and burn $THREE on Solana.
Install · Quick start · Tools · Requirements · three.ws
A Model Context Protocol server that gives any AI assistant three $THREE primitives over stdio: read the live USD price, read a wallet's balance, and burn $THREE on-chain — split between the incinerator and the three.ws treasury, priced live via Jupiter. Deflation as an agent primitive: every
three_burncall is a real, verifiable Solana transaction that permanently removes $THREE from supply and funds the treasury.
$THREE is the only coin this server touches. Contract address (mainnet SPL): FeMbDoX7R1Psc4GEcvJdsbNbZA3bfztcyDCatJVJpump.
Why this is different
Most paid MCP servers settle in USDC. This one moves the project's own token, and the destinations are not hardcoded — they're read at runtime from the public three.ws token surface (/api/token/config, /api/token/price), so the mint, decimals, burn address, treasury, and split always track the canonical on-chain config the rest of three.ws uses. Before signing, the resolved mint is asserted to equal the canonical $THREE address above — a misconfigured or compromised endpoint cannot redirect a burn to any other token.
Install
npm install @three-ws/three-token-mcp
Run it directly with npx (no install needed):
SOLANA_SECRET_KEY=<base58> npx @three-ws/three-token-mcp
Or install globally for the three-token-mcp binary on your PATH:
npm install -g @three-ws/three-token-mcp
Quick start
Claude Code, one line:
claude mcp add three-token -- npx -y @three-ws/three-token-mcp
Claude Desktop / Cursor (claude_desktop_config.json or mcp.json):
{
"mcpServers": {
"three-token": {
"command": "npx",
"args": ["-y", "@three-ws/three-token-mcp"],
"env": {
"SOLANA_SECRET_KEY": "<base58 secret of the wallet that holds $THREE>",
"SOLANA_RPC_URL": "https://your-rpc-provider"
}
}
}
}
SOLANA_SECRET_KEY is only required for three_burn. The read-only tools (three_price, three_balance) work without it. Inspect the surface with the MCP Inspector:
npx -y @modelcontextprotocol/inspector npx @three-ws/three-token-mcp
Tools
| Tool | Type | What it does |
|---|---|---|
three_price |
read-only | Live USD price of $THREE (Jupiter primary, Birdeye fallback). Pass usd to also get the token-amount quote. |
three_balance |
read-only | $THREE + SOL balance for any pubkey (defaults to the configured signer). |
three_burn |
execution | Burn a USD-denominated amount of $THREE in one Solana tx, split incinerator/treasury. Returns the signature, breakdown, and a Solscan link. |
three_burn burns $THREE the wallet already holds. To acquire $THREE first, swap SOL → $THREE on any Solana DEX, then burn.
Safety
All three tools ship MCP tool annotations: three_price and three_balance advertise readOnlyHint: true and can be safely auto-approved; three_burn is flagged destructiveHint: true, so annotation-aware MCP clients (Claude Code, Claude Desktop, Cursor) prompt for confirmation before running it. The hints are advisory — server-side, every burn is still bounded by MAX_BURN_USD (default $100), gated by REQUIRE_CONFIRM (default on: the call refuses until re-issued with confirm: true), and the resolved mint is asserted to be canonical $THREE before signing, independent of the client.
Input parameters
three_price — usd (optional positive number: USD amount to quote into $THREE).
three_balance — pubkey (optional base58, 32–64 chars; defaults to the configured signer's address).
three_burn — usd (required positive number: USD value of $THREE to burn), burnBps (0–10000, default 5000 = 50% burn / 50% treasury; 10000 = burn everything), memo (optional, ≤120 chars; appended to the on-chain memo), secret (optional base58 signer override; defaults to SOLANA_SECRET_KEY), confirm (must be true to execute the irreversible burn when REQUIRE_CONFIRM is on).
Example
// three_price
> { "usd": 5 }
{ "price_usd": 0.0042, "quote": { "usd": 5, "token_amount": 1190.47, "atomics": "1190476190" } }
// three_burn — irreversible; confirm:true required by default
> { "usd": 5, "burnBps": 5000, "confirm": true }
{
"ok": true,
"signature": "5x...",
"explorer": "https://solscan.io/tx/5x...",
"usd": 5,
"burned": 595.23,
"legs": [
{ "role": "burn", "amount": 595.23 },
{ "role": "treasury", "amount": 595.23 }
]
}
How a burn is built
three_burn mirrors the proven three.ws browser payment flow:
GET /api/token/config→ mint, decimals, burn address, treasury.GET /api/token/price?usd=<n>→ live Jupiter price and the exact $THREE atomics.- Build one transaction: an idempotent ATA-create + SPL transfer per leg (burn + treasury), plus a memo tagging the burn on-chain. An amount that will not divide evenly at
burnBpsgives the leftover atomic unit to the burn leg, so a burn is never short of its share; withburnBps: 10000(or a config with no treasury) there is one leg and everything is destroyed. - Sign with your wallet, send, and confirm. The result reports the on-chain signature and per-leg amounts.
The server pre-checks your $THREE balance and fails fast with a clear error if it can't cover the burn — no opaque on-chain failures. Burns are bounded by MAX_BURN_USD (default $100) and gated by REQUIRE_CONFIRM (default on).
Requirements
- Node.js >= 20.
- A Solana mainnet RPC endpoint (the public cluster works for read-only; bring your own — Helius / Quicknode / Triton — for burn traffic). The endpoint must be
https(onlyhttp://localhostis accepted, for local dev validators). - For burns: a wallet holding $THREE, provided as a base58
SOLANA_SECRET_KEY(or a per-callsecret).
Environment variables
| Variable | Required | Default |
|---|---|---|
SOLANA_SECRET_KEY |
for burns only | none (FUNDER_SECRET is accepted as a fallback) |
SOLANA_RPC_URL |
no | https://api.mainnet-beta.solana.com |
THREE_WS_BASE |
no | https://three.ws |
MAX_BURN_USD |
no | 100 |
REQUIRE_CONFIRM |
no | true (set 0/false to skip the confirm gate) |
THREE_BURN_ADDRESS |
no | the Solana incinerator |
Links
- Homepage: https://three.ws
- Changelog: https://three.ws/changelog
- Issues: https://github.com/nirholas/three.ws/issues
- License: Apache-2.0, see LICENSE
Part of the three.ws SDK suite — 3D AI agents, on-chain identity, and agent payments.
Website · Changelog · GitHub
Facts
- Kind
- MCP server
- Group
- Uncategorized
- Stars
- 231
- License
- Apache-2.0
- Language
- JavaScript
- Last push
- 2026-10-12
- Forks
- 63
- MCP Registry
- io.github.nirholas/three-token-mcp
- Homepage
- three.ws
- Topics
- animation, avatar, gltf, llm, mcp, webgl, 3d-generation, ai-agents, digital-human, generative-ai, glb, image-to-3d, mcp-server, model-context-protocol, solana, text-to-3d, threejs, web-components, webxr, x402
- 1REAio.github.morluto/reaReverse engineer anything from your terminal or agent with one CLI and MCP server.125.3k
- 2com.browser-use/browser-usecom.browser-use/browser-useControl a real Chrome browser to complete any task: fill forms, extract data, book flights.117.7k
- 3World Monitorapp.worldmonitor/mcpLive markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.88.3k
- 4Scrapling MCP Serverd4vinci/scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scraplingdev86.9k
- 5Everythingmodelcontextprotocol/serversThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities.85.8k
- 6Fetchmodelcontextprotocol/serversA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.85.8k