Skip to main content

0. Just want to see it work?

Open /chat in your browser and type any onchain question — e.g. “Top Uniswap V3 pools on Base” or “Wallet balance for vitalik.eth”. No setup, no wallet, no signup. Calling it from code? Read on.

1. Ask anything

No auth, no keys, nothing to install. POST a plain-English question:
curl -X POST https://graphadvocate.com/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "q1",
    "method": "message/send",
    "params": {
      "message": {
        "messageId": "q1",
        "role": "user",
        "parts": [{"kind": "text", "text": "Wallet balance for vitalik.eth"}]
      }
    }
  }'
Free tier: 3 routing calls/day per identified sender. Identification means putting your wallet address (or other ID) in the A2A message metadata — e.g. params.metadata.sender_id or params.message.metadata.from_agent_id. Anonymous senders (no identity in metadata) pay from call 1 — there is no IP-fallback free tier.Beyond the 3-free cap, POST /route returns HTTP 402 with x402 payment requirements; any x402-aware client signs a $0.01 USDC transferWithAuthorization on Base and retries automatically. No signup, no card, no API key — ever.

2. Keep going once you hit the cap

from x402 import x402Client
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
from x402.http.clients import x402HttpxClient
from eth_account import Account
import os

client = x402Client()
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))

async with x402HttpxClient(client) as http:
    r = await http.post(
        "https://graphadvocate.com/route",
        json={"request": "Uniswap V3 pools on Base"},
    )
    print(r.json())

3. Use it from Claude Desktop (MCP)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
  "mcpServers": {
    "graph-advocate": {
      "url": "https://graphadvocate.com/mcp"
    }
  }
}
Restart Claude Desktop. Ask “use graph-advocate to find me the right subgraph for X” and the routing happens inline.