Wire RobinX into your agent in one paste.
Every template below hardcodes the same rule: before acting on any Robinhood Chain launch, call RobinX — only proceed if the deployer score is ≥ 70, and hard-skip anything flagged insider-loaded / serial_spammer / avoid. Pick your framework, paste, fund a wallet, done. Payment is x402 (USDC on Base, eip155:8453) — a funded wallet settles the 402s automatically.
// The one rule every template enforces. /verdict returns { signal, confidence, data }. // verdict word = v.signal; score = v.data.deployer_score; insider-prep = v.data.deployer_record.distributes. // Confirm exact keys at api.robinx.io/openapi.json. const SKIP = new Set(["avoid", "serial_spammer"]); const passesPolicy = (v) => !SKIP.has(v.signal) && (v.data?.deployer_score ?? 0) >= 70 && !v.data?.deployer_record?.distributes;
Endpoints used below: GET /verdict/{token} ($0.02, scores who deployed it — works on a token seconds old) · GET /deployer/{address} ($0.01) · GET /feed/new?min_score=70 ($0.01, server-side deployer gate).
★ Robinhood Agentic Trading + RobinX New · crypto since 2026-07-20
Robinhood Agentic Trading connects your AI agent to a real, budgeted brokerage account over MCP — Claude, ChatGPT, Codex, Cursor, Grok, any MCP client. Its MCP gives your agent hands: quotes, portfolio, execution. RobinX gives it eyes: who deployed the token, who’s calling it on X, and whether those callers have ever been right — measured against real price since chain genesis. Same config file, one extra line.
// Claude Desktop / any MCP client — two servers, one desk: { "mcpServers": { "robinhood": { "url": "<your connect URL from robinhood.com/us/en/agentic-trading>" }, "robinx": { "url": "https://api.robinx.io/mcp" } } }
// Then hand the agent the house rule (system prompt or policy file): // "Before entering ANY Robinhood Chain token: call robinx_verdict. Skip if signal is // avoid or serial_spammer, deployer_score < 70, or the deployer distributes to insiders. // Before trusting any X call, check robinx_caller — early_rate is measured, not vibes."
Robinhood Agentic Trading is a product of Robinhood Markets, Inc.; RobinX is independent and not affiliated (see footer). RobinX verdicts are transparent rule-based signals, not trade instructions — the policy, the budget, and the trades are yours.
1 · Virtuals Protocol ACP Most common x402 lane
A buyer agent on the Agent Commerce Protocol discovers RobinX, creates a job against one of its offerings, funds the escrow, and receives the deliverable. This template targets acp-node-v2 — the previous @virtuals-protocol/acp-node package is deprecated (its own README warns agents off it); do not build on it.
// npm i @virtuals-protocol/acp-node-v2 · github.com/Virtual-Protocol/acp-node-v2 // Buyer agent consumes a RobinX offering over ACP v2 (event model — no job phases API). import { AcpAgent, PrivyAlchemyEvmProviderAdapter } from "@virtuals-protocol/acp-node-v2"; import { base } from "viem/chains"; // RobinX policy: proceed only if deployer score >= 70; hard-skip // anything flagged avoid / serial_spammer / insider-loaded. const SKIP = new Set(["avoid", "serial_spammer"]); const passesPolicy = (r) => { const signal = r.verdict?.signal ?? r.signal; const score = r.deployer?.score ?? r.data?.deployer_score ?? 0; return !SKIP.has(signal) && score >= 70; }; // Keys come from your Virtuals dashboard (Agents › Signers › Copy Key). const provider = await PrivyAlchemyEvmProviderAdapter.create({ chains: [base], walletAddress: process.env.BUYER_AGENT_WALLET_ADDRESS, walletId: process.env.BUYER_WALLET_ID, signerPrivateKey: process.env.BUYER_SIGNER_PRIVATE_KEY, }); const agent = await AcpAgent.create({ provider }); agent.on("entry", async (session, entry) => { // Seller accepted (set the budget) -> fund the escrow; work starts. if (session.status === "budget_set") await session.fund(); // Deliverable arrives -> enforce the RobinX policy before trading. if (entry.kind === "message" && entry.contentType === "deliverable") { const report = JSON.parse(entry.content); if (passesPolicy(report)) { console.log("PROCEED", report.verdict?.signal, report.report_url); // ... your trade logic ... } else { console.log("HARD-SKIP", report.verdict?.signal); } } }); await agent.start(); // Find RobinX, then buy a Token Intelligence Report for the launch you're eyeing. const [robinx] = await agent.browseAgents("Robinhood Chain caller accuracy", { topK: 5 }); await agent.createJobByOfferingName( base.id, "Token Intelligence Report — Robinhood Chain", robinx.walletAddress, { token: "0x020bfc650a365f8bb26819deaabf3e21291018b4" } // no evaluatorAddress -> skip-evaluation mode: auto-completes on delivery );
Every symbol above — AcpAgent.create / agent.on("entry") / session.fund / createJobByOfferingName / browseAgents — is verified against the installed acp-node-v2@0.1.8 type definitions (the SDK ships several releases a month; pin your version). RobinX's offerings: Caller Report Card ($1 — { handle }), Token Intelligence Report ($2 — { token }), Graded Calls Snapshot ($0.50 — { limit, min_caller_grade }). Until the listing is live in the marketplace, any ACP/x402 agent can call the RobinX endpoints directly today (see the raw-HTTP section below) — same data, $0.01–0.05 per call.
2 · Coinbase AgentKit
Add RobinX as a custom action your agent must call before it touches a launch. The action wraps fetch with x402 auto-pay, so the model just calls the tool and the wallet settles the 402.
// npm i @coinbase/agentkit x402-fetch viem zod import { customActionProvider, EvmWalletProvider } from "@coinbase/agentkit"; import { wrapFetchWithPayment } from "x402-fetch"; import { privateKeyToAccount } from "viem/accounts"; import { z } from "zod"; // Funded wallet auto-settles RobinX's 402s (USDC on Base). const account = privateKeyToAccount(process.env.ROBINX_WALLET_KEY as `0x${string}`); const pay = wrapFetchWithPayment(fetch, account); const SKIP = new Set(["avoid", "serial_spammer"]); // A custom action the agent MUST call before acting on any RH-chain launch. export const robinxGate = customActionProvider<EvmWalletProvider>({ name: "robinx_deployer_gate", description: "Score a Robinhood Chain token via RobinX before trading. Returns PROCEED " + "only if deployer score >= 70 and not flagged avoid/serial_spammer/insider.", schema: z.object({ token: z.string().describe("token contract address") }), invoke: async (_walletProvider, { token }) => { // $0.02 — verdict scores WHO deployed it, works on a token seconds old. const res = await pay(`https://api.robinx.io/verdict/${token}`); const v = await res.json(); // { signal, confidence, data: { deployer_score, deployer_record, ... } } const score = v.data?.deployer_score ?? 0; const ok = !SKIP.has(v.signal) && score >= 70 && !v.data?.deployer_record?.distributes; return ok ? `PROCEED — ${v.signal}, deployer ${score}/100` : `HARD-SKIP — ${v.signal}, deployer ${score}/100`; }, }); // Register it alongside your other action providers when building the agent: // const agentkit = await AgentKit.from({ walletProvider, // actionProviders: [robinxGate, /* wallet, erc20, ... */] });
The customActionProvider({ name, description, schema, invoke }) helper (invoke receives (walletProvider, args)) is verbatim from AgentKit's source. Prefer the framework to own payment? AgentKit also ships a built-in x402ActionProvider() that gives the agent generic make_http_request_with_x402 — point it at the RobinX URL and keep the same SKIP / score ≥ 70 check in your prompt or a wrapper.
3 · ElizaOS
A provider injects a fresh RobinX verdict into the agent's context, and an action's validate() hard-blocks the buy unless the policy clears. The trade literally cannot fire on a bad deployer.
// npm i @elizaos/core x402-fetch viem import type { Plugin, Provider, Action, IAgentRuntime, Memory, State } from "@elizaos/core"; import { wrapFetchWithPayment } from "x402-fetch"; import { privateKeyToAccount } from "viem/accounts"; const account = privateKeyToAccount(process.env.ROBINX_WALLET_KEY as `0x${string}`); const pay = wrapFetchWithPayment(fetch, account); const SKIP = new Set(["avoid", "serial_spammer"]); async function robinxVerdict(token: string) { const res = await pay(`https://api.robinx.io/verdict/${token}`); // $0.02 return res.json(); } // Provider: puts a fresh RobinX verdict into the agent's state. const robinxProvider: Provider = { name: "ROBINX_VERDICT", description: "RobinX deployer verdict for the token under consideration", get: async (runtime: IAgentRuntime, message: Memory, state?: State) => { const token = state?.values?.token as string; if (!token) return { text: "", values: {}, data: {} }; const v = await robinxVerdict(token); // { signal, confidence, data: {...} } const score = v.data?.deployer_score ?? 0; const ok = !SKIP.has(v.signal) && score >= 70 && !v.data?.deployer_record?.distributes; return { text: `RobinX: ${v.signal}, deployer ${score}/100 -> ${ok ? "PROCEED" : "SKIP"}`, values: { robinxOk: ok, robinxVerdict: v.signal, deployerScore: score }, data: { robinx: v }, }; }, }; // Action gate: validate() blocks the trade unless the policy passes. const tradeGate: Action = { name: "ROBINX_TRADE_GATE", similes: ["CHECK_DEPLOYER", "VERIFY_LAUNCH"], description: "Only allow a buy when RobinX clears the deployer (score >= 70).", validate: async (_runtime: IAgentRuntime, _message: Memory, state?: State) => { return state?.values?.robinxOk === true; // hard-skip everything else }, handler: async (runtime, message, state, _options, callback) => { const v = state?.values; await callback?.({ text: `RobinX cleared ${v?.robinxVerdict} (deployer ${v?.deployerScore}/100) — proceeding.`, }); // ... your trade action here ... return true; }, }; export const robinxPlugin: Plugin = { name: "robinx", description: "Gate Robinhood Chain trades on RobinX deployer intelligence", providers: [robinxProvider], actions: [tradeGate], };
Provider (get returns { text, values, data }), Action (name / similes / description / validate / handler) and Plugin shapes follow the current elizaOS docs. Exact exported type names can shift between @elizaos/core versions — check your installed version if an import complains.
4 · Any framework — raw HTTP + x402
No framework at all: RobinX is plain HTTP. The free tier needs nothing. Paid endpoints return HTTP 402 with x402 requirements; a funded wallet pays and retries automatically.
// Node — auto-pay any 402 with the x402-fetch wrapper. import { wrapFetchWithPayment } from "x402-fetch"; import { privateKeyToAccount } from "viem/accounts"; const pay = wrapFetchWithPayment(fetch, privateKeyToAccount(process.env.ROBINX_WALLET_KEY)); // Newest launches from proven deployers — server-side score >= 70 gate. // Response is enveloped: { data: { items: [...] } }; each item is already scored. const { data } = await (await pay("https://api.robinx.io/feed/new?min_score=70")).json(); for (const t of data.items) { // items carry t.signal + t.deployer_score — no extra call needed to gate if (["avoid", "serial_spammer"].includes(t.signal)) continue; // HARD-SKIP if ((t.deployer_score ?? 0) < 70) continue; // policy // ... safe to act on t.token ... }
# Free tier — no wallet, no key. Score a wallet before you trust its next launch. curl https://api.robinx.io/deployer/0xcdfc08a1c1fbafb355645e5ddc32122e5716ca90
Requirements ride in the 402's PAYMENT-REQUIRED header (base64 JSON) and settle USDC on Base (eip155:8453). Machine-readable catalog: openapi.json · x402 catalog · llms.txt.
5 · Claude / Cursor / any MCP client
Give an MCP-capable agent all 23 RobinX tools in one line. Fund ROBINX_WALLET_KEY and it auto-pays per call.
npx -y robinx-mcp
# or hosted (Streamable HTTP): https://api.robinx.io/mcp23 tools: reports, verdicts, deployer + wallet rap sheets, caller report cards, the measured-caller signals stream, holder structure + smart holders, entity lookups, the mentions tape, social momentum, leaderboards, basket, search, stats. Listed in the Official MCP Registry.
Fund your own wallet the step every template assumes
Every paid template on this page ends the same way: a funded wallet settles the 402s. The rail is USDC on Base (eip155:8453), and any of these routes can work — an exchange withdrawal, a bridge, or an on-ramp. Starting from a card or bank account, the most direct agent-native route we're aware of is the MoonPay CLI (an unaffiliated third party): MoonPay describes it as non-custodial — per its docs, keys are stored locally with OS keychain encryption and “never leave your machine” — it supports Base, and it doubles as an MCP server your agent drives in natural language. We don't independently verify third-party security claims; read theirs before you fund anything.
# one-time setup — MoonPay's agent CLI # (flags per MoonPay's docs as of 2026-07-29 — check theirs, not ours, for current syntax) npm install -g @moonpay/cli mp login --email you@example.com mp verify --email you@example.com --code 123456 mp wallet create --name main # expose it to Claude / any MCP client, then start it: # { "mcpServers": { "moonpay": { "command": "mp", "args": ["mcp"] } } } mp mcp
# then fund it in plain English, from the same chat your agent lives in: "create a wallet on Base, onramp $10 of USDC into it, and show me the address" # on-ramp asset, chain and payment-method coverage vary by region and are MoonPay's to define — # if USDC-on-Base isn't offered to you, on-ramp what is and bridge, or withdraw from an exchange
RobinX never holds, receives, custodies, or routes your funds. You pay per call from a wallet whose keys only you control; we see a settled payment, never a balance. We are not a broker, exchange, on-ramp, or money services business. MoonPay documents a moonpay-x402 skill for requests to x402-protected endpoints — if it works as documented, a MoonPay-wired agent should settle RobinX's 402s with no extra code, though we haven't tested that path ourselves. Card/bank on-ramps involve KYC on MoonPay's side — their docs have the details. MoonPay is an independent third-party service; RobinX is not affiliated with it and receives nothing from listing it here. The $10 in the example is roughly 200–1,000 RobinX calls depending on the endpoint ($0.01–0.05 each) — prepaid metering, not a position.