Paygent Paygent
Sign in

Connecting an AI agent

Give your agent an API key, and it can request and fund a virtual card on your behalf using USDG or ETH on Robinhood Chain.

1 Get your API key

Sign in to get one.

2 Connect it to Claude Desktop

Claude Desktop supports remote MCP servers on every plan, including free, with no special setup needed. Here is how to add Paygent.

  1. Open Claude Desktop and go to Settings
  2. Find Connectors (sometimes labeled MCP) and choose Add custom connector
  3. Set the Name to Paygent
  4. Set the Remote MCP server URL to your MCP URL with your API key appended as a query parameter, since some clients do not offer a separate header field:
    https://mcp.paygent.tech/sse?api_key=pgt_live_your_api_key_here
  5. Leave the OAuth fields blank, then click Add
  6. Start a new chat, confirm Paygent is enabled for that conversation (look for a tools icon near the message box), and just ask naturally. For example: "Use Paygent to create a card for me."

Claude will show you what it is about to do and ask for confirmation before calling any tool that funds or modifies something, so you stay in control at every step.

3 Or configure any other MCP client

Most MCP clients, including Claude Code and other agent frameworks, accept a config block like this instead.

{
  "mcpServers": {
    "paygent": {
      "type": "remote",
      "url": "https://mcp.paygent.tech/sse",
      "headers": {
        "Authorization": "Bearer pgt_live_your_api_key_here"
      }
    }
  }
}

4 Fund it

Send USDG or ETH on Robinhood Chain to your deposit address (shown on your dashboard, or returned by create_card below). Send anywhere between the minimum and maximum shown in the response, and a card is issued automatically for exactly what arrives. Deposits are detected automatically, with no manual step needed once funds land on chain.

5 Tool reference

ToolPurposeParameters
create_cardGet a deposit address; a card is issued automatically for whatever arrivesnone
card_detailsRetrieve live card details — card number, security code, expiry, status, and balance, once funded and activenone
card_balanceCheck just the current balance and last four digits, always fresh, no sensitive fieldsnone
card_transactionsList recent card transactionslimit (default 10, max 100)
close_cardClose the card and refund the remaining balance to your walletnone
deposit_historyView on chain deposit (top-up) historylimit (default 10, max 100)
release_holdRelease any on hold deposits to a given addressaddress (required)
wallet_balanceCurrent USDG and ETH wallet balancesnone
withdraw_linkGet a link to withdraw wallet balance externallynone
withdrawal_historyView on-chain withdrawal status historylimit (default 20, max 100)
how_it_worksGet a full explanation of funding, card issuance, top-ups, and closing a card — useful before getting started, or whenever your agent needs a refreshernone

6 Example flow

Step 1, request a card:

// Call: create_card
// Arguments: {}

// Response:
{
  "cardId": null,
  "depositAddress": "0x4384B5305D7d416D0f876e281b1FdF54062B4895",
  "depositQrCodeUrl": "https://.../qrcode.html?text=0x4384...",
  "network": "Robinhood Chain",
  "minAmount": "1.00",
  "maxAmount": "2000.00",
  "acceptedCurrencies": ["USDG", "ETH"],
  "message": "Send between $1.00 and $2000.00 worth of USDG or ETH to this address on Robinhood Chain. A card will be issued automatically for the exact amount received."
}

Step 2, send funds to depositAddress, then poll:

// Call: card_details
// Arguments: {}

// Response, before funding clears:
"No active card yet. Fund your deposit address to have one issued automatically."

// Response, once funded:
{
  "cardId": "e217e507-08e0-4ead-a3b8-a6bdbba29a16",
  "cardNumber": "4549241817900517",
  "securityCode": "892",
  "expiryMonth": "07",
  "expiryYear": "2029",
  "lastFour": "0517",
  "status": "ACTIVE",
  "balance": "5.00"
}

Step 3, check just the balance any time, lighter than card_details and with no sensitive fields:

// Call: card_balance
// Arguments: {}

// Response:
{
  "lastFour": "0517",
  "balance": "1.00",
  "status": "ACTIVE"
}

Step 4, check wallet balance any time:

// Call: wallet_balance
// Arguments: {}

// Response:
{
  "balances": [
    { "currency": "USDG", "available": "0.00", "pending": "0.00", "frozen": "0.00", "walletId": "wal_...", "updatedAt": 1783732276771 },
    { "currency": "ETH",  "available": "0.000000", "pending": "0.000000", "frozen": "0.000000", "walletId": "wal_...", "updatedAt": 1783732304919 }
  ],
  "message": "Here are your current wallet balances."
}

Step 5, ask for a full explanation any time, useful before getting started or as a refresher:

// Call: how_it_works
// Arguments: {}

// Response:
{
  "network": "Robinhood Chain",
  "acceptedCurrencies": ["USDG", "ETH"],
  "minAmount": "1.00",
  "maxAmount": "2000.00",
  "steps": [
    "Call create_card to get a deposit address.",
    "Send between $1.00 and $2000.00 worth of USDG or ETH to that address on Robinhood Chain.",
    "Once the deposit confirms on-chain, a card is issued automatically for the exact amount received — no need to specify an amount in advance.",
    "Call card_details to see the full card once it's active (card number, security code, expiry), or card_balance for a lighter, balance-only check.",
    "Sending more funds to the same deposit address after a card is already active tops up that card automatically, rather than creating a second one.",
    "Call close_card to close the card and refund any remaining balance back to your wallet.",
    "Only one active card is allowed per account at a time — close the existing one before requesting another."
  ],
  "tools": { "create_card": "...", "card_details": "...", "card_balance": "...", "...": "one line per tool" },
  "message": "That's the full picture — ask about any specific part (funding, card limits, top-ups, closing a card) and I can go deeper."
}

7 Minimal Node.js client

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

const API_KEY = process.env.PAYGENT_API_KEY; // never hardcode this

async function main() {
  const transport = new SSEClientTransport(new URL("https://mcp.paygent.tech/sse"), {
    requestInit: { headers: { Authorization: `Bearer ${API_KEY}` } }
  });
  const client = new Client({ name: "my-agent", version: "1.0.0" }, { capabilities: {} });
  await client.connect(transport);

  const created = await client.callTool({ name: "create_card", arguments: {} });
  console.log(created.content[0].text);

  await client.close();
}

main();

Frequently asked questions

How does Paygent control agent spending?
Each card funds for exactly the amount deposited, with a hard cap set per account. There is no shared balance an agent could overdraw, and no card exceeds what was actually sent.
What are Paygent virtual cards?
Real, spendable card numbers issued automatically once a deposit confirms on chain. Each one is scoped to a single funding event, with its own number, expiry, and security code.
How secure are agent payments?
Your API key is a bearer credential scoped to one account. Card details are only ever returned to a request authenticated with that key, and keys can be rotated instantly from your dashboard.
Can I close a card and get funds back?
Yes. Calling close_card closes the card and refunds any remaining balance back to your wallet.
Does Paygent support MCP integration?
Yes, natively. Connect from Claude Desktop, Claude Code, or any MCP compatible client using the config shown above.

Notes