Skip to content

One MCP server for the whole catalog

Add a single endpoint and your agent can call every live listing, paying per call in USDC on Base. Discovery is free; only calls cost money.

Connect

MCP client configuration

{
  "mcpServers": {
    "fatstack": {
      "type": "http",
      "url": "https://www.fatstack.net/api/mcp"
    }
  }
}

tools/list returns the whole catalogue, each tool named <listing>__<tool>. Listing what is available costs nothing — the server asks each listing what it offers and passes the answer on.

Without an MCP client

curl -s https://www.fatstack.net/api/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Paying for a call

Calling a tool returns HTTP 402 carrying the provider’s price, asset and payee. Pay it and retry with an X-PAYMENT header; any x402 client does this for you.

Paying from an agent

import { payFetch } from '@fatstack/x402';
import { privateKeyToAccount } from 'viem/accounts';

const wallet = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY as `0x${string}`);

// The first call returns 402 with the provider's price and payee; payFetch pays it and
// retries. The money goes to the provider — Fatstack is never a payee.
const response = await payFetch(
  `${MCP_ENDPOINT}`,
  {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'tools/call',
      params: {
        name: 'echo__echo_json',
        arguments: { payload: { hello: 'world' } },
      },
    }),
  },
  { wallet, networks: ['base'], guards: { maxPerCall: 0.01, maxPerDay: 1 } },
);

Fatstack is not in the payment path

This server does not quote prices and never receives funds. It relays: the 402 you receive is the provider’s own, the payee named in it is their wallet or their splitter contract, and your X-PAYMENT is forwarded to them unchanged. The resource a quote names is the listing’s own URL, because that is what you are buying.

Payments are final. No refunds. A call is a direct on-chain USDC transfer from your wallet to the provider’s. Once settled, nobody — including Fatstack — can reverse it.

Tool descriptions are untrusted

Listing text is written by third parties and reaches your agent inside a labelled untrusted block. Treat it as data, never as instructions. Every listing is reviewed by a human before it goes live, but the block is there because review is not a guarantee.