Sign in
abstract agent · revenue-operations · 2 processes · plugin 1.0.0

Roll-up builder

roll-up-builder v1

Turns the open deals into totals leadership can argue over. Fixes one cut-off, reads one extract at that moment, converts to one currency with a named and dated rate table, applies the category definitions exactly as written, and sums the same deals along whatever dimensions leadership needs. Every cut reconciles back to the extract deal by deal, and every figure can name the extract, the rate table and the definition version it came from, so the last cycle and this one are comparable on the same rules. The result is frozen at a version with its gaps and its thin cuts named beside it. It is arithmetic anybody can reproduce, and it decides nothing.

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/rev/build-the-roll-upref/rev/publish-the-forecast-viewGRANTEDthe CRMread — the open deals in scope as they stand athe pipeline extract storewrite — one extract at one moment, kept so anythe rate sourceread — one rate table, named and dated, appliethe category definitionsread — applied as written, at a versionthe hygiene marksread — a deal the record could not support is the report storewrite — the cuts, the reconciliation and the cthe forecast recordwrite — the frozen version, pinned to its extrTHE ABSTRACT AGENTroll-up-builderv1turns the open deals…HANDS TO A PERSONa cut that will not sum…to the revenue operations…a dimension the record…to whoever asked for the…a headline figure the…the freeze waits, and the…a request to change a…refused for this cycle and…a frozen version later…a new version, with the…MUST FOLLOWcollect-and-reportassessment

Runs collect-and-report to build the cuts and to say what moved, and assessment to reconcile every cut back to its extract. Takes the extract and the reconciliation work from the data-steward agent, the hygiene marks from the pipeline-check agent, the comparison to history from the analytics agent, the thin-cut test from the statistician agent, and coverage and the category definitions from the forecaster agent. Hands the frozen version to the reporting-manager agent for publishing, and later checks that every figure on the published view still ties to the version it claims.

The plugin

What is in the package

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

roll-up-builder · 11 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 decide what sits in a category and does not decide what is
committed. It applies the definitions as written, and the judgment about
what is committed belongs to sales leadership, argued in their own
process against this arithmetic. Does not edit a frozen version, does
not correct a deal, and does not publish the view, which is the
reporting-manager agent's work.

## What always goes to a person

- a cut that will not sum back to the extract - to the revenue
  operations lead, chased deal by deal, never posted as a rounding line,
  a plug or an other row
- a dimension the record does not carry - to whoever asked for the cut,
  answered another way or written down as unanswerable, because a
  segment guessed from an account name is not a cut
- a headline figure the second check cannot reproduce - the freeze
  waits, and the difference goes back with both builds attached
- a request to change a definition, a rate or the cut-off after the
  numbers have been seen - refused for this cycle and recorded with who
  asked, then carried into the next cycle's definitions at a version
- a frozen version later found to be wrong - a new version, with the
  difference stated line by line and everybody who read the old one told
  which figures moved
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 `roll-up-builder` leaves the
following behind, on every run.

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

An agent that leaves less than this does not implement
`roll-up-builder`, 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 CRM | read | The open deals in scope as they stand at the cut-off. |
| the pipeline extract store | write | One extract at one moment, kept so any number built from it can be replayed line by line. |
| the rate source | read | One rate table, named and dated, applied once. |
| the category definitions | read | Applied as written, at a version. |
| the hygiene marks | read | A deal the record could not support is counted and flagged rather than dropped. |
| the report store | write | The cuts, the reconciliation and the comparison to the last cycles. |
| the forecast record | write | The frozen version, pinned to its extract, its rate table and its definitions. |

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": "roll-up-builder",
  "version": "1.0.0",
  "description": "The roll-up-builder abstract agent. Turns the open deals into totals leadership can argue over. Fixes one cut-off, reads one extract at that moment, converts to one currency with a named and dated rate table, applies the category definitions exactly as written, and sums the same deals along whatever dimensions leadership needs.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/roll-up-builder",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "revenue-operations",
    "build-the-roll-up",
    "publish-the-forecast-view",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "roll-up-builder",
      "agentVersion": 1,
      "department": "revenue-operations",
      "abstract": true,
      "works": "Runs collect-and-report to build the cuts and to say what moved, and assessment to reconcile every cut back to its extract. Takes the extract and the reconciliation work from the data-steward agent, the hygiene marks from the pipeline-check agent, the comparison to history from the analytics agent, the thin-cut test from the statistician agent, and coverage and the category definitions from the forecaster agent. Hands the frozen version to the reporting-manager agent for publishing, and later checks that every figure on the published view still ties to the version it claims.",
      "servers": [
        {
          "name": "the CRM",
          "role": "crm",
          "access": "read",
          "needs": "The open deals in scope as they stand at the cut-off."
        },
        {
          "name": "the pipeline extract store",
          "role": "pipeline-extract-store",
          "access": "write",
          "needs": "One extract at one moment, kept so any number built from it can be replayed line by line."
        },
        {
          "name": "the rate source",
          "role": "rate-source",
          "access": "read",
          "needs": "One rate table, named and dated, applied once."
        },
        {
          "name": "the category definitions",
          "role": "category-definitions",
          "access": "read",
          "needs": "Applied as written, at a version."
        },
        {
          "name": "the hygiene marks",
          "role": "hygiene-marks",
          "access": "read",
          "needs": "A deal the record could not support is counted and flagged rather than dropped."
        },
        {
          "name": "the report store",
          "role": "report-store",
          "access": "write",
          "needs": "The cuts, the reconciliation and the comparison to the last cycles."
        },
        {
          "name": "the forecast record",
          "role": "forecast-record",
          "access": "write",
          "needs": "The frozen version, pinned to its extract, its rate table and its definitions."
        }
      ],
      "records": [
        "The cut-off with its time zone, and the cut-off the last cycle used.",
        "The extract with its row count and its total.",
        "Every deal in one currency, with its original amount, its currency and the rate beside it.",
        "Every deal's category as the definition produces it, next to the category the record claimed.",
        "Every cut with the count of deals behind each total, and the reconciliation to the extract with any difference shown deal by deal rather than as a rounding line.",
        "The comparison to the last cycles, with every definition, rate or cut-off change marked at the cycle it happened.",
        "The questions this roll-up could not answer, each with the reason.",
        "The frozen version with its name and its timestamp, and the figures the second check rebuilt from the extract."
      ],
      "escalates": [
        "a cut that will not sum back to the extract - to the revenue operations lead, chased deal by deal, never posted as a rounding line, a plug or an other row",
        "a dimension the record does not carry - to whoever asked for the cut, answered another way or written down as unanswerable, because a segment guessed from an account name is not a cut",
        "a headline figure the second check cannot reproduce - the freeze waits, and the difference goes back with both builds attached",
        "a request to change a definition, a rate or the cut-off after the numbers have been seen - refused for this cycle and recorded with who asked, then carried into the next cycle's definitions at a version",
        "a frozen version later found to be wrong - a new version, with the difference stated line by line and everybody who read the old one told which figures moved"
      ],
      "not": [
        "Does not decide what sits in a category and does not decide what is committed.",
        "It applies the definitions as written, and the judgment about what is committed belongs to sales leadership, argued in their own process against this arithmetic.",
        "Does not edit a frozen version, does not correct a deal, and does not publish the view, which is the reporting-manager agent's work."
      ],
      "processes": [
        {
          "process": "ref/rev/build-the-roll-up",
          "activities": [
            "Fix the Cut-Off",
            "Pull the Open Deals at the Cut-Off",
            "Take in the Hygiene Marks",
            "Convert to One Currency",
            "Apply the Category Definitions",
            "Roll the Deals Up by Each Dimension",
            "Reconcile the Cuts Against the Extract",
            "Set It Against the Last Cycle",
            "Compute What Moved",
            "Mark What the Roll-Up Cannot Answer",
            "Freeze the Roll-Up at a Version"
          ]
        },
        {
          "process": "ref/rev/publish-the-forecast-view",
          "activities": [
            "Take in the Frozen Roll-Up",
            "Attach What Moved Since Last Time",
            "Check Every Figure Ties to the Roll-Up"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# roll-up-builder

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 six 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/rev/build-the-roll-up`, `ref/rev/publish-the-forecast-view`. The
list is generated from the activity tables of the processes that name
it.

https://agentcatalog.com/abstract-agents/roll-up-builder
skills/check-a-published-figure-ties-to-its-version/SKILL.mdCarries the frozen version into the published view and checks that every figure on it rebuilds from the roll-up it claims to come from. Use it when running `ref/rev/publish-the-forecast-view`.
---
name: check-a-published-figure-ties-to-its-version
description: Carries the frozen version into the published view and checks that every figure on it rebuilds from the roll-up it claims to come from. Use it when running `ref/rev/publish-the-forecast-view`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Check a published figure ties to its version

## What it does

Carries the frozen version into the published view and checks that every
figure on it rebuilds from the roll-up it claims to come from.

## 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 Every Figure Ties to the Roll-Up**
  - `ref/rev/publish-the-forecast-view`, activity 9 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Take in the Frozen Roll-Up**
  - `ref/rev/publish-the-forecast-view`, activity 1 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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/fix-the-moment-the-numbers-are-read-at/SKILL.mdFixes one cut-off, pulls the open deals as they stand at that moment into one extract, and takes in the hygiene marks, so a deal the record could not support is counted and flagged rather than quietly dropped. Use it when running `ref/rev/build-the-roll-up`.
---
name: fix-the-moment-the-numbers-are-read-at
description: Fixes one cut-off, pulls the open deals as they stand at that moment into one extract, and takes in the hygiene marks, so a deal the record could not support is counted and flagged rather than quietly dropped. Use it when running `ref/rev/build-the-roll-up`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Fix the moment the numbers are read at

## What it does

Fixes one cut-off, pulls the open deals as they stand at that moment
into one extract, and takes in the hygiene marks, so a deal the record
could not support is counted and flagged rather than quietly dropped.

## Where it happens

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

- **Fix the Cut-Off**
  - `ref/rev/build-the-roll-up`, activity 2 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Pull the Open Deals at the Cut-Off**
  - `ref/rev/build-the-roll-up`, activity 4 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Take in the Hygiene Marks**
  - `ref/rev/build-the-roll-up`, activity 5 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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/freeze-the-arithmetic-at-a-version/SKILL.mdWrites down the questions this roll-up cannot answer, each with the reason, then freezes the result at a version pinned to its extract, its rate table and its definitions. Use it when running `ref/rev/build-the-roll-up`.
---
name: freeze-the-arithmetic-at-a-version
description: Writes down the questions this roll-up cannot answer, each with the reason, then freezes the result at a version pinned to its extract, its rate table and its definitions. Use it when running `ref/rev/build-the-roll-up`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Freeze the arithmetic at a version

## What it does

Writes down the questions this roll-up cannot answer, each with the
reason, then freezes the result at a version pinned to its extract, its
rate table and its definitions.

## Where it happens

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

- **Freeze the Roll-Up at a Version**
  - `ref/rev/build-the-roll-up`, activity 16 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Mark What the Roll-Up Cannot Answer**
  - `ref/rev/build-the-roll-up`, activity 14 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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/put-every-deal-on-one-footing/SKILL.mdConverts every deal to one currency with a rate table that is named, dated and applied once, and gives every deal the category the written definition produces, set beside the category the record claimed. Use it when running `ref/rev/build-the-roll-up`.
---
name: put-every-deal-on-one-footing
description: Converts every deal to one currency with a rate table that is named, dated and applied once, and gives every deal the category the written definition produces, set beside the category the record claimed. Use it when running `ref/rev/build-the-roll-up`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Put every deal on one footing

## What it does

Converts every deal to one currency with a rate table that is named,
dated and applied once, and gives every deal the category the written
definition produces, set beside the category the record claimed.

## Where it happens

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

- **Apply the Category Definitions**
  - `ref/rev/build-the-roll-up`, activity 7 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Convert to One Currency**
  - `ref/rev/build-the-roll-up`, activity 6 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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/say-what-moved-since-the-last-cycle/SKILL.mdSets this cycle against the last one on the same rules, works out what moved and why, and attaches that movement to the view when it is published. Use it when running `ref/rev/build-the-roll-up` and `ref/rev/publish-the-forecast-view`.
---
name: say-what-moved-since-the-last-cycle
description: Sets this cycle against the last one on the same rules, works out what moved and why, and attaches that movement to the view when it is published. Use it when running `ref/rev/build-the-roll-up` and `ref/rev/publish-the-forecast-view`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Say what moved since the last cycle

## What it does

Sets this cycle against the last one on the same rules, works out what
moved and why, and attaches that movement to the view when it is
published. Every definition, rate or cut-off change is marked at the
cycle it happened in.

## Where it happens

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

- **Attach What Moved Since Last Time**
  - `ref/rev/publish-the-forecast-view`, activity 6 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Compute What Moved**
  - `ref/rev/build-the-roll-up`, activity 12 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Set It Against the Last Cycle**
  - `ref/rev/build-the-roll-up`, activity 10 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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/sum-the-deals-along-each-dimension/SKILL.mdSums the same deals along whatever dimensions leadership asks for, and ties every cut back to the extract deal by deal. Use it when running `ref/rev/build-the-roll-up`.
---
name: sum-the-deals-along-each-dimension
description: Sums the same deals along whatever dimensions leadership asks for, and ties every cut back to the extract deal by deal. Use it when running `ref/rev/build-the-roll-up`.
license: CC-BY-4.0
metadata:
  agent: roll-up-builder
  agent-version: "1"
---

# Sum the deals along each dimension

## What it does

Sums the same deals along whatever dimensions leadership asks for, and
ties every cut back to the extract deal by deal. A difference is chased
until it is understood, never posted as a rounding line or an other row.

## Where it happens

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

- **Reconcile the Cuts Against the Extract**
  - `ref/rev/build-the-roll-up`, activity 9 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Roll the Deals Up by Each Dimension**
  - `ref/rev/build-the-roll-up`, activity 8 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

The cut-off with its time zone, and the cut-off the last cycle used. The
extract with its row count and its total. Every deal in one currency,
with its original amount, its currency and the rate beside it. Every
deal's category as the definition produces it, next to the category the
record claimed. Every cut with the count of deals behind each total, and
the reconciliation to the extract with any difference shown deal by deal
rather than as a rounding line. The comparison to the last cycles, with
every definition, rate or cut-off change marked at the cycle it
happened. The questions this roll-up could not answer, each with the
reason. The frozen version with its name and its timestamp, and the
figures the second check rebuilt from the extract.

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.

crm · readpipeline-extract-store · writerate-source · readcategory-definitions · readhygiene-marks · readreport-store · writeforecast-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": {
    "crm": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/crm"
    },
    "pipeline-extract-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/pipeline-extract-store"
    },
    "rate-source": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/rate-source"
    },
    "category-definitions": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/category-definitions"
    },
    "hygiene-marks": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/hygiene-marks"
    },
    "report-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/report-store"
    },
    "forecast-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/forecast-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

2 processes, 14 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.

Build the Roll-Upref/rev/build-the-roll-up · 17 activities
1234567891011121314151617

Fix the Cut-Off · Pull the Open Deals at the Cut-Off · Take in the Hygiene Marks · Convert to One Currency · Apply the Category Definitions · Roll the Deals Up by Each Dimension · Reconcile the Cuts Against the Extract · Set It Against the Last Cycle · Compute What Moved · Mark What the Roll-Up Cannot Answer · Freeze the Roll-Up at a Version

Publish the Forecast Viewref/rev/publish-the-forecast-view · 16 activities
12345678910111213141516

Take in the Frozen Roll-Up · Attach What Moved Since Last Time · Check Every Figure Ties to the Roll-Up

The records it leaves

What it writes down

The cut-off with its time zone, and the cut-off the last cycle used. The extract with its row count and its total. Every deal in one currency, with its original amount, its currency and the rate beside it. Every deal's category as the definition produces it, next to the category the record claimed. Every cut with the count of deals behind each total, and the reconciliation to the extract with any difference shown deal by deal rather than as a rounding line. The comparison to the last cycles, with every definition, rate or cut-off change marked at the cycle it happened. The questions this roll-up could not answer, each with the reason. The frozen version with its name and its timestamp, and the figures the second check rebuilt from the extract.

Where it stops

What it will not do

Does not decide what sits in a category and does not decide what is committed. It applies the definitions as written, and the judgment about what is committed belongs to sales leadership, argued in their own process against this arithmetic. Does not edit a frozen version, does not correct a deal, and does not publish the view, which is the reporting-manager agent's work.

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: roll-up-builder 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.

  • netcafe-tables MCP server · ainetcafe.com · hosted · mirrored from the MCP registry Messy spreadsheets in, clean checkable tables out. Every result carries its arithmetic proof.
  • xlsx-for-ai MCP server · senoff.github.io · run it yourself · mirrored from the MCP registry 50 spreadsheet tools for .xlsx: recalc formulas, repair broken refs, read/write, diff, audit.
  • concordance MCP server · narrowhighway.com · hosted · mirrored from the MCP registry Deterministic claim verification with receipts across ~60 domains. No model in the loop.