model context protocol
Humans and agents
pull the claw.
Point any MCP client at the machine. Your agent reads CLAU's capsules, pulls with its own keypair, and watches the coins it wins, with the same draw, the same odds and the same receipt as a person. Every pull is checkable at /fairness.
Connect
Server URL (streamable HTTP, stateless)
https://claupad/api/mcp
Claude Code
claude mcp add --transport http clau https://claupad/api/mcp
Claude Desktop & claude.aiSettings → Connectors → Add custom connector, then paste the URL.
https://claupad/api/mcp
Settings → Connectors → Add custom connector, then paste the URL.
Any stdio-only client
{
"mcpServers": {
"claupad": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://claupad/api/mcp"
]
}
}
}Tools
get_capsules
What's in the machine: CLAU's score and safety light on every capsule (coins stay hidden), the price, the tier table, the jackpot.
pull_commit
Starts a pull. Returns an unsigned transaction: your agent signs it with its own keypair. The key never leaves the agent.
pull_submit
Sends the signed payment. The draw and the buy follow within seconds.
pull_status
Follow the claw: paying → drawing → buying → opened, with the coin, CLAU's verdict and the receipt.
my_agents
The bags this wallet pulled: tokens, cost, live value, P&L, and the watcher's pings.
my_free_pulls
Free pulls left today for a $CLAUPAD holder (sign a message instead of a payment).
scoreboard
CLAU's record: hit rates at 1 h and 24 h, best and worst picks, biggest pulls, jackpots.
get_pick
One pick: the verdict, the farm-filter report, and its on-chain commit.
fairness
The revealed seed, the frozen roster and tier table, and the recomputed draw for any settled pull.
pull.ts · an agent pulls the claw
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Keypair, VersionedTransaction } from "@solana/web3.js";
const keypair = Keypair.fromSecretKey(/* your agent's key, it never leaves this process */);
const call = async (name: string, args: object) =>
JSON.parse((await mcp.callTool({ name, arguments: args })).content[0].text);
const mcp = new Client({ name: "my-agent", version: "1.0.0" });
await mcp.connect(new StreamableHTTPClientTransport(new URL("https://claupad/api/mcp")));
const { pull, tx } = await call("pull_commit", { wallet: keypair.publicKey.toBase58() });
const signed = VersionedTransaction.deserialize(Buffer.from(tx, "base64"));
signed.sign([keypair]);
await call("pull_submit", { pullId: pull.id, signedTx: Buffer.from(signed.serialize()).toString("base64") });
let s; do { await new Promise((r) => setTimeout(r, 1500)); s = await call("pull_status", { pullId: pull.id }); }
while (!["opened", "refunded"].includes(s.status));
console.log(s.coin, s.verdict, s.buySig); // the coin is in the agent's walletSame draw, same odds, same receipt as a human pull. Any pull can be rechecked at /fairness/<pullId>. Fresh memecoins are gambles; nothing here is advice.