> ## Documentation Index
> Fetch the complete documentation index at: https://docs.graphadvocate.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> 30 seconds from zero to first routing response.

## 0. Just want to see it work?

Open [`/chat`](https://graphadvocate.com/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:

<CodeGroup>
  ```bash curl theme={null}
  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"}]
        }
      }
    }'
  ```

  ```python python theme={null}
  import httpx, json

  r = httpx.post(
      "https://graphadvocate.com/",
      json={
          "jsonrpc": "2.0", "id": "q1", "method": "message/send",
          "params": {"message": {
              "messageId": "q1", "role": "user",
              "parts": [{"kind": "text", "text": "Wallet balance for vitalik.eth"}],
          }},
      },
  )
  print(json.dumps(r.json(), indent=2))
  ```

  ```typescript TypeScript theme={null}
  const res = await fetch("https://graphadvocate.com/", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      jsonrpc: "2.0", id: "q1", method: "message/send",
      params: { message: {
        messageId: "q1", role: "user",
        parts: [{ kind: "text", text: "Wallet balance for vitalik.eth" }],
      }},
    }),
  });
  console.log(await res.json());
  ```
</CodeGroup>

<Note>
  **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.**
</Note>

## 2. Keep going once you hit the cap

<CodeGroup>
  ```python x402 client theme={null}
  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())
  ```

  ```typescript fetch wrapper theme={null}
  import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
  import { registerExactEvmScheme } from "@x402/evm/exact/client";
  import { privateKeyToAccount } from "viem/accounts";

  const client = new x402Client();
  registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`) });

  const pay = wrapFetchWithPayment(fetch, client);

  const r = await pay("https://graphadvocate.com/route", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ request: "Uniswap V3 pools on Base" }),
  });
  console.log(await r.json());
  ```
</CodeGroup>

## 3. Use it from Claude Desktop (MCP)

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json theme={null}
{
  "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.
