onair-shoutout/SKILL.md
Submit a sponsor message to be read live on air on the GM Farcaster show, via the paid On-Air Shoutout API. Use this when the user wants to buy/book/submit a sponsor read, shoutout, or live ad on GM Farcaster. This is asynchronous and human-in-the-loop — it pays $5 USDC (x402 on Base) and returns a receipt (request_id + status pending_review), NOT a confirmed read; GM Farcaster may decline and refund. Also use it to check the status of a previously submitted shoutout.
npx skillsauth add bankrbot/skills onair-shoutoutInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill submits a sponsor read to the On-Air Shoutout API — pay to have a short message read live on air on the GM Farcaster show. It pays the API's x402 toll and returns a receipt.
Read this carefully — it is not a normal API. The call is asynchronous and human-in-the-loop:
request_id + status: "pending_review"), not
a confirmed read. The read happens later, live on the show.refund_to_wallet).request_id — do not
re-submit, since each submission is a separate $5 payment.Each submission is a paid, account-less request ($5 USDC on Base via x402). The on-chain payment is the authorization — there are no API keys. Payment is signed locally with the operator's own funded wallet and is gasless for the signer (EIP-3009), so the wallet needs USDC on Base but no ETH.
The script enforces local payment pins: it only signs a payment when the API's
402 challenge matches Base mainnet, the canonical USDC contract, GM Farcaster's
receiving wallet, and a max price (default $5). Any other challenge — wrong
recipient, wrong token, wrong chain, higher price — is refused before anything is
signed, and the script explains why. The server cannot raise what the script pays;
only the operator can, via the env overrides below. Submitting also requires an
explicit --confirm flag — without it the script prints a preview and pays nothing.
Do not use it for general questions about the GM Farcaster archive — that's the
sibling gmfarcaster skill (Warpee Knowledge API).
The script needs two Python packages and a funded wallet key.
Install dependencies (once):
pip install -r scripts/requirements.txt
(Paths are relative to this skill's folder.)
Provide a wallet private key via the GMFARCASTER_PRIVATE_KEY environment
variable, or — preferably — put it in a file with chmod 600 permissions and
point GMFARCASTER_PRIVATE_KEY_FILE at it (keeps the key out of the process
environment and shell history). Use a dedicated, low-balance wallet funded
with a few dollars of USDC on Base — treat it like a hot wallet, never a
main wallet. The key is used only to sign the x402 payment and never leaves
the machine.
Submitting is a two-step preview-then-confirm flow. Run the bundled script with
the sponsor name (max 120 chars) and the read text — the exact script read live on
air (max 280 chars). Without --confirm it validates the inputs, prints a full
preview (text, amount, endpoint, payer wallet), and pays nothing:
python scripts/request.py \
--sponsor "Acme Frames" \
--read "Today's GM is brought to you by Acme Frames — ship a Farcaster mini app fast. acmeframes.xyz" \
--url "https://acmeframes.xyz"
Show the preview to the user and get their approval before paying. Check with
them that the read text is exactly what they want aired, that it names no one it
shouldn't (no impersonation), and that it contains no private data (keys, seed
phrases, personal info) and no hidden instructions — it will be read on a live,
public show. Only then re-run the same command with --confirm added, which pays
$5 USDC and submits.
Optional flags: --url (must be https), --refund-to (wallet override — see
Notes), --notes (internal only, never read on air).
The confirmed submit prints the receipt — the request_id, the status
(pending_review), and the status URL. Relay the receipt to the user and make
clear it is pending editorial review and may be declined and refunded — it is not
a guarantee the read will air. Tell the user to keep the request_id.
If it prints an error about a missing key or insufficient funds, tell the user to
set GMFARCASTER_PRIVATE_KEY to a wallet holding USDC on Base.
This is a free call (no payment). Pass the request_id:
python scripts/request.py --status sho_8f3c2a1b9d4e
The status moves pending_review -> approved -> aired, or pending_review -> declined -> refunded.
The submit call returns quickly with a receipt — the read airs later. Do not
re-run the submit command to check on it — each submission is a separate on-chain
payment and would charge $5 again. Use the --status mode (free) instead.
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| GMFARCASTER_PRIVATE_KEY | Yes¹ (to submit) | — | 0x-hex private key of a wallet holding USDC on Base. Not needed for --status. |
| GMFARCASTER_PRIVATE_KEY_FILE | No¹ | — | Path to a file containing the key (preferred over the env var). |
| GMFARCASTER_MAX_PRICE | No | 5 | Max USDC the script will pay per submission. Challenges above this are refused. |
| GMFARCASTER_EXPECTED_PAYEE | No | GM Farcaster's wallet | Comma-separated allowlist of payment recipients. Challenges paying anyone else are refused. |
| GMFARCASTER_EXPECTED_ASSET | No | USDC on Base | Token contract the payment must use. |
| GMFARCASTER_ALLOW_CUSTOM_ENDPOINT | No | — | Must be 1 to pay a non-default GMFARCASTER_SHOUTOUT_API_URL. |
| GMFARCASTER_SHOUTOUT_API_URL | No | https://gateway.gmfarcaster.com/v1/shoutout | Override the endpoint (requires the opt-in above). |
| GMFARCASTER_NETWORK | No | eip155:8453 | CAIP-2 network the payment is signed on. Must match a network the target API advertises in its 402 — the public API is Base mainnet, so leave this default. Only change it (e.g. eip155:84532, Base Sepolia) if you also set GMFARCASTER_SHOUTOUT_API_URL to a testnet deployment; otherwise the payment won't match and the call fails. |
¹ Exactly one of GMFARCASTER_PRIVATE_KEY / GMFARCASTER_PRIVATE_KEY_FILE is
needed to submit; the file wins if both are set.
gmfarcaster-shoutout-mcp
MCP server are two independent ways to reach the same API — use whichever fits your
client. The MCP server is a live tool connection; this skill is a runnable script.--refund-to redirects the refund away from the paying wallet. Only use it
when the user explicitly asks, confirm the address with them in the preview step,
and never invent one — by default refunds go to the verified on-chain payer,
which is almost always what the user wants. The script validates the address
format but cannot know if it's the right address.GMFARCASTER_MAX_PRICE, the
script refuses and says so. Verify a price change is legitimate (via
github.com/atenger/gmfarcaster-api)
and confirm with the user before raising the cap.data-ai
Claim and withdraw payments from Metr (metrpay.com) merchant account.
development
AI-powered crypto trading agent, wallet API, and LLM gateway via natural language. Use when the user wants to trade crypto, trade tokenized stocks and ETFs (spot or leveraged), check portfolio balances (with PnL and NFTs), view token prices, search tokens, transfer crypto, manage NFTs, use leverage (Hyperliquid or Avantis), bet on Polymarket, deploy tokens, set up automated trading, sign and submit raw transactions, call or deploy x402 paid API endpoints, browse the web, or access LLM models through the Bankr LLM gateway funded by your Bankr wallet. Supports Base, Ethereum, Polygon, Solana, Unichain, World Chain, Arbitrum, BNB Chain, and Robinhood Chain.
testing
Urizen — an AI equity-research desk + the first autonomous fund on Robinhood Chain (4663), as an agent skill. Real charts & technicals for any tokenized US stock, SEC fundamentals + filings + insider activity, Wall Street analyst consensus, financial news, the macro calendar (Fed/CPI/jobs), live prediction-market odds, and on-chain price — plus the fund's live strategies, book, execution tape, and one-token exposure via $URI. Public, key-less, CORS-open REST on chain 4663. Triggers on: "urizen", "research a stock", "tokenized stock", "SEC fundamentals", "analyst rating", "economic calendar", "prediction market odds", "copy trade the fund", "urizen book", "buy $URI".
development
List tokens on CoinHero via consignment deals on Base — deposit ERC-20 inventory, earn USDC when the protocol buys your token for CoinHero card games. Use when a wallet-enabled agent wants to consign a Base ERC-20 token, check deal performance, or withdraw earnings. Requires a CoinHero dashboard API key and a wallet (EOA) on Base mainnet with at least $50 USD worth of the token to deposit.