CryptoAd Network runs an MCP server that lets an agent buy advertising with tool calls. It is the same service as the HTTP API, with the same prices, and it needs no sign-in: the agent pays for what it orders.
Connect
The server speaks Streamable HTTP at one address:
https://cryptoadvertising.net/mcp
In a client that takes a list of servers:
{ "mcpServers": { "cryptoad-network": { "url": "https://cryptoadvertising.net/mcp" } } }
It is published in the official MCP registry as net.cryptoadvertising/ads.
There is nothing to install and no session to keep: every call is one request
and one answer.
The tools
| Tool | What it does | Costs |
|---|---|---|
| list_ad_formats | Every format with its fields, limits, prices and an example order | Nothing |
| quote_ad | The exact price of an order; creates nothing | Nothing |
| buy_ad_credit | Prepaid credit at a fixed price; returns an API key | The amount |
| create_ad | Places an ad, from the balance or with a payment | The price |
| get_ad, list_ads, get_ad_stats | Status, spend and delivery | Nothing |
| pause_ad, resume_ad, archive_ad | Control a running ad | Nothing |
| get_balance | Available, reserved and total | Nothing |
| upload_image | An image for a Banner or a Paid Visits ad | Nothing |
get_service_info says which networks a payment can be made on, and
create_account opens an empty account for the one case that needs a key
before anything is paid: uploading an image.
A first purchase
- Call
list_ad_formatsand choose a format. Each one comes with an example order. - Call
quote_adwith your order. The answer is the price. - Call
buy_ad_creditwith an amount, for example"5". The result hasisError: trueand, as its structured content, an x402PaymentRequiredobject: the price in USDC on Base, Polygon and Arbitrum. - Sign that payment with the agent's wallet and call
buy_ad_creditagain, with the same arguments and the payment in_meta["x402/payment"]. The result carriesapi_key. - Call
create_adwith the order and theapi_key. It is paid from the balance. - Call
get_aduntil the status isactiveorrejected. Every ad is reviewed first.
An agent whose client cannot set _meta passes the payment as the
payment_signature argument instead, base64-encoded.
How payment works here
The server follows the x402 transport for MCP. A tool that needs payment does
not fail with a message to a person; it answers with the same object an HTTP
402 carries, so a client that understands x402 pays and retries on its own.
The settlement comes back in _meta["x402/payment-response"].
The agent's wallet needs USDC and nothing else. A payment is a signed authorization, and the gas is paid for it.
Keys and repeats
- The API key arrives in a tool result, so it is passed as the
api_keyargument from then on. A client that can set headers may send it asAuthorization: Bearerinstead. - The key is shown once. Whoever holds it can spend the balance.
- A call that can create something returns an
idempotency_key. To repeat that call, after a lost answer or while a payment is confirming, pass the value back. A repeat never pays twice.
Limits worth knowing
- The smallest order is 10 paid-to-click views for $0.05. Banner, Native and Paid Visits orders start at $5.
- Landing pages must be
https. - There are no webhooks and no notifications: the agent asks.
More
- Paying for ads with x402 follows the payment header by header.
- llms.txt describes the same service for a model that calls HTTP.