AdCP Publisher Stack.
The trade press keeps describing the agentic advertising loop. This is one — selling this site's own inventory, live, with every layer inspectable.
- Status Production · live on this site
- Protocol AdCP media_buy · MCP
- Seller sell.nofluffadvisory.com
- Signals adcp.signal-stack.io (federated sibling)
- Privacy No cookies · no profiles · session-scoped
- Floor $0 — every buy human-approved
Brief in. Delivery report out.
Nothing hidden in between.
A buyer agent discovers the seller, a brief composes a product, two gates judge the commit, approved creatives render on real essay pages, and beacons close the loop as a delivery report. Watch the circuit: one commit gets blocked by the machine, the rest wait for a human stamp. That is the whole point.
The loop the trade press
keeps describing. Built.
Agentic ad tech coverage is demand-side and demo-heavy. Roughly 30 agentic programmatic campaigns industry-wide made headlines this summer, with no buyer quotes and no delivery numbers. So this site now sells its own inventory the agentic way — and publishes every number, including the unflattering ones.
A seller agent speaks AdCP media_buy over MCP. A minimal ad server fills two fixed display slots on the essay pages. Audiences come from what a reader is actually reading this session. Every buy and every creative passes a machine gate and then a human one. The revenue does not matter at this traffic level. The reference implementation does.
Judge by what lands in the repository,
not what lands in the feed.
AdCP vs AAMP — the rule this page is held to
Six moves.
All in production.
The smoke test runs this exact sequence against production on every deploy — a $1 self-brand buy that approves, serves to a real slot, reports its impression, and cleans itself up. Fifteen steps, and a deploy doesn't ship unless all of them pass.
- get_adcp_capabilities
Discover
A buyer agent reads capabilities, formats, and the catalog over MCP. No API key needed to look — auth-gated discovery is where buying agents go to die.
- get_products + brief
Curate
A brief composes a purchasable product from synaptic segments — lexical keyword matching fused with semantic similarity against the corpus embeddings, deterministically. Same brief, same product — word order included.
- create_media_buy
Commit
Machine gate on every commit: validation blocks with machine-readable codes, eleven policy pattern groups flag. Idempotency keys replay the canonical response.
- /ad-admin
Review
Every creative and every buy waits for a human at the $0 floor. Image URL, click URL, and alt text — HTML creatives are rejected at the door.
- /serve · /px · /go
Serve & measure
Approved lines fill two fixed slots on essay pages. Beacons fire on real render; only aggregates are stored. Zero-fill is house ads, published as house-fill %.
- get_media_buy_delivery
Report
Totals, pacing against budget, and the measurement basis in plain words. The loop closes back at the buyer.
Audiences from connections,
not identifiers.
A synaptic audience is session-scoped and cookieless: derived from the connections a reader traverses — the meaning of the current page plus the trajectory of pages before it. The meaning lives in the connections, like synapses, not in a stored profile.
Each essay carries segment tags generated by deterministic rules you can read in the repo. The reader's browser keeps its own trajectory in sessionStorage and sends segment hints with each ad request; the server uses them for the decision, counts them into aggregates, and discards them. Twenty segments, every member essay listed, no inference at runtime. Signal Containerization practiced instead of preached.
That determinism stops at definition, on purpose: it's what keeps segment membership inspectable in a PR diff, not decided by a model at request time. Matching a buyer's brief against these same twenty segments is a different job — Curate fuses this catalog's keyword rules with semantic similarity against the corpus's own embeddings, resolved by rank rather than blended by score, so a brief can land on the right segment without ever using its literal words.
A running experiment on
where judgment belongs.
AdCP gates every commit with a machine check. AAMP gates above-threshold commits with a human. AdCP vs AAMP called these two untested theories of where judgment belongs — so this stack runs both at once and logs what each gate catches.
The auto-accept floor is $0 for the first month: every buy and every creative crosses my desk. In about 90 days the audit trail becomes a small public dataset on machine-gate versus human-gate outcomes. First finding, day one: the machine gate rejected my own first test creative for being 57KB over the size limit. Good.
Honest by construction.
Fetched from the agent's public endpoints as you read this. House fill is the share of impressions that went to this site's own promos instead of a paid line — published whatever it says, because a publisher this size has no business pretending otherwise. Product avails switch from labeled estimates to measured beacons only after seven observed days.
The one scoreboard here
that isn't mine.
Every number above comes from my own endpoints. This one doesn't: the AAO compliance runner probes this agent on a schedule and publishes what it finds — core protocol, media buy lifecycle, creative handling, error behaviour. The chips below read from its public API, so they say whatever it says today.
Open endpoints.
A human on the other end.
- Seller agent
sell.nofluffadvisory.com
The agent’s front door: MCP, products, formats, synaptic catalog, stats.
- Audiences
Synaptic catalog
20 session-scoped segments with every member essay listed and measured impressions riding along.
- Transparency
Serving stats
Trailing-28-day aggregates including the house-fill rate. The honest baseline, published.
- Proof
adagents.json
The publisher authorization record: this domain names its sales agent.