Sign in
abstract agent · marketing · 6 processes · plugin 1.0.0

Media planner

media-planner v1

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

The abstract agent

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.

WORKS INref/mkt/account-based-playref/mkt/display-retargetingref/mkt/media-planGRANTEDthe media plan recordwrite — each version lands with the date it tothe approved budget for the periodread — at the figure and the version it was apthe audience definitionsread — at their versionsthe agreed rates, fees and discountsreadad platformsread — what each channel has delivered againstanalytics platformsreadthe order recordread — what has actually been placed against ethe notification channelwrite — every agent working to a line is told THE ABSTRACT AGENTmedia-plannerv1builds the media plan…HANDS TO A PERSONany change to the total…a person decidesa request to commit money…a person decidesa plan that cannot be…a person decidesa channel delivering well…a person decidesa line bought against an…a person decidesa change to a line after…a person decidesMUST FOLLOWallocate-and-reconciledecide-and-announcebriefingapprovalroll call

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.

The plugin

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.

media-planner · 16 files · 1.0.0
com.agentcatalog.agent/NOT.mdWhat the agent does not do, and when it asks a person.
# 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
com.agentcatalog.agent/RECORDS.mdThe records the agent must leave behind.
# 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.
com.agentcatalog.agent/SERVERS.mdThe systems the agent needs, by role rather than by product.
# 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.
plugin.jsonThe manifest. It lists the skills and the systems the agent needs.
{
  "$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"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# 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
skills/get-the-money-committed/SKILL.mdPuts 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`.
---
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`.
skills/hand-the-plan-to-the-agents-that-spend/SKILL.mdGives 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`.
---
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`.
skills/name-the-candidate-moves/SKILL.mdWorks 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`.
---
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`.
skills/read-the-current-position/SKILL.mdReads 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`.
---
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`.
skills/set-the-flighting-and-the-weights/SKILL.md"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."
---
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`.
skills/settle-the-audience-to-buy-against/SKILL.mdSettles 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`.
---
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`.
skills/settle-what-counts-as-a-result/SKILL.mdSays 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`.
---
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`.
skills/take-in-what-the-plan-must-do/SKILL.mdTakes 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`.
---
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`.
skills/test-a-proposed-move/SKILL.mdWorks 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`.
---
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`.
skills/version-the-plan/SKILL.mdWrites 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`.
---
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`.
skills/work-up-the-candidate-mixes/SKILL.mdBuilds 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`.
---
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`.
mcp.jsonNot in the package.

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.

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

media-plan-record · writeapproved-budget-for-the-period · readaudience-definitions · readagreed-rates-fees-and-discounts · readad-platforms · readanalytics-platforms · readorder-record · readnotification-channel · write
mcp.json You write this file. It is not part of the package.
{
  "$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.

Where it works

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.

Run Account-Based Playref/mkt/account-based-play · 19 activities
12345678910111213141516171819

Set the Tiers and the Weight · Brief the Makers

Run Display Retargeting Campaignref/mkt/display-retargeting · 16 activities
12345678910111213141516

Set the Parameters

Develop Media Planref/mkt/media-plan · 14 activities
1234567891011121314

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

Reallocate Media Spendref/mkt/reallocate-media-spend · 14 activities
1234567891011121314

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

Test Ad Creativeref/mkt/test-ad-creative · 18 activities
123456789101112131415161718

Commit the Test Budget

Traffic Ad Creativeref/mkt/traffic-ad-creative · 17 activities
1234567891011121314151617

Set the Flights, Budgets and Rotation

The records it leaves

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.

Where it stops

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.

Agents built from this plugin

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.

declare it implements: media-planner v1 One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
A guess, not a claim

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.

Might be reached for

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