Media planner
media-planner v1Builds the media plan and holds it at its versions. The plan says how the committed money splits across channels, when each channel runs and at what weight, and which audience each channel is bought against. While the flights are live, this agent keeps the running position of what has been committed and what is still free, so anyone asking whether there is money for a new line gets the answer from one place. Each version records which lines moved, by how much, and why.
What it is granted, and what it hands to a person
This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.
Sits in the briefing that opens a campaign or a planning period, and brings the current plan and the free money with it. Holds the allocate side of allocate-and-reconcile: this agent says what each channel was given, the media-buyer agent places the buys against those lines, and the spend-reconciler agent accounts for what came back billed. Runs decide-and-announce when it issues a version, so every agent working to a line hears what changed in it and from when. Requests the approval that has to pass before a change becomes a version, and the change goes in front of the signers beside the version it would replace. Answers roll-calls with what is committed, what is still free, and which lines are running behind the weight they were bought at.
What is in the package
11 skills and the systems they need, written to version 1.1.0 of the Agent Plugins standard. Nothing in these files names a product. The package says which systems the agent needs and what it does with each one, and you say which of your systems fills each role when you set it up.
# Where this abstract agent stops Does not buy anything. The media-buyer agent builds the campaigns, sets targeting and bids, starts and stops the buy, and moves money between what is running, and this agent holds the lines that buying works to. Does not set the budget the plan splits. The people who decide settle that figure in the annual plan, and the process names the version in force. Does not check an invoice against what ran, which is the spend-reconciler agent. Does not score a buy against the plan, which is the buy-check agent reading this agent's lines. Does not say what the money returned, which is the analytics agent reading the record of a run, and does not model what a different split would return, which is the forecaster agent. Does not define an audience or build a segment, which are the audience-manager and audience-operator agents. Does not commission creative or size it for a channel. Does not sign anything. ## What always goes to a person - any change to the total the plan spends, always. This agent splits the money it was given and never adds to it. - a request to commit money that is not free - a plan that cannot be filled at the rates the market is offering, said while the flights can still be changed - a channel delivering well under or well over the weight its line was bought at - a line bought against an audience the process has not approved - a change to a line after its flight has started, because results already reported against that line stop being comparable
# The records this abstract agent must leave
This is the contract. An agent implementing `media-planner` leaves the
following behind, on every run.
The plan at a numbered version, one row per line: the channel, the dates
it runs, the weight it runs at, the audience it is bought against, and
the money committed to it. Every earlier version stays readable at its
own number, so a buy can be checked against the plan it was placed
under. A change record for each version, saying which lines moved, by
how much, why, and who approved it. A dated position saying what is
committed, what has been placed, and what is still free, with the
figures those came from. Every request for money the plan could not
cover, with the amount asked for and the answer it got.
An agent that leaves less than this does not implement `media-planner`,
whatever else it does well.
# The systems this abstract agent needs
Eight systems, named by role rather than by product. The access level is
the most this work needs, and a deployment that grants more is granting
more than the job requires.
| Role | Access | What the access is for |
|---|---|---|
| the media plan record | write | Each version lands with the date it took effect, and an issued version is never edited. |
| the approved budget for the period | read | At the figure and the version it was approved at. |
| the audience definitions | read | At their versions. |
| the agreed rates, fees and discounts | read | |
| ad platforms | read | What each channel has delivered against its flight. |
| analytics platforms | read | |
| the order record | read | What has actually been placed against each line. |
| the notification channel | write | Every agent working to a line is told what changed and from when. |
There is deliberately no buying grant. This agent splits the money and
holds the lines, and the media-buyer agent places it.
Whoever builds an agent from this plugin writes the `mcp.json` that
points these roles at their own systems. Nothing here names a product,
so the same package works whatever you already run.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
"name": "media-planner",
"version": "1.0.0",
"description": "The media-planner abstract agent. Builds the media plan and holds it at its versions. The plan says how the committed money splits across channels, when each channel runs and at what weight, and which audience each channel is bought against.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/media-planner",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"marketing",
"media-plan",
"reallocate-media-spend",
"account-based-play",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "media-planner",
"agentVersion": 1,
"department": "marketing",
"abstract": true,
"works": "Sits in the briefing that opens a campaign or a planning period, and brings the current plan and the free money with it. Holds the allocate side of allocate-and-reconcile: this agent says what each channel was given, the media-buyer agent places the buys against those lines, and the spend-reconciler agent accounts for what came back billed. Runs decide-and-announce when it issues a version, so every agent working to a line hears what changed in it and from when. Requests the approval that has to pass before a change becomes a version, and the change goes in front of the signers beside the version it would replace. Answers roll-calls with what is committed, what is still free, and which lines are running behind the weight they were bought at.",
"servers": [
{
"name": "the media plan record",
"role": "media-plan-record",
"access": "write",
"needs": "Each version lands with the date it took effect, and an issued version is never edited."
},
{
"name": "the approved budget for the period",
"role": "approved-budget-for-the-period",
"access": "read",
"needs": "At the figure and the version it was approved at."
},
{
"name": "the audience definitions",
"role": "audience-definitions",
"access": "read",
"needs": "At their versions."
},
{
"name": "the agreed rates, fees and discounts",
"role": "agreed-rates-fees-and-discounts",
"access": "read"
},
{
"name": "ad platforms",
"role": "ad-platforms",
"access": "read",
"needs": "What each channel has delivered against its flight."
},
{
"name": "analytics platforms",
"role": "analytics-platforms",
"access": "read"
},
{
"name": "the order record",
"role": "order-record",
"access": "read",
"needs": "What has actually been placed against each line."
},
{
"name": "the notification channel",
"role": "notification-channel",
"access": "write",
"needs": "Every agent working to a line is told what changed and from when."
}
],
"records": [
"The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it.",
"Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under.",
"A change record for each version, saying which lines moved, by how much, why, and who approved it.",
"A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from.",
"Every request for money the plan could not cover, with the amount asked for and the answer it got."
],
"escalates": [
"any change to the total the plan spends, always. This agent splits the money it was given and never adds to it.",
"a request to commit money that is not free",
"a plan that cannot be filled at the rates the market is offering, said while the flights can still be changed",
"a channel delivering well under or well over the weight its line was bought at",
"a line bought against an audience the process has not approved",
"a change to a line after its flight has started, because results already reported against that line stop being comparable"
],
"not": [
"Does not buy anything.",
"The media-buyer agent builds the campaigns, sets targeting and bids, starts and stops the buy, and moves money between what is running, and this agent holds the lines that buying works to.",
"Does not set the budget the plan splits.",
"The people who decide settle that figure in the annual plan, and the process names the version in force.",
"Does not check an invoice against what ran, which is the spend-reconciler agent.",
"Does not score a buy against the plan, which is the buy-check agent reading this agent's lines.",
"Does not say what the money returned, which is the analytics agent reading the record of a run, and does not model what a different split would return, which is the forecaster agent.",
"Does not define an audience or build a segment, which are the audience-manager and audience-operator agents.",
"Does not commission creative or size it for a channel.",
"Does not sign anything."
],
"processes": [
{
"process": "ref/mkt/account-based-play",
"activities": [
"Set the Tiers and the Weight",
"Brief the Makers"
]
},
{
"process": "ref/mkt/display-retargeting",
"activities": [
"Set the Parameters"
]
},
{
"process": "ref/mkt/media-plan",
"activities": [
"Take in the Objective and the Budget",
"Collect What the Plan Must Carry",
"Settle the Audience to Reach",
"Draft the Candidate Mixes",
"Model Each Mix",
"Choose the Mix",
"Lay out the Flighting",
"Set the Channel Audience Targets",
"Settle What Counts as a Result",
"Get the Plan Approved",
"Hand the Plan to the Buying Agents",
"Record What the Plan Rests On"
]
},
{
"process": "ref/mkt/reallocate-media-spend",
"activities": [
"Read the Current Position",
"Name the Candidate Moves",
"Check What a Move Would Cost",
"Check the Move against the Rules",
"Amend the Media Plan",
"Tell the Agents that Read the Plan",
"Record Why the Money Moved"
]
},
{
"process": "ref/mkt/test-ad-creative",
"activities": [
"Commit the Test Budget"
]
},
{
"process": "ref/mkt/traffic-ad-creative",
"activities": [
"Set the Flights, Budgets and Rotation"
]
}
]
}
}
}
# media-planner This is an abstract agent, published as an Agent Plugin. An abstract agent is a job description rather than an implementation. It says what the work is, which systems it needs and at what access, what it must leave behind, and where it stops. Any agent that leaves the records can implement it. The plugin carries eleven skills, no `mcp.json`, and everything the abstract agent owes under `com.agentcatalog.agent/`. ## Why there is no mcp.json A conformant server entry in `mcp.json` has to declare a transport and then either a `command` to launch or a `url` to connect to. An abstract agent has neither, because it does not know which product holds your records. Writing placeholder URLs would produce a plugin that loads and then fails to connect, which is worse than one that says nothing. Section 6.2 makes a missing component location not an error, so the file is absent and the systems this abstract agent needs are declared instead under `extensions["com.agentcatalog.agent"].servers`, as a role, an access level and what the access is for. Whoever builds an agent from this plugin writes the `mcp.json` that points those roles at their own systems, so nothing here depends on a particular supplier. ## Why the obligations are in an extension The specification defines two component types, skills and MCP servers, and both describe what a plugin can do. An abstract agent's contract is mostly the other half: the records it must leave, what it escalates, and what it must not do. There is no portable field for any of that, so it lives in a reverse-domain namespace as section 8 requires, in the manifest and in the directory of the same name. ## Where this abstract agent is used `ref/mkt/account-based-play`, `ref/mkt/display-retargeting`, `ref/mkt/media-plan`, `ref/mkt/reallocate-media-spend`, `ref/mkt/test-ad-creative`, `ref/mkt/traffic-ad-creative`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/media-planner
--- name: get-the-money-committed description: Puts a split and an amount in front of the people who own the money, and records what they committed and when. Use it when running `ref/mkt/media-plan` and `ref/mkt/test-ad-creative`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Get the money committed ## What it does Puts a split and an amount in front of the people who own the money, and records what they committed and when. ## Where it happens The agent does this in three activities across two reference processes. Each one names the activity as that process words it. - **Choose the Mix** - `ref/mkt/media-plan`, activity 8 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Commit the Test Budget** - `ref/mkt/test-ad-creative`, activity 6 - [Test Ad Creative](../../../../processes/marketing/test-ad-creative.md) - **Get the Plan Approved** - `ref/mkt/media-plan`, activity 12 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: hand-the-plan-to-the-agents-that-spend description: Gives every agent that will spend against the plan the same version at the same time, and tells the agents already working to an older split what changed. Use it when running `ref/mkt/account-based-play`, `ref/mkt/media-plan` and `ref/mkt/reallocate-media-spend`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Hand the plan to the agents that spend ## What it does Gives every agent that will spend against the plan the same version at the same time, and tells the agents already working to an older split what changed. ## Where it happens The agent does this in three activities across three reference processes. Each one names the activity as that process words it. - **Brief the Makers** - `ref/mkt/account-based-play`, activity 7 - [Run Account-Based Play](../../../../processes/marketing/account-based-play.md) - **Hand the Plan to the Buying Agents** - `ref/mkt/media-plan`, activity 13 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Tell the Agents that Read the Plan** - `ref/mkt/reallocate-media-spend`, activity 13 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: name-the-candidate-moves description: Works out which lines of the plan could give money up and which lines could take it, and puts those moves forward as candidates. Use it when running `ref/mkt/reallocate-media-spend`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Name the candidate moves ## What it does Works out which lines of the plan could give money up and which lines could take it, and puts those moves forward as candidates. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Name the Candidate Moves** - `ref/mkt/reallocate-media-spend`, activity 4 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: read-the-current-position description: Reads the running position of the plan and answers what is committed, what has been spent and what is still free. Use it when running `ref/mkt/reallocate-media-spend`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Read the current position ## What it does Reads the running position of the plan and answers what is committed, what has been spent and what is still free. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Read the Current Position** - `ref/mkt/reallocate-media-spend`, activity 3 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: set-the-flighting-and-the-weights description: "Writes the running detail for each line of the plan: the dates it runs, the money it gets in each period, where it runs, and how much weight it carries against the other lines. Use it when running `ref/mkt/account-based-play` and 3 other reference processes." license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Set the flighting and the weights ## What it does Writes the running detail for each line of the plan: the dates it runs, the money it gets in each period, where it runs, and how much weight it carries against the other lines. ## Where it happens The agent does this in four activities across four reference processes. Each one names the activity as that process words it. - **Lay out the Flighting** - `ref/mkt/media-plan`, activity 9 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Set the Flights, Budgets and Rotation** - `ref/mkt/traffic-ad-creative`, activity 13 - [Traffic Ad Creative](../../../../processes/marketing/traffic-ad-creative.md) - **Set the Parameters** - `ref/mkt/display-retargeting`, activity 2 - [Run Display Retargeting Campaign](../../../../processes/marketing/display-retargeting.md) - **Set the Tiers and the Weight** - `ref/mkt/account-based-play`, activity 3 - [Run Account-Based Play](../../../../processes/marketing/account-based-play.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: settle-the-audience-to-buy-against description: Settles who the plan buys against and how many of them, then sets the audience each channel is bought against. Use it when running `ref/mkt/media-plan`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Settle the audience to buy against ## What it does Settles who the plan buys against and how many of them, then sets the audience each channel is bought against. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Set the Channel Audience Targets** - `ref/mkt/media-plan`, activity 10 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Settle the Audience to Reach** - `ref/mkt/media-plan`, activity 3 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: settle-what-counts-as-a-result description: Says what the plan is judged on and where that result is counted, so every channel is read the same way afterwards. Use it when running `ref/mkt/media-plan`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Settle what counts as a result ## What it does Says what the plan is judged on and where that result is counted, so every channel is read the same way afterwards. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Settle What Counts as a Result** - `ref/mkt/media-plan`, activity 11 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: take-in-what-the-plan-must-do description: Takes in what the money has to achieve and by when, and collects the launches and campaigns the plan has to carry. Use it when running `ref/mkt/media-plan`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Take in what the plan must do ## What it does Takes in what the money has to achieve and by when, and collects the launches and campaigns the plan has to carry. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Collect What the Plan Must Carry** - `ref/mkt/media-plan`, activity 2 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Take in the Objective and the Budget** - `ref/mkt/media-plan`, activity 1 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: test-a-proposed-move description: Works out what a proposed move would cost to make, reading the notice periods, minimums, rate tiers and cancellation terms behind it, and scores the move against the plan and the terms the buying is held to. Use it when running `ref/mkt/reallocate-media-spend`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Test a proposed move ## What it does Works out what a proposed move would cost to make, reading the notice periods, minimums, rate tiers and cancellation terms behind it, and scores the move against the plan and the terms the buying is held to. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Check What a Move Would Cost** - `ref/mkt/reallocate-media-spend`, activity 5 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) - **Check the Move against the Rules** - `ref/mkt/reallocate-media-spend`, activity 7 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: version-the-plan description: Writes a new version of the plan whenever the split changes, and holds the reason for the change, the figures behind it, the assumptions it rests on and what would reopen it. Use it when running `ref/mkt/media-plan` and `ref/mkt/reallocate-media-spend`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Version the plan ## What it does Writes a new version of the plan whenever the split changes, and holds the reason for the change, the figures behind it, the assumptions it rests on and what would reopen it. ## Where it happens The agent does this in three activities across two reference processes. Each one names the activity as that process words it. - **Amend the Media Plan** - `ref/mkt/reallocate-media-spend`, activity 9 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) - **Record What the Plan Rests On** - `ref/mkt/media-plan`, activity 14 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Record Why the Money Moved** - `ref/mkt/reallocate-media-spend`, activity 14 - [Reallocate Media Spend](../../../../processes/marketing/reallocate-media-spend.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: work-up-the-candidate-mixes description: Builds two or three ways of splitting the money across the channels and works out what each split would reach, what it would cost and what it would return. Use it when running `ref/mkt/media-plan`. license: CC-BY-4.0 metadata: agent: media-planner agent-version: "1" --- # Work up the candidate mixes ## What it does Builds two or three ways of splitting the money across the channels and works out what each split would reach, what it would cost and what it would return. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Draft the Candidate Mixes** - `ref/mkt/media-plan`, activity 6 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) - **Model Each Mix** - `ref/mkt/media-plan`, activity 7 - [Develop Media Plan](../../../../processes/marketing/media-plan.md) ## What to record The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.
Point it at your systems
To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 8 roles, and the access level beside each one is the most the work needs.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
"mcpServers": {
"media-plan-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/media-plan-record"
},
"approved-budget-for-the-period": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/approved-budget-for-the-period"
},
"audience-definitions": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/audience-definitions"
},
"agreed-rates-fees-and-discounts": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/agreed-rates-fees-and-discounts"
},
"ad-platforms": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/ad-platforms"
},
"analytics-platforms": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/analytics-platforms"
},
"order-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/order-record"
},
"notification-channel": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/notification-channel"
}
}
}
The hostnames here are a placeholder for your own. Whichever product holds each of these systems, the agent you build is yours and nobody else has to be involved in running it.
6 processes, 24 activities
The highlighted activities are the ones this abstract agent does. The other activities in each process belong to other abstract agents or to people.
Set the Tiers and the Weight · Brief the Makers
Set the Parameters
Take in the Objective and the Budget · Collect What the Plan Must Carry · Settle the Audience to Reach · Draft the Candidate Mixes · Model Each Mix · Choose the Mix · Lay out the Flighting · Set the Channel Audience Targets · Settle What Counts as a Result · Get the Plan Approved · Hand the Plan to the Buying Agents · Record What the Plan Rests On
Read the Current Position · Name the Candidate Moves · Check What a Move Would Cost · Check the Move against the Rules · Amend the Media Plan · Tell the Agents that Read the Plan · Record Why the Money Moved
Commit the Test Budget
Set the Flights, Budgets and Rotation
What it writes down
The plan at a numbered version, one row per line: the channel, the dates it runs, the weight it runs at, the audience it is bought against, and the money committed to it. Every earlier version stays readable at its own number, so a buy can be checked against the plan it was placed under. A change record for each version, saying which lines moved, by how much, why, and who approved it. A dated position saying what is committed, what has been placed, and what is still free, with the figures those came from. Every request for money the plan could not cover, with the amount asked for and the answer it got.
What it will not do
Does not buy anything. The media-buyer agent builds the campaigns, sets targeting and bids, starts and stops the buy, and moves money between what is running, and this agent holds the lines that buying works to. Does not set the budget the plan splits. The people who decide settle that figure in the annual plan, and the process names the version in force. Does not check an invoice against what ran, which is the spend-reconciler agent. Does not score a buy against the plan, which is the buy-check agent reading this agent's lines. Does not say what the money returned, which is the analytics agent reading the record of a run, and does not model what a different split would return, which is the forecaster agent. Does not define an audience or build a segment, which are the audience-manager and audience-operator agents. Does not commission creative or size it for a channel. Does not sign anything.
These limits are written into the job on purpose, so that everyone adopting the process knows which decisions stay with a person.
Who has built one, and how far each one got
Nobody has built one yet. The catalog says so rather than leaving the section off, because an empty list is a fact about the document.
implements: media-planner v1
One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
The closest things in the catalog, by description
Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.
Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.
- AI/MCP Enablement Agency MCP server · checkmycontractorquote.com · hosted · mirrored from the MCP registry AI workflow/MCP implementation package planner.
- Content Review Planner MCP server · wxt-ai.github.io · hosted · mirrored from the MCP registry Prepare a content review plan
- powerplan MCP server · cynacons.github.io · run it yourself · mirrored from the MCP registry MCP server that makes PLAN.md the operational backbone of agentic development