Agent-native crypto ads: reach real crypto users from $0.05, paid in USDC via x402. No account.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ends an ad for good (Banner, Native, Paid Visits). What it has not spent returns to the balance. It cannot be started again.
The id of an ad of this account.
The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http ads https://cryptoadvertising.net/mcp
Ends an ad for good (Banner, Native, Paid Visits). What it has not spent returns to the balance. It cannot be started again.
| Argument | Type | Description |
|---|---|---|
| ad_id* | integer | The id of an ad of this account. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [
"ad_id"
],
"properties": {
"ad_id": {
"type": "integer",
"minimum": 1,
"description": "The id of an ad of this account."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}Buys prepaid ad credit at a fixed price: amount_usd in USDC, 1 USDC = $1.00 of credit (for example 5, 10, 25, 50, 100). The first call returns isError with the x402 PaymentRequired object; call again with the signed payment. Without an API key the paid result carries api_key: the key of a new account whose balance is the credit, shown once. With an API key the credit is added to that account. Orders placed with the key are then paid from the balance, with no further payment.
| Argument | Type | Description |
|---|---|---|
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
| amount_usd* | string | Whole dollars ("25") or two decimals ("25.00"). |
| idempotency_key | string | Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it. |
| payment_signature | string | The x402 PaymentPayload for the requirement an earlier call of this tool returned, as base64-encoded JSON (the value of an HTTP PAYMENT-SIGNATURE header). An x402-aware MCP client sends the payload in _meta["x402/payment"] instead and leaves this out. |
{
"type": "object",
"required": [
"amount_usd"
],
"properties": {
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
},
"amount_usd": {
"type": "string",
"pattern": "^[1-9][0-9]{0,8}(\\.[0-9]{2})?$",
"description": "Whole dollars (\"25\") or two decimals (\"25.00\")."
},
"idempotency_key": {
"type": "string",
"description": "Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it."
},
"payment_signature": {
"type": "string",
"description": "The x402 PaymentPayload for the requirement an earlier call of this tool returned, as base64-encoded JSON (the value of an HTTP PAYMENT-SIGNATURE header). An x402-aware MCP client sends the payload in _meta[\"x402/payment\"] instead and leaves this out."
}
},
"additionalProperties": false
}Creates an anonymous account with a zero balance and returns its API key, shown once. Only needed to upload an image before paying for anything (a Paid Visits ad needs one); otherwise use buy_ad_credit or create_ad, which create the account with the first payment.
| Argument | Type | Description |
|---|---|---|
| idempotency_key | string | Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it. |
{
"type": "object",
"required": [],
"properties": {
"idempotency_key": {
"type": "string",
"description": "Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it."
}
},
"additionalProperties": false
}Places an ad order. With an API key whose balance covers the price, it is paid from the balance. Otherwise the result is isError with the x402 PaymentRequired object for the exact price: sign it and call this tool again with the same order and the payment (in _meta["x402/payment"], or as payment_signature). Without an API key the paid result carries api_key, the key of the new account that owns the ad: store it, it is shown once. The ad goes to review; poll get_ad.
| Argument | Type | Description |
|---|---|---|
| order* | object | |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
| idempotency_key | string | Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it. |
| payment_signature | string | The x402 PaymentPayload for the requirement an earlier call of this tool returned, as base64-encoded JSON (the value of an HTTP PAYMENT-SIGNATURE header). An x402-aware MCP client sends the payload in _meta["x402/payment"] instead and leaves this out. |
{
"type": "object",
"required": [
"order"
],
"properties": {
"order": {
"type": "object",
"required": [
"product",
"name",
"landing_url",
"ad_title"
],
"properties": {
"name": {
"type": "string",
"description": "Your name for the order."
},
"bid_usd": {
"type": "string",
"description": "Decimal string. Defaults to the minimum."
},
"product": {
"enum": [
"PTC",
"Sponsored Listing",
"Banner",
"Native",
"Paid Visits"
],
"type": "string",
"description": "The ad format. Fields, limits and prices: GET /api/v1/formats."
},
"ad_title": {
"type": "string"
},
"image_id": {
"type": "integer"
},
"targeting": {
"type": "object"
},
"landing_url": {
"type": "string",
"description": "https only."
},
"pricing_model": {
"enum": [
"CPC",
"CPM"
],
"type": "string"
},
"ad_description": {
"type": "string"
},
"product_options": {
"type": "object"
},
"daily_budget_usd": {
"type": "string"
},
"total_budget_usd": {
"type": "string",
"description": "The most the ad can spend, and the price."
}
}
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
},
"idempotency_key": {
"type": "string",
"description": "Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it."
},
"payment_signature": {
"type": "string",
"description": "The x402 PaymentPayload for the requirement an earlier call of this tool returned, as base64-encoded JSON (the value of an HTTP PAYMENT-SIGNATURE header). An x402-aware MCP client sends the payload in _meta[\"x402/payment\"] instead and leaves this out."
}
},
"additionalProperties": false
}One ad of the account: status (in_review, active, paused, rejected, completed, archived), spend, what remains, and the reason if it was rejected.
| Argument | Type | Description |
|---|---|---|
| ad_id* | integer | The id of an ad of this account. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [
"ad_id"
],
"properties": {
"ad_id": {
"type": "integer",
"minimum": 1,
"description": "The id of an ad of this account."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}Delivery of one ad: totals and a daily series (impressions, clicks, visits, spend).
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| ad_id* | integer | The id of an ad of this account. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [
"ad_id"
],
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1
},
"ad_id": {
"type": "integer",
"minimum": 1,
"description": "The id of an ad of this account."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}The account's balance in USD: available, reserved by ads in review or live, and total.
| Argument | Type | Description |
|---|---|---|
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [],
"properties": {
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}What this service is, whether payments are available, and on which networks a payment can be made (USDC, x402), with the smallest and largest payment.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}The catalog: every ad format (PTC, Sponsored Listing, Banner, Native, Paid Visits) with its fields, limits, pricing models, minimum bids, minimum order, image rules and an example order with its price. Read this before building an order.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}The account's ads, newest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| before | integer | Only ads with an id below this one. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"before": {
"type": "integer",
"minimum": 1,
"description": "Only ads with an id below this one."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}Pauses an active ad (Banner, Native, Paid Visits). Its budget stays reserved.
| Argument | Type | Description |
|---|---|---|
| ad_id* | integer | The id of an ad of this account. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [
"ad_id"
],
"properties": {
"ad_id": {
"type": "integer",
"minimum": 1,
"description": "The id of an ad of this account."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}Validates an order and returns its exact price in USD with a breakdown. Creates nothing and costs nothing. An invalid order is answered with the code of the problem and the field it is in.
| Argument | Type | Description |
|---|---|---|
| order* | object |
{
"type": "object",
"required": [
"order"
],
"properties": {
"order": {
"type": "object",
"required": [
"product",
"name",
"landing_url",
"ad_title"
],
"properties": {
"name": {
"type": "string",
"description": "Your name for the order."
},
"bid_usd": {
"type": "string",
"description": "Decimal string. Defaults to the minimum."
},
"product": {
"enum": [
"PTC",
"Sponsored Listing",
"Banner",
"Native",
"Paid Visits"
],
"type": "string",
"description": "The ad format. Fields, limits and prices: GET /api/v1/formats."
},
"ad_title": {
"type": "string"
},
"image_id": {
"type": "integer"
},
"targeting": {
"type": "object"
},
"landing_url": {
"type": "string",
"description": "https only."
},
"pricing_model": {
"enum": [
"CPC",
"CPM"
],
"type": "string"
},
"ad_description": {
"type": "string"
},
"product_options": {
"type": "object"
},
"daily_budget_usd": {
"type": "string"
},
"total_budget_usd": {
"type": "string",
"description": "The most the ad can spend, and the price."
}
}
}
},
"additionalProperties": false
}Resumes a paused ad: it serves again, within what is left of its budget.
| Argument | Type | Description |
|---|---|---|
| ad_id* | integer | The id of an ad of this account. |
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
{
"type": "object",
"required": [
"ad_id"
],
"properties": {
"ad_id": {
"type": "integer",
"minimum": 1,
"description": "The id of an ad of this account."
},
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
}
},
"additionalProperties": false
}Stores an image for a Paid Visits ad (required there) or a Banner ad (optional; PNG, JPEG or GIF of exactly one banner size, see list_ad_formats) and returns its id, to send as image_id in the order. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| api_key | string | The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header. |
| image_base64* | string | The image file, base64-encoded: PNG, JPEG, WebP or GIF, at most 500 KB. |
| idempotency_key | string | Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it. |
{
"type": "object",
"required": [
"image_base64"
],
"properties": {
"api_key": {
"type": "string",
"description": "The API key of the account (can_live_...). Optional when this MCP connection sends it as the Authorization: Bearer header."
},
"image_base64": {
"type": "string",
"description": "The image file, base64-encoded: PNG, JPEG, WebP or GIF, at most 500 KB."
},
"idempotency_key": {
"type": "string",
"description": "Only to REPEAT an earlier call of this tool (a lost answer, a payment still confirming): the idempotency_key that call returned. Leave it out for a new call; the server then makes a random one and returns it."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.