Resources and prompts
Two primitives beside the tools
A tool is something an agent calls. MCP has two more primitives, and the same Tempio server serves both beside its capabilities, built per request from the same verified credential.
A resource is a document, addressed by a URI of Tempio's own scheme. The URI is an identity, not a URL: nothing fetches it over the network, the client asks this server for it by name. A client that supports resources lets a person attach one to a conversation the way they attach a file, and the model then has the document in front of it without spending a tool call on it.
A prompt is a task, not a document. Asking for one composes the workspace context and the relevant playbook into a ready message and hands it back, and names the resources it embedded so a client can attach those too. A prompt does not act; it sets a model up to.
Both are filtered to the scopes on your credential exactly as the tool list is, and both read the workspace through the same org-scoped tool layer a tool call goes through. An identifier in an argument proves nothing: a record your workspace does not own is not found, whether it is asked for as a resource, as a prompt argument or as a tool parameter.
The resources
| Resource | Address | What it holds |
|---|---|---|
playbooksPlaybook index read · text/markdown | tempio://playbooksOne document | Every playbook Tempio publishes, one line each with its URI, its summary and the date a person last confirmed it. Read this first to see what the shelf holds, then read the one you need at its own URI. |
playbookA playbook read · text/markdown | tempio://playbooks/{platform}/{topic}A family; the braces are filled in per document | One published playbook as markdown: what works on a platform, or how one part of Tempio itself works. The first line says when it was last reviewed, the sources are listed at the end, and a review older than ninety days is called out in the warnings block rather than left for the reader to notice. |
helpThe Tempio catalogue read · application/json | tempio://helpOne document | The root `tempio_help` answer as JSON: the entity model, the entity x action matrix this credential can call, the draft lifecycle, the money and null rules, the warning classes, and the resources and prompts it can reach. The same answer the tool gives, as a document a client can attach to a conversation. |
account_briefAn account brief read · text/markdown | tempio://workspace/accounts/{adAccountId}/briefA family; the braces are filled in per document | What Tempio has learned about one connected ad account from its last ninety days, as markdown: coverage, totals, the recent twenty-eight days against the twenty-eight before them, the biggest campaigns, and the notes saying why a figure is missing. Money is minor units of the account's own currency. Only the accounts this credential's workspace owns are listed or readable. |
timelineThe workspace timeline read · application/json | tempio://workspace/timelineOne document | The workspace's operating calendar for today and the next 60 days, as JSON: every ad account with its resolved daily cap and yesterday's spend, and under each one a lane per live campaign and per planned flight — its flight dates, what it is running at per day, its phases and their multipliers, its envelope, every goal with a verdict, how it is pacing against plan, and any drafted flight still waiting at the gate. The same answer `get_timeline` gives for that window, as a document a client can attach to a conversation. Money is integer minor units of each account's own currency and no total crosses two of them; a ratio is null when its denominator is zero and is never zero. Only the accounts this credential's workspace owns, and this credential's person may reach, appear at all. |
brand_kitThe brand kit read · text/markdown | tempio://workspace/brand-kitOne document | The workspace's brand kit as markdown, read once per session before writing any creative copy: the six colour roles with their hex, the intent a template reads each for and the contrast a composite draws text in; the typography and its descriptor; the voice lines; the compliance-line template with its permit slots; the forbidden words; the labelled products; and every preset this workspace can generate with, one line each. When the workspace has no kit, it says so and how to make one. |
6 resources. A client that lists them sees only the ones its credential's scopes reach, and a family lists only the documents that credential's workspace owns.
Listing and reading are the ordinary MCP calls. A family — a URI with braces in it — enumerates its members through the same list call, so a client discovers the published playbooks and the ad accounts your workspace owns rather than guessing at an address:
{ "method": "resources/list" }
{ "method": "resources/read", "params": { "uri": "tempio://playbooks" } }
{ "method": "resources/read", "params": { "uri": "tempio://playbooks/tempio/draft-lifecycle" } }
{ "method": "resources/read", "params": { "uri": "tempio://workspace/accounts/1d9c4e57-3a20-4b6f-8e11-77c0d4a9b312/brief" } }The playbooks are the playbooks shelf: what Tempio keeps
about a platform, and what it keeps about its own mechanics. The catalogue is
the root tempio_help answer as JSON, so a client can attach the
whole surface description once instead of calling for it. An account brief is
the ninety-day read of one connected ad account, in that account's own
currency and minor units.
How the age of a document reaches you
Every playbook carries the day a person last confirmed it against the platform, on its first line. A document that has gone more than ninety days without a review says so rather than leaving a reader to work it out from the date, and it says so twice on purpose:
- in
_meta.warningson the read result, as the same warning objects the tool envelope carries — acode, aclass, aseverityand a sentence written as what to do about it; - and as a trailing block in the markdown itself, opened by the marker
<!-- warnings -->, one line per warning and the wordNone.when there is nothing wrong.
Most clients render the text and drop the metadata, which is the whole reason for the second copy. The marker is always present, so "no warnings" and "no warnings block" are different things and a reader can tell them apart.
The two codes this page's documents raise are playbook_stale — reviewed more
than ninety days ago, so quote the review date when you lean on the advice —
and playbook_missing, which travels with an answer about a platform that has
no playbook yet, so a model knows it is working from its own knowledge there
rather than from Tempio's. Both are info: they qualify an answer, they never
withhold one. The warning classes are the same ones
every tool result uses.
The prompts
| Prompt | Arguments | What it composes |
|---|---|---|
plan_flightPlan a flight read |
| Turn a brief into a media plan: the workspace's connections and accounts with their currencies, the planning section of each named platform's playbook, Tempio's own planning method and the money rules. It ends with the instruction to build the plan through create_media_plan and upsert_plan_item. |
review_accountReview an account read |
| Read one ad account the way Tempio would: its brief, its last twenty-eight days of metrics with every warning stated before a number, and the measurement section of its platform's playbook. |
pace_reviewReview the pace read |
| Read the workspace's timeline and the pacing of every campaign that is not on pace, then plan the budget moves that answer it — ending with propose_reallocation in dry run, so the plan is drafts a person decides and never a change anybody made. |
explain_warningsExplain warnings read |
| Turn the warnings array off a tool result into a paragraph a person can act on: what each code means, what its class and severity say about the answer it travelled with, and what to do next. |
write_change_briefWrite a change brief read |
| Write the description a reviewer reads at the gate: the drafts in the batch with what each one changes, the relevant part of the platform's playbook, and Tempio's own draft lifecycle. Name either the batch or one draft in it. |
creative_briefWrite a creative brief read |
| Turn a promo or a plan item into the copy fields for one preset, in the brand kit's voice: the kit, the preset's fields and composition rules, the house rules for creative copy and the plan item when one is named. It asks for five headline variants and the compliance line filled from the permit (or marked missing), then generate_creatives once the person picks a headline. |
6 prompts, every one of them a read. A prompt composes the workspace half of its answer through the same org-scoped tool layer a tool call goes through, so a record this credential's workspace does not own is not found.
Every one of them reads. None of them writes, drafts or approves: a prompt composes the message, and whatever the model does next goes through the capabilities under the scopes the credential actually holds.
Turning a brief into a plan
Composes the workspace's connections and ad accounts with their currencies, the planning section of each named platform's playbook, Tempio's own planning method, and the money rules — then ends by telling the model to build the plan through the planner's own capabilities.
{
"method": "prompts/get",
"params": {
"name": "plan_flight",
"arguments": {
"brief": "Spring intake for an Australian short-course provider, 25-54, enquiries",
"platforms": "meta,google",
"budgetMinor": "500000",
"currency": "AUD",
"startDate": "2026-09-21",
"endDate": "2026-10-19"
}
}
}The budget is an integer in minor units beside its currency, as it is
everywhere else in Tempio: 500000 is 5,000.00 AUD. A decimal is refused at the
argument rather than rounded.
Reading one account
Composes that account's brief, its last twenty-eight days of metrics with every warning stated before a number, and the measurement section of its platform's playbook.
{
"method": "prompts/get",
"params": {
"name": "review_account",
"arguments": { "adAccountId": "1d9c4e57-3a20-4b6f-8e11-77c0d4a9b312" }
}
}The metrics block in that message is platform-wide, not account-level. The metrics capability filters by date range and by platform and by nothing narrower, so the block covers every account your workspace holds on that platform, and the composed message says so over the figures and again in the task. Account-level figures come from the brief in the same message. The block narrows the day an account-scoped metrics read exists.
Reviewing the pace
Composes the workspace's calendar for a window you name — every ad account with its resolved daily cap and what it spent yesterday, and under each one every live campaign and planned flight with how it is tracking against plan — and then the day-by-day series for the campaigns that are off it, worst drift first.
{
"method": "prompts/get",
"params": {
"name": "pace_review",
"arguments": { "from": "2026-10-01", "to": "2026-11-30" }
}
}Every argument is optional. With no window it covers today and the next sixty days in your workspace's reporting time zone; naming one ad account narrows the whole message to it. At most ten campaigns are expanded into a full series, and the message says how many of how many that was, so you can ask for any of the rest by id. The task it hands the model ends at the allocator in dry run, which writes nothing: what that call would write is change requests waiting at the approval gate, and the task says so rather than letting a model report a budget as moved.
Making sense of a warnings array
Takes the warnings array off any result and turns it into a paragraph a
person can act on: what each code means, what its class and severity say about
the answer it travelled with, and what to do next.
{
"method": "prompts/get",
"params": {
"name": "explain_warnings",
"arguments": {
"warnings": "[{\"code\":\"never_synced\",\"class\":\"stale_sync\",\"severity\":\"degraded\",\"message\":\"This connection has never finished a sync, so there is nothing behind these numbers yet — they are unknown rather than zero.\"}]"
}
}
}A bare array of code strings is accepted too, because that is what an agent usually still has by the time it decides to ask.
Writing the brief a reviewer reads
Composes the drafts in a batch with what each one changes, the relevant part of the platform's playbook, and Tempio's own draft lifecycle. The output is the description a person reads at the gate before approving.
{
"method": "prompts/get",
"params": {
"name": "write_change_brief",
"arguments": { "correlationId": "3c7d5a90-1b48-4e62-a0f5-9d6c2e18b473" }
}
}Name either the batch or one draft in it. A draft in another workspace is not found, which is the same answer an id from another workspace gets anywhere else on this surface.
Writing the copy for a creative
Composes your workspace's brand kit — the brand-kit resource above, with its colour roles, voice, compliance-line template and forbidden words — the chosen preset's fields and composition rules, Tempio's rules for creative copy, and a plan item when you name one. The task asks for the preset's fields with five headline variants and the compliance line filled from the kit's template and your permit code.
{
"method": "prompts/get",
"params": {
"name": "creative_brief",
"arguments": {
"presetKey": "prize_hero",
"brief": "Win the gaming rig. Entries close Sunday 9pm.",
"permit": "TP/04821",
"quantity": "4"
}
}
}presetKey and brief are required. Without a permit the compliance line is
marked missing rather than invented, and the task holds off generating until a
person supplies it; a still is generated only after someone picks a headline.
Clients that have neither
Resources and prompts are optional halves of the protocol and not every client implements them. Nothing is lost: the playbooks are also two capabilities on the tool surface, reading the same published documents and carrying the same warnings, so a client with tools alone gets the same text. The MCP reference has the capability catalogue and the scopes.
MCP reference
Connect your own AI to a Tempio workspace over MCP. The two-tool surface, the capability catalogue, the result envelope, credentials and client setup.
MCP keys
Minting a key, what each scope unlocks, the tool surface a key carries, revoking one, and why a key dies with the membership that made it.