JANUS

AdCP programmatic · buyer agent ⇄ Spectrum Reach sales agent

🛒 Janus Buyer Agent

acts for Voltaic Cycles (advertiser) · :4002

Agent reasoning

idle — run the scenario

1 · Campaign brief

The agent parses this text — try “3 weeks”, “$40k budget”, “Los Angeles and Seattle”, “nationwide”, “display only”, “70% ctv”, “keep CPM under $14”, “2 million impressions”. It also travels verbatim inside get_products. Budget field is the fallback when no $ amount is written.

Planner → media plan

2 · Seller discovery (adagents.json)

5 · Audience signals

6 · Product evaluator

7 · Buy manager

9 · Creative library

10 · Delivery monitor

11 · Optimizer

12 · Campaign report

⇄ The wire — AdCP over MCP (JSON-RPC)

every message between the two agents, in order

Protocol traffic will appear here.
adagents.json discovery, then buyer → seller calls, responses & webhooks.

📡 Spectrum Reach Sales Agent

acts for Spectrum Reach (publisher) · :4001 · illustrative simulation

Agent reasoning

idle — waiting for a buyer

2 · adagents.json (authorized agents)

Gateway · principal auth

3 · Account onboarding

4 · Inventory catalog

5 · Audience platform (first-party)

8 · Order desk (human-in-the-loop)

9 · Creative review

10 · Ad server

Reporting

How this demo works

AdCP (Ad Context Protocol) is the open standard that lets AI agents buy and sell advertising. A buyer agent (working for an advertiser) transacts with a sales agent (here, an illustrative Spectrum Reach agent selling local/regional CTV, multiscreen, and programmatic linear) using a set of well-defined tasks carried over MCP or A2A.

Buyer · Janus (:4002)

  • Brief parser (Gemma / rules)
  • Planner + evaluator
  • Buy manager — IO lifecycle
  • Creative library
  • Delivery monitor + optimizer
  • Webhook receiver /webhooks/adcp

AdCP tasks on the wire

  • adagents.json
  • sync_accounts
  • get_products (brief + refine)
  • get_signals
  • create_media_buy
  • tasks/get + webhook
  • sync_creatives
  • get_media_buy_delivery
  • update_media_buy

Seller · Spectrum Reach (:4001)

  • adagents.json — authorized agents
  • Accounts — onboarding
  • Catalog — CTV / multiscreen / linear
  • Audience — first-party signals
  • Order desk — human approval
  • Creative review · Ad server · Reporting

The 12 phases you'll see

  1. Brief — advertiser gives a goal in plain English; the agent parses budget, flight length, DMAs, channels, splits, CPM caps, goals out of the text.
  2. Discovery — the buyer reads /.well-known/adagents.json from the publisher's domain (the "robots.txt for advertising") to confirm which sales agent is authorized, then connects over MCP.
  3. Onboarding — one sync_accounts call declares the brand, operating agency, and billing — replacing portals and weeks of forms.
  4. Inventory discoveryget_products in brief mode (natural language; the seller interprets it), then a refine pass that narrows without a fresh RFP.
  5. Audience signalsget_signals: describe the audience in plain language; Spectrum returns first-party household segments with CPM uplift and coverage.
  6. Evaluation — buyer scores each product (channel fit, price vs target, delivery type, signals) and solves a capacity-aware allocation.
  7. Ordercreate_media_buy: packages with DMA + daypart + audience-signal targeting in one insertion order.
  8. Approval — guaranteed inventory ⇒ status: submitted. The order desk (a human, simulated) approves; the buyer learns via webhook, with tasks/get polling as fallback.
  9. Creativessync_creatives: one unit is rejected for an unsubstantiated claim; the agent reads the feedback, swaps a compliant variant, re-syncs, and the buy goes active.
  10. Delivery — the ad server serves 1 flight-day per second; the buyer polls get_media_buy_delivery.
  11. Optimization — if a low opening bid underpaces, the buyer raises it toward price guidance + asap pacing via update_media_buy.
  12. Wrap-up — final, invoiceable numbers vs the plan's KPI.

Spectrum Reach is represented for illustration only — the inventory, rates, audience segments, and delivery here are a simulation of its publicly-described model, not real data or an official integration. Faithful to AdCP v3 task shapes (adagents.json, accounts, signals, media-buy; envelope statuses completed / submitted / working / failed) over a simplified transport: MCP-flavored JSON-RPC on plain HTTP.