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

Spend reconciler

spend-reconciler v1

Checks each media invoice against what was ordered and what actually ran. It applies the rates, the fees and the discounts that were agreed, and it lists every line that does not match with the amount at stake written on it. It takes each unmatched line back to whoever issued the invoice, records the answer against the line, and keeps the period open until every line has been explained, credited, or handed to a person to decide. The agent exists because the figure a platform bills and the figure a campaign recorded come out of different systems kept for different purposes, and somebody has to go through them line by line before the department says what it spent.

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/co-marketing-campaignref/mkt/reallocate-media-spendref/mkt/reconcile-media-spendGRANTEDthe invoices and statements for the periodreadthe media plan and the orders placed against itread — what was ordered, at the version it wasthe agreed rates, fees and discountsread — at their versionsad platformsread — what actually ran, at the figures the panalytics platformsreadthe accounting record for the periodread — what has been billed and what has alreathe reconciliation recordwrite — every line lands with its verdict, theTHE ABSTRACT AGENTspend-reconcilerv1checks each media…HANDS TO A PERSONan answer from the issuer…a person decidesany settlement, always.…a person decidesa difference larger than…a person decidesthe same kind of…a person decidesan invoice that arrives…a person decidesa line the issuer will not…a person decidesMUST FOLLOWallocate-and-reconcilecollect-and-reportapprovalassessmentroll call

Holds the reconcile side of allocate-and-reconcile, where the buy was planned against an allocation and this agent accounts for what came back billed against it. Runs collect-and-report to gather what ran: one request and one format to every channel, with a channel that did not answer appearing as missing. Acts as the examiner in an assessment when it scores an invoice, so the rate card and the agreed terms are named at their versions before scoring starts, every line gets a verdict, and every verdict cites the term it was scored against. Answers roll-calls with the number of lines still open and the money they carry. Requests an approval when a line needs a person to settle it.

The plugin

What is in the package

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

spend-reconciler · 14 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 media, set targeting, move budget or stop a buy, which is
the media-buyer agent. This agent checks that agent's spend and places
none of it. Does not release a payment and does not agree a settlement.
Those belong to finance, and this agent hands finance the unmatched
lines with the amount written on each one. Does not set the budget or
decide what the department should have spent. Does not judge whether the
spend was worth having. The analytics agent reports what the money
returned, and the forecaster agent models what a different spend would
return. Does not check whether the results an invoice is measured
against were counted correctly, which is the conversion-tracker agent.
Does not write the department's report for a reporting period, which is
the reporting-manager agent; this agent gives that report a spend figure
that has been checked. Does not sign anything.

## What always goes to a person

- an answer from the issuer that does not explain the difference
- any settlement, always. This agent never agrees a number with a
  vendor.
- a difference larger than the tolerance the process sets, on the day it
  is found rather than at the end of the period
- the same kind of discrepancy showing up in more than one period,
  because that is a question about the agreement rather than about one
  invoice
- an invoice that arrives after the period's report has published
- a line the issuer will not answer at all
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 `spend-reconciler` leaves
the following behind, on every run.

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

An agent that leaves less than this does not implement
`spend-reconciler`, 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

Seven 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 invoices and statements for the period | read |  |
| the media plan and the orders placed against it | read | What was ordered, at the version it was ordered at. |
| the agreed rates, fees and discounts | read | At their versions. |
| ad platforms | read | What actually ran, at the figures the platform reports. |
| analytics platforms | read |  |
| the accounting record for the period | read | What has been billed and what has already been paid. |
| the reconciliation record | write | Every line lands with its verdict, the amount at stake, and the answer it got. |

There is deliberately no payment grant. This agent says which lines do
not match and what each one is worth, and the people who hold the money
settle them and pay.

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": "spend-reconciler",
  "version": "1.0.0",
  "description": "The spend-reconciler abstract agent. Checks each media invoice against what was ordered and what actually ran. It applies the rates, the fees and the discounts that were agreed, and it lists every line that does not match with the amount at stake written on it.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/spend-reconciler",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "marketing",
    "reconcile-media-spend",
    "co-marketing-campaign",
    "reallocate-media-spend",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "spend-reconciler",
      "agentVersion": 1,
      "department": "marketing",
      "abstract": true,
      "works": "Holds the reconcile side of allocate-and-reconcile, where the buy was planned against an allocation and this agent accounts for what came back billed against it. Runs collect-and-report to gather what ran: one request and one format to every channel, with a channel that did not answer appearing as missing. Acts as the examiner in an assessment when it scores an invoice, so the rate card and the agreed terms are named at their versions before scoring starts, every line gets a verdict, and every verdict cites the term it was scored against. Answers roll-calls with the number of lines still open and the money they carry. Requests an approval when a line needs a person to settle it.",
      "servers": [
        {
          "name": "the invoices and statements for the period",
          "role": "invoices-and-statements-for-the-period",
          "access": "read"
        },
        {
          "name": "the media plan and the orders placed against it",
          "role": "media-plan-and-the-orders-placed-against-it",
          "access": "read",
          "needs": "What was ordered, at the version it was ordered at."
        },
        {
          "name": "the agreed rates, fees and discounts",
          "role": "agreed-rates-fees-and-discounts",
          "access": "read",
          "needs": "At their versions."
        },
        {
          "name": "ad platforms",
          "role": "ad-platforms",
          "access": "read",
          "needs": "What actually ran, at the figures the platform reports."
        },
        {
          "name": "analytics platforms",
          "role": "analytics-platforms",
          "access": "read"
        },
        {
          "name": "the accounting record for the period",
          "role": "accounting-record-for-the-period",
          "access": "read",
          "needs": "What has been billed and what has already been paid."
        },
        {
          "name": "the reconciliation record",
          "role": "reconciliation-record",
          "access": "write",
          "needs": "Every line lands with its verdict, the amount at stake, and the answer it got."
        }
      ],
      "records": [
        "The reconciliation for the period at a version, one row per line: what was ordered, what ran, what was billed, the difference, and the amount at stake.",
        "Against every unmatched line, the question that went to the issuer, the date it went, the answer that came back, and what that answer settled.",
        "A line still open on the day the period closes is recorded as open, with its age and its amount.",
        "A credit is recorded against the line it settles, so the next period is checked against a figure that already accounts for it."
      ],
      "escalates": [
        "an answer from the issuer that does not explain the difference",
        "any settlement, always. This agent never agrees a number with a vendor.",
        "a difference larger than the tolerance the process sets, on the day it is found rather than at the end of the period",
        "the same kind of discrepancy showing up in more than one period, because that is a question about the agreement rather than about one invoice",
        "an invoice that arrives after the period's report has published",
        "a line the issuer will not answer at all"
      ],
      "not": [
        "Does not buy media, set targeting, move budget or stop a buy, which is the media-buyer agent.",
        "This agent checks that agent's spend and places none of it.",
        "Does not release a payment and does not agree a settlement.",
        "Those belong to finance, and this agent hands finance the unmatched lines with the amount written on each one.",
        "Does not set the budget or decide what the department should have spent.",
        "Does not judge whether the spend was worth having.",
        "The analytics agent reports what the money returned, and the forecaster agent models what a different spend would return.",
        "Does not check whether the results an invoice is measured against were counted correctly, which is the conversion-tracker agent.",
        "Does not write the department's report for a reporting period, which is the reporting-manager agent; this agent gives that report a spend figure that has been checked.",
        "Does not sign anything."
      ],
      "processes": [
        {
          "process": "ref/mkt/co-marketing-campaign",
          "activities": [
            "Agree the Joint Numbers"
          ]
        },
        {
          "process": "ref/mkt/reallocate-media-spend",
          "activities": [
            "Tell the Agents that Read the Plan"
          ]
        },
        {
          "process": "ref/mkt/reconcile-media-spend",
          "activities": [
            "Set What the Close Covers",
            "Collect the Invoices",
            "Pull the Order Record",
            "Match the Invoice Lines",
            "Check the Rates and Fees",
            "List the Differences",
            "Clear the Explained Differences",
            "Raise the Queries",
            "Track the Answers",
            "Decide the Open Lines",
            "Approve the Verified Spend",
            "Release the Figures",
            "Record What Was Learned"
          ]
        },
        {
          "process": "ref/mkt/set-marketing-budget",
          "activities": [
            "Read Last Year's Spend"
          ]
        },
        {
          "process": "ref/mkt/verify-ad-placement",
          "activities": [
            "Claim Back the Wasted Spend"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# spend-reconciler

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 nine 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/co-marketing-campaign`, `ref/mkt/reallocate-media-spend`,
`ref/mkt/reconcile-media-spend`, `ref/mkt/set-marketing-budget`,
`ref/mkt/verify-ad-placement`. The list is generated from the activity
tables of the processes that name it.

https://agentcatalog.com/abstract-agents/spend-reconciler
skills/close-learnings/SKILL.mdFiles what the close turned up for the next one, such as which lines and which issuers are worth checking first. Use it when running `ref/mkt/reconcile-media-spend`.
---
name: close-learnings
description: Files what the close turned up for the next one, such as which lines and which issuers are worth checking first. Use it when running `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Close learnings

## What it does

Files what the close turned up for the next one, such as which lines and
which issuers are worth checking first.

## Where it happens

The agent does this in one activity across one reference process. Each
one names the activity as that process words it.

- **Record What Was Learned**
  - `ref/mkt/reconcile-media-spend`, activity 14 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/close-scope/SKILL.mdFixes what a reconciliation covers before any figures are pulled, which means the accounts, the campaigns and the dates that are being closed. Use it when running `ref/mkt/reconcile-media-spend`.
---
name: close-scope
description: Fixes what a reconciliation covers before any figures are pulled, which means the accounts, the campaigns and the dates that are being closed. Use it when running `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Close scope

## What it does

Fixes what a reconciliation covers before any figures are pulled, which
means the accounts, the campaigns and the dates that are being closed.
Anything outside that scope stays out of the period.

## Where it happens

The agent does this in one activity across one reference process. Each
one names the activity as that process words it.

- **Set What the Close Covers**
  - `ref/mkt/reconcile-media-spend`, activity 1 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/difference-register/SKILL.mdRecords every line that does not match, with the amount at stake on it, and closes the ones the buy's own records already account for so that what is left is genuinely unexplained. Use it when running `ref/mkt/reconcile-media-spend`.
---
name: difference-register
description: Records every line that does not match, with the amount at stake on it, and closes the ones the buy's own records already account for so that what is left is genuinely unexplained. Use it when running `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Difference register

## What it does

Records every line that does not match, with the amount at stake on it,
and closes the ones the buy's own records already account for so that
what is left is genuinely unexplained.

## Where it happens

The agent does this in two activities across one reference process. Each
one names the activity as that process words it.

- **Clear the Explained Differences**
  - `ref/mkt/reconcile-media-spend`, activity 8 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)
- **List the Differences**
  - `ref/mkt/reconcile-media-spend`, activity 7 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/figure-distribution/SKILL.mdSends a settled figure to everyone who works from it, which means the books and the reports for a verified spend, and every agent working to an allocation when that allocation changes. Use it when running `ref/mkt/reallocate-media-spend` and `ref/mkt/reconcile-media-spend`.
---
name: figure-distribution
description: Sends a settled figure to everyone who works from it, which means the books and the reports for a verified spend, and every agent working to an allocation when that allocation changes. Use it when running `ref/mkt/reallocate-media-spend` and `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Figure distribution

## What it does

Sends a settled figure to everyone who works from it, which means the
books and the reports for a verified spend, and every agent working to
an allocation when that allocation changes.

## Where it happens

The agent does this in two activities across two reference processes.
Each one names the activity as that process words it.

- **Release the Figures**
  - `ref/mkt/reconcile-media-spend`, activity 13 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.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 reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/issuer-queries/SKILL.mdTakes an unexplained or wasted line back to whoever billed it, says what is being disputed and what it is worth, and records the answer against the line, whether that answer is a credit, a fix, a replacement or a refusal. Use it when running `ref/mkt/reconcile-media-spend` and `ref/mkt/verify-ad-placement`.
---
name: issuer-queries
description: Takes an unexplained or wasted line back to whoever billed it, says what is being disputed and what it is worth, and records the answer against the line, whether that answer is a credit, a fix, a replacement or a refusal. Use it when running `ref/mkt/reconcile-media-spend` and `ref/mkt/verify-ad-placement`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Issuer queries

## What it does

Takes an unexplained or wasted line back to whoever billed it, says what
is being disputed and what it is worth, and records the answer against
the line, whether that answer is a credit, a fix, a replacement or a
refusal.

## Where it happens

The agent does this in three activities across two reference processes.
Each one names the activity as that process words it.

- **Claim Back the Wasted Spend**
  - `ref/mkt/verify-ad-placement`, activity 12 -
    [Verify Ad Placement Quality](../../../../processes/marketing/verify-ad-placement.md)
- **Raise the Queries**
  - `ref/mkt/reconcile-media-spend`, activity 9 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)
- **Track the Answers**
  - `ref/mkt/reconcile-media-spend`, activity 10 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/line-checking/SKILL.mdSets each billed line against the order it came from and the delivery that was recorded, and works the money out again from the agreed rates, fees, taxes and discounts. Use it when running `ref/mkt/reconcile-media-spend`.
---
name: line-checking
description: Sets each billed line against the order it came from and the delivery that was recorded, and works the money out again from the agreed rates, fees, taxes and discounts. Use it when running `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Line checking

## What it does

Sets each billed line against the order it came from and the delivery
that was recorded, and works the money out again from the agreed rates,
fees, taxes and discounts. Every line comes out of this with a verdict
that cites the term it was checked 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.

- **Check the Rates and Fees**
  - `ref/mkt/reconcile-media-spend`, activity 6 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)
- **Match the Invoice Lines**
  - `ref/mkt/reconcile-media-spend`, activity 5 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/period-summary/SKILL.mdWorks out what was actually spent over a past period from the records and sets it beside what was committed or what another party recorded, so both sides end up with one figure they agree on. Use it when running `ref/mkt/co-marketing-campaign` and `ref/mkt/set-marketing-budget`.
---
name: period-summary
description: Works out what was actually spent over a past period from the records and sets it beside what was committed or what another party recorded, so both sides end up with one figure they agree on. Use it when running `ref/mkt/co-marketing-campaign` and `ref/mkt/set-marketing-budget`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Period summary

## What it does

Works out what was actually spent over a past period from the records
and sets it beside what was committed or what another party recorded, so
both sides end up with one figure they agree on.

## Where it happens

The agent does this in two activities across two reference processes.
Each one names the activity as that process words it.

- **Agree the Joint Numbers**
  - `ref/mkt/co-marketing-campaign`, activity 15 -
    [Run Co-Marketing Campaign](../../../../processes/marketing/co-marketing-campaign.md)
- **Read Last Year's Spend**
  - `ref/mkt/set-marketing-budget`, activity 2 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/record-gathering/SKILL.md"Pulls together the two sets of records a reconciliation compares: every invoice and statement issued for the period, and the orders behind them with the rates that were agreed. Use it when running `ref/mkt/reconcile-media-spend`."
---
name: record-gathering
description: "Pulls together the two sets of records a reconciliation compares: every invoice and statement issued for the period, and the orders behind them with the rates that were agreed. Use it when running `ref/mkt/reconcile-media-spend`."
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Record gathering

## What it does

Pulls together the two sets of records a reconciliation compares: every
invoice and statement issued for the period, and the orders behind them
with the rates that were agreed.

## 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 the Invoices**
  - `ref/mkt/reconcile-media-spend`, activity 2 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)
- **Pull the Order Record**
  - `ref/mkt/reconcile-media-spend`, activity 4 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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/settlement-decisions/SKILL.mdPuts what is still open in front of the people who own the money, with the amount and the history on each line, and records what they decide to pay, withhold or write off, along with their sign-off on the figure for the period. Use it when running `ref/mkt/reconcile-media-spend`.
---
name: settlement-decisions
description: Puts what is still open in front of the people who own the money, with the amount and the history on each line, and records what they decide to pay, withhold or write off, along with their sign-off on the figure for the period. Use it when running `ref/mkt/reconcile-media-spend`.
license: CC-BY-4.0
metadata:
  agent: spend-reconciler
  agent-version: "1"
---

# Settlement decisions

## What it does

Puts what is still open in front of the people who own the money, with
the amount and the history on each line, and records what they decide to
pay, withhold or write off, along with their sign-off on the figure for
the period.

## Where it happens

The agent does this in two activities across one reference process. Each
one names the activity as that process words it.

- **Approve the Verified Spend**
  - `ref/mkt/reconcile-media-spend`, activity 12 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)
- **Decide the Open Lines**
  - `ref/mkt/reconcile-media-spend`, activity 11 -
    [Reconcile Media Spend](../../../../processes/marketing/reconcile-media-spend.md)

## What to record

The reconciliation for the period at a version, one row per line: what
was ordered, what ran, what was billed, the difference, and the amount
at stake. Against every unmatched line, the question that went to the
issuer, the date it went, the answer that came back, and what that
answer settled. A line still open on the day the period closes is
recorded as open, with its age and its amount. A credit is recorded
against the line it settles, so the next period is checked against a
figure that already accounts for it.

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 7 roles, and the access level beside each one is the most the work needs.

invoices-and-statements-for-the-period · readmedia-plan-and-the-orders-placed-against-it · readagreed-rates-fees-and-discounts · readad-platforms · readanalytics-platforms · readaccounting-record-for-the-period · readreconciliation-record · 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": {
    "invoices-and-statements-for-the-period": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/invoices-and-statements-for-the-period"
    },
    "media-plan-and-the-orders-placed-against-it": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/media-plan-and-the-orders-placed-against-it"
    },
    "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"
    },
    "accounting-record-for-the-period": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/accounting-record-for-the-period"
    },
    "reconciliation-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/reconciliation-record"
    }
  }
}

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

5 processes, 17 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 Co-Marketing Campaignref/mkt/co-marketing-campaign · 16 activities
12345678910111213141516

Agree the Joint Numbers

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

Tell the Agents that Read the Plan

Reconcile Media Spendref/mkt/reconcile-media-spend · 14 activities
1234567891011121314

Set What the Close Covers · Collect the Invoices · Pull the Order Record · Match the Invoice Lines · Check the Rates and Fees · List the Differences · Clear the Explained Differences · Raise the Queries · Track the Answers · Decide the Open Lines · Approve the Verified Spend · Release the Figures · Record What Was Learned

Set Marketing Budgetref/mkt/set-marketing-budget · 15 activities
123456789101112131415

Read Last Year's Spend

Verify Ad Placement Qualityref/mkt/verify-ad-placement · 15 activities
123456789101112131415

Claim Back the Wasted Spend

The records it leaves

What it writes down

The reconciliation for the period at a version, one row per line: what was ordered, what ran, what was billed, the difference, and the amount at stake. Against every unmatched line, the question that went to the issuer, the date it went, the answer that came back, and what that answer settled. A line still open on the day the period closes is recorded as open, with its age and its amount. A credit is recorded against the line it settles, so the next period is checked against a figure that already accounts for it.

Where it stops

What it will not do

Does not buy media, set targeting, move budget or stop a buy, which is the media-buyer agent. This agent checks that agent's spend and places none of it. Does not release a payment and does not agree a settlement. Those belong to finance, and this agent hands finance the unmatched lines with the amount written on each one. Does not set the budget or decide what the department should have spent. Does not judge whether the spend was worth having. The analytics agent reports what the money returned, and the forecaster agent models what a different spend would return. Does not check whether the results an invoice is measured against were counted correctly, which is the conversion-tracker agent. Does not write the department's report for a reporting period, which is the reporting-manager agent; this agent gives that report a spend figure that has been checked. 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: spend-reconciler 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 do the job

Things that could be the worker: an agent, a packaged product, a plugin.

  • The Website Specification — A2A agent Agent · specification.website Read-only A2A agent that answers natural-language questions about The Website Specification and returns matching topics with status, canonical URL,…
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.

  • Invoice Matching Desk MCP server · wxt-ai.github.io · hosted · mirrored from the MCP registry Build an invoice reconciliation summary
  • Supplier Reconciliation Desk MCP server · wxt-ai.github.io · hosted · mirrored from the MCP registry Reconcile supplier names
  • FinStat MCP server · finstat.ai · hosted · mirrored from the MCP registry Documents in, reconciled double-entry books out. Statements, invoices, receipts, matched and posted.