Skip to content

live/stable

Get counted

Add the label to your agent's transactions with the MCP server or the SDKs, in two minutes.

Get counted

MCP (Claude Desktop, Claude Code, Cursor)

Add the Pulse MCP server to your assistant's config with the RPC and a key you control. Every action the assistant takes on Robinhood Chain — transfer, swap, 402 payment — is labelled with framework 0x0001.

{
  "mcpServers": {
    "pulse": {
      "command": "npx",
      "args": ["-y", "@pulse/mcp"],
      "env": {
        "RPC_HTTP": "https://rpc.mainnet.chain.robinhood.com",
        "PRIVATE_KEY": "0x...",
        "AGENT_NAME": "my-assistant",
        "AUTONOMOUS": "false",
        "SPEND_LIMIT_USD_PER_DAY": "50"
      }
    }
  }
}

TypeScript

import { createPulse, deriveAgentId } from '@pulse/sdk';
import { createWalletClient, createPublicClient, http } from 'viem';

const pulse = createPulse({
  agentId: deriveAgentId(operator, 'price-watcher'),
  flags: { autonomous: true },   // no human approves each send
  // flags: { test: true }       // in staging: excluded from public numbers
});

const publicClient = createPublicClient({ transport: http('https://rpc.mainnet.chain.robinhood.com') });
const wallet = pulse.wrap(walletClient, publicClient);

// Labelled, simulated first, and sent unlabelled if the label would break it.
await wallet.sendTransaction({ to: recipient, value: 1_000_000n });

Python

from pulse_sdk import Pulse, derive_agent_id
from web3 import Web3

w3 = Web3(Web3.HTTPProvider("https://rpc.mainnet.chain.robinhood.com"))

pulse = Pulse(
    agent_id=derive_agent_id(operator, "price-watcher"),
    autonomous=True,   # no human approves each send
    # test=True        # in staging: excluded from public numbers
    w3=w3,
)

account = pulse.wrap(account)
account.send_transaction({"to": recipient, "value": 1_000_000})

Then claim your ID

Labelling gets you counted. Claiming your agent ID (a wallet signature) gets you a dashboard, sender binding so nobody else can post as your agent, and, once staking is live, the verified badge. See Claim and dashboard.

Safety

The SDK appends the label only where trailing calldata is safe, simulates first, and falls back to an untagged send with a warning if the tagged call would revert. The list of default-safe call types is in the spec.