---
name: adorably-seller
description: Sell a dev-tool perk to developers through Adorably from the coding agent, with the Adorably seller MCP server (mcp.adorably.io). Use when signing an invited company in to Adorably, drafting, previewing, submitting, editing, pausing or resuming a sponsored offer, choosing targeting tags, adding funds or auto-recharge, integrating verified codes, unique codes or a claim handler, tracking claims, spend and analytics on Adorably, or writing sponsored explanations.
---

# Selling on Adorably

Adorably shows developers dev-tool perks inside Claude Code, matched locally to what they are building. A sponsored offer is a card (`Sponsored · <vendor>: <value>`) that the company pays for per claim from a prepaid balance. Everything is done through the seller MCP server's tools; there is no dashboard.

## Connect and sign in

```sh
claude mcp add --transport http adorably https://mcp.adorably.io/mcp
```

Selling on Adorably is invite-only: email hello@adorably.io with the address you will sign in with, and Adorably invites it. Claude Code then opens a browser sign-in with Google or GitHub (`/mcp` shows the server and signs in again). Sign in with the invited address (its verified email, any letter case): the first sign-in creates the seller account, and signing in with the same address through the other provider joins it. Any other account gets an "invite-only" page and nothing is created. Then call `whoami`: account, balance, accepted terms, approved hosts.

## The flow

1. **Approved hosts.** Adorably reviews every new landing page host by hand. Once it approves an offer, that offer's landing page host (and its subdomains; `www.` is dropped) is one of your approved hosts, and `whoami` lists them. Redirects from a landing page, the privacy policy, every claim handler fetch, the URL a handler returns and explanation sources must stay on the offer's own host or your approved hosts. An offer on an approved host can go live without waiting; one on a new host waits for review, and so does its claim handler: test and save it once the offer is approved. A landing page on a platform many people publish on (github.com, docs.google.com, medium.com and the like) is refused: link a page on your own domain.
2. **Targeting.** `suggest_targeting` with a description of the product and/or its https page. Put the `needs:` and `stack:` tags it suggests in `targeting.any`, and `has:<your product>` in `targeting.none`. `adorably://taxonomy` lists every tag.
3. **Draft.** `draft_offer`: `vendor`, `value`, `line`, `landing_url`, `claim_method` (`link`, `shared_code`, `unique_code` or `verified_code`), `category`, `category_label`, `targeting`, `price_claim_cents`; optional `price_activation_cents`, `daily_cap_cents`, `total_budget_cents`. Copy problems come back in `problems`; fix them with `update_offer`. Read `adorably://guidelines` first, and offer something exclusive to Adorably (more credits, a longer trial): terms that match the public free tier wait for a person.
4. **Preview.** `preview_offer` shows the card and the pane row as developers will see them.
5. **Funds and terms.** `add_funds` returns a Stripe Checkout link; paying accepts the seller terms (`adorably://terms`) and funds the balance. `package: "founding"` buys the founding-sponsor package while spots last. `set_auto_recharge` tops up from the saved card. `adorably://pricing` has the numbers.
6. **Submit.** `submit_offer` sends it to moderation: it goes live, waits for a person (the first offer, and any offer on a new landing page host, always does), or comes back rejected with what to change. `adorably://prohibited` lists what is refused.
7. **Integrate.** `get_integration_guide` with your `framework` (`express`, `nextjs`, `fastapi`, `rails`, `go`, `generic`) and `method`: for verified codes it gives the redeem endpoint, the code and your API key (shown once; `rotate_key: true` replaces it). For unique codes, `upload_codes`. For a personal link per claim, a claim handler: use the `adorably-claim-handlers` skill, debug it with `test_claim_handler` (saves nothing; `fetch_mocks` fakes your API's failures) and save it with `set_claim_handler` (it runs on every claim that shares an email; claims without one open the plain landing URL). The two share 60 handler runs an hour per seller. Everyone who can use the seller account can run handlers with its saved secrets, and so read them.
8. **Track.** `list_claims` (each claim: when, cost, activation, handler status, credits; never who), `get_analytics` (shown, eligible, claims, activations, spend, handler failures, day by day), `get_balance` (ledger and the Stripe billing portal).
9. **Change.** `update_offer` (a live offer is moderated again on save), `pause_offer` and `resume_offer`.

## Good to know

- Developers see a paid offer only when their project matches its targeting; price only breaks ties between equally good matches. Every paid card is labeled Sponsored.
- Claims flagged as suspicious are credited back automatically. To dispute a claim, email hello@adorably.io with the claim id and why; there is no tool for it.
- For anything else (billing, a review you are waiting on), `contact_support`; the answer comes by email.
- Resources on the server: `adorably://guidelines`, `adorably://taxonomy`, `adorably://prohibited`, `adorably://pricing`, `adorably://terms`, `adorably://claim-handler`, `adorably://claim-handler.d.ts`, `adorably://claim-handler-examples`, and these skills as `adorably://skills/adorably-seller` and `adorably://skills/adorably-claim-handlers`.

## Sponsored explanations

Make your case to the developer in your own words. When a developer presses Explain on your perk, Adorably runs `explain(input)` from your claim handler, next to `handle(input)`. It gets the offer and only the stack tags of their project that your brief targets (like `has:vercel`), plus your brief. Inside the sandbox it calls models through an OpenRouter-compatible API that Adorably hosts at `https://openrouter.adorably.local/api/v1`, with `fetch`, `XMLHttpRequest`, any OpenRouter or OpenAI client, or an agent harness pointed at it. There's no API key to manage; the inference is billed to your balance at cost plus a margin, inside the offer's daily cap and budget. With no `explain` of your own, a default one writes from your brief.

First write the brief with `set_explanation_brief`: up to 30 facts, each with its source URL, the stack tags it is for, and the competitors you may name. You are responsible for every claim in it. The founder reviews every brief before it goes live. Your code reads the model's answer first. Return `{ message, sources, cta_label }` to show it, or `null` to skip it. It appears as a message from you, headed "From <your company> (sponsored)" with your landing page's host, after Adorably's checks (sources on your approved hosts or in the brief, no disparagement, a model check that every claim is in your facts). Test it with `test_claim_handler` and `explain: { tags }`. The `adorably-claim-handlers` skill has the code.
