# AdCP Publisher Stack

One publisher, the whole agentic loop: a live AdCP seller agent, a minimal ad server, session-scoped synaptic audiences, human-gated approvals, and honest delivery numbers — all on nofluffadvisory.com, all inspectable.

> Markdown twin of https://nofluffadvisory.com/building/adcp-publisher-stack/ — text extracted from the page. Project registry: https://nofluffadvisory.com/building/

← Building

Agentic advertising · run on itself

# 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.

Open the seller agent ↗

Read the buyer's guide →

See the loop ↓

- **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

Inside this page

- Why this exists
- The loop, live
- Synaptic audiences
- Two governance gates
- Live numbers
- Third-party grade
- Poke at it

The whole loop · one operator

## 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.

Run this loop yourself, live →

Why this exists

## 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

The loop, live

## 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.

Synaptic audiences

## 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.

Two governance gates

## 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.

05 · Live numbers

## 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.

impressions · trailing 28d

house fill

synaptic segments

MCP tools live

Third-party grade

## 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.

Listed in the AAO agent registry ↗

Poke at it

## Open endpoints. A human on the other end.

- **Seller agent** — sell.nofluffadvisory.com — https://sell.nofluffadvisory.com/ — The agent’s front door: MCP, products, formats, synaptic catalog, stats.
- **Audiences** — Synaptic catalog — https://sell.nofluffadvisory.com/synaptic/catalog — 20 session-scoped segments with every member essay listed and measured impressions riding along.
- **Transparency** — Serving stats — https://sell.nofluffadvisory.com/stats/serve — Trailing-28-day aggregates including the house-fill rate. The honest baseline, published.
- **Proof** — adagents.json — https://nofluffadvisory.com/.well-known/adagents.json — The publisher authorization record: this domain names its sales agent.
- **MCP endpoint** — sell.nofluffadvisory.com/mcp — MCP tools
- **Products** — /products — catalog + brief-driven curation
- **Synaptic** — /synaptic/catalog — 20 segments, members listed
- **Serving stats** — /stats/serve — public aggregates, house fill
- **Authorization** — /.well-known/adagents.json on this domain
- **Runtime** — Cloudflare Workers · D1 · plain JS, no build
- **Tests** — unit/integration + a self-cleaning live smoke
- **Repo** — adcp-sales-agent/ in this site’s repository

Related

## The thinking behind the build.

Essay · The governance frame

AdCP vs AAMP: The Retrofit and the Greenfield

Where the two theories of judgment come from — the essay this stack turns into a running experiment.

Essay · The privacy frame

Signal Containerization

The abstraction synaptic audiences practice: signals that never leave their container.

Build · The sibling agent

AdCP Signals Adaptor

The signals side of the loop — now federating this publisher's synaptic catalog.

Run a buyer agent?

## Test against a live seller with a human on the other end.

Read the buyer's guide →

Tell me what broke →
