Tempio

Claude Code

Claude Code, pointed at your ad accounts

One command adds the server, a scoped key decides what it may do, and every change it proposes is a change request with a review link rather than an edit.

Point your MCP client at your workspace for 68 scoped tools, with separate keys to read, draft and approve.

Illustrative exchange

Give me the state of every connected ad account before we touch anything.
TEMPIO READ
The account brief covers ninety days per account: coverage, totals, the last twenty-eight days against the twenty-eight before them, objective mix, spend concentration, the return and cost-per-acquisition rankings inside one currency, and the weekday rhythm. It names the accounts with no brief and why, and it flags itself as stale past a week.

Illustrative exchange

What sits under the campaign that spent the most last month?
TEMPIO READ
The ad groups beneath it, then the ads, creatives or keywords beneath those, newest first. Each row carries its Tempio id, the platform's own id, its status, money in minor units of its own currency where the level holds any, and the operations that level can express — so I know what could be drafted before I draft anything.

Illustrative exchange

Draft a 25% budget cut on everything that spent over A$200 with no conversions.
TEMPIO DRAFT
Six rows match. They are written as one batch of change requests with the current amount recorded beside the new one on each. Nothing has reached an account: each one is a draft that awaits approval, and here is the review link for the batch — yours to clear, or a rule you wrote.

Connecting it

  1. 01

    Mint a workspace key

    In the app, open Settings and then MCP, and mint a key. Choose its scopes as you mint it: read on its own, read and draft together, or approve as well. The key is shown once, hashed at rest, revocable, and scoped to one workspace — which is taken from the verified key rather than from anything a tool is asked for.

  2. 02

    Add the server

    One command adds it over streamable HTTP with the key in an Authorization header. There is no SSE transport and no separate REST API to configure.

  3. 03

    Choose where the config lives

    The default scope keeps the server private to you for this project; user scope makes it available across all of your projects, still private; project scope writes it into the repository, where version control shares it — the wrong home for a bearer key. Use the default or user scope for a key.

  4. 04

    Check the handshake

    List the configured servers from the command line, or run the MCP command inside a session. Either shows whether this one connected and which tools it exposed. What the list shows is the surface chosen at the mint rather than the scopes: compact registers two tools, explicit one per capability. The scopes are proved by asking — a capability outside them answers with the scope it needs and the scopes the key holds.

  5. 05

    Ask the first question

    Start with the account brief rather than a change. It returns ninety days of context per connected account, so the agent has a baseline before it calls any number good or bad, and it says when it was computed.

Objections, answered

  • I do not want an agent with credentials to my ad accounts.

    It does not get any. The platform grants live in the workspace; the key the client holds addresses Tempio and carries only the scopes you chose. A read-and-draft key can fill a review queue and cannot apply a single change.

  • A terminal is a strange place to run advertising.

    It is the same shape as the work: read the state, propose a change, write it down, have it checked, apply it, verify it landed. What was missing was an ad platform with a review step in it, not a better tab.

  • We would lose the audit trail we have in the platform.

    You gain one. Every change request records what it changes, the state the entity was in before it, the guardrails it passed and the authority that cleared it, which is more than a platform's change history carries and it is queryable from the same client.

See the gate on your own accounts

Every change is written as a draft and held at the gate. Publishing to live accounts is in private beta.

Request early access

Why a terminal

Claude Code runs in a terminal and holds a project's context, which makes it an odd place to run advertising until you notice that most ad work is the same shape as most engineering work: read the state, decide on a change, write it down, have someone check it, apply it, verify it landed. The gap has always been that ad platforms have no such workflow. This one does.

What the connection is

Tempio's programmatic surface is a Model Context Protocol server over streamable HTTP. There is no separate REST API to learn: the in-app agent and your own client call the same org-scoped tool layer, so a tool behaves identically whichever one is holding it. The endpoint takes a bearer key you mint in the app, and the workspace is read from the verified key rather than from anything a tool is asked for — which is the whole of the multi-tenancy story, and the reason a key cannot be talked into reaching a workspace it was not minted for.

Keys carry scopes. Reading covers connections, ad accounts, campaigns, structure, media assets, metrics, drafts and media plans. Drafting creates change requests, edits them, undoes applied changes by drafting their inverse, and edits plans; nothing it writes reaches a live ad account. Approving applies or rejects a pending draft and is opt-in at the moment the key is minted. Scopes are enforced on the call rather than by hiding it: a read-only key asked to draft is refused by name, with the scope the capability needs and the scopes the key holds, so an agent is told what to ask for instead of concluding the capability does not exist.

Setting it up, and where the key lives

Mint the key first, under Settings and then MCP in the app. It is shown once, hashed at rest, revocable, and scoped to one workspace. Then add the server:

claude mcp add --transport http tempio https://app.tempio.ai/api/mcp \
  --header "Authorization: Bearer YOUR_KEY"

Where that configuration is written is a decision worth making deliberately. The default scope keeps it private to you for the current project; user scope makes the server available across all of your projects, still private; project scope writes it into a file in the repository root, which is shared through version control and is the wrong home for a bearer key. For a key, use the default or:

claude mcp add --transport http tempio https://app.tempio.ai/api/mcp --scope user \
  --header "Authorization: Bearer YOUR_KEY"

Then check the handshake rather than assuming it. Listing the configured servers from the command line shows whether this one connected; the same check inside a session shows the server and the tools it exposed. What the tool list itself shows is the surface chosen at the mint: compact registers two tools, one that describes the catalogue and one that runs it, and explicit registers each capability as a tool of its own. Both reach the same capabilities under the same scopes, so the list is a context-cost decision and the refusal is the gate.

What the first prompts return

Start with the account brief. It is ninety days of context per connected ad account — coverage, totals, a twenty-eight day period against the one before it, the objective mix, how concentrated spend is, which campaigns rank on return and which rank worst on cost per acquisition, and which weekdays are cheapest — and it exists so that an agent has a baseline before it calls a number good or bad. It says when it was computed, and it says so out loud when it is more than a week old.

After that, the reads compose the way you would expect. Blended KPIs with a per-platform breakdown for a date range. Per-campaign rows highest spend first, each in its own account's currency, carrying a marker that says whether the order is a true ranking or several currencies laid side by side. The structure beneath any campaign or ad group, each row carrying the operations that level can actually express on the platform it lives on. The media library, each asset with the id the platform holds those bytes under.

Two rules run through all of it. Money is integer minor units with an explicit currency, so nothing is divided by a hundred on a hunch. Ratios are computed when they are read from base counts, and a ratio with a zero denominator is null rather than zero — a campaign with spend and no conversions has no ROAS, and an agent that reports zero is reporting something that did not happen.

What a draft looks like from inside the client

Ask for a change and you get a change request. One call writes a whole batch in the order it applies, each entry able to name the earlier entry that creates its parent, so a campaign, an ad group and an ad arrive as one reviewable group rather than three acts that can half-succeed. What comes back is the batch, one review link for the group, and the authority that cleared it: waiting for a person, or cleared on the way in by a rule the workspace wrote.

The client's job at that point is to hand you the link rather than to keep going. A draft that needs an edit has its payload replaced whole, which re-validates it, re-stamps the currency from the target account and re-runs the guardrails — so a stopped batch is resumed rather than written again from scratch. A change that already landed is undone by drafting its exact inverse at the same gate, which means an undo is a change request like any other rather than something happening behind you.

Approving is deliberately not the same permission as drafting. Most workspaces hand their agent a key that can read and draft, and keep approval for a person or for a rule they wrote. The record says which of those cleared each row, and it never pretends a policy was a person.

The same setup run on one platform, end to end is the walkthrough for one platform, with the reads and the drafts that platform actually accepts.

What the client cannot do

It cannot see another workspace. It cannot approve anything with a key that was not minted with that permission. It cannot upload a file into an ad account's media library — the library lists what is there, and a creative references an asset by the id the platform already holds it under. And it cannot make a change take effect without something clearing it, which is the point rather than a limitation: a queue of drafts with a review link is a smaller problem than a change nobody remembers making.

The approval gate is where those drafts wait, the media plan is where a flight is shaped before any of them exist, and the MCP server page is the same story from the product's side rather than the client's.

Also available

Questions

Put frontier AI to work on every ad account you run.

Tempio connects your ad accounts into one workspace and hands your own AI the numbers and the tools. Every change it writes is a draft until you approve it, or until a rule you wrote does.

Request early access
  • Read and draft by default. Approve is a separate permission you grant.