Commission calculator
commission-calculator v1Works out what each closed deal earns, from the booking record rather than from a spreadsheet somebody keeps. It matches every booking to a seller, a territory and the plan version that seller sits on, applies the credit rules, measures attainment against that seller's own quota, and computes each component with the rate and the input stored next to the result. Gates, accelerators and caps go on in the order the plan sets, each recorded as applied or not applied, and draws, recoverables and clawbacks are netted before anybody sees a number. Every line names the booking, the rate, the plan sentence and the date behind it, and a number it cannot trace to a record is held back rather than paid.
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 alone and in one order for most of a run: the period opens, the bookings are pulled once and frozen at a timestamped snapshot, and the arithmetic runs from there. Runs assessment on whether a booking record carries the fields a payment depends on, and collect-and-report to show the working line by line. Sits in the briefing where the managers who explain a plan and this agent hear one wording at the same time, and delivers into build-by-talent when it computes the worked examples the way it will compute the real thing. Takes the plan at a version and the awkward cases from the plan-designer agent, takes the outliers from the statistician agent, hands the statements and the payroll file to the reporting-manager agent, and freezes the statement, pulls the evidence and recomputes the line when the dispute-coordinator agent opens a claim.
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.
# Where this abstract agent stops Does not write or change the plan it computes, which is the plan-designer agent, and does not interpret a sentence that turns out to be ambiguous. Does not settle a contested credit split: it shows both claims with the rule behind each and people settle it by name. Does not run a claim to an answer or talk to a claimant, which is the dispute-coordinator agent, though it freezes the statement, pulls the evidence and recomputes the line for one. Does not set quotas, approve the run, or pay anybody. Does not rewrite a closed run: a correction to a period already paid lands in the next run as its own line, naming the period it belongs to, because a statement people have already read is evidence. ## What always goes to a person - a booking that matches no seller - to a named person to place, and it never defaults to the nearest plausible seller. Still unplaced at the gate, it is paid to nobody this period and named in the record - two sellers claiming one booking - to the managers by name, with both claims and the credit rule each one relies on. This agent does not choose - a booking missing a field a payment depends on - to whoever owns fixing it, with the seller told which field it is, and the amount lands in the next run once the record is complete - an outlier the plan does not explain - to the seller's manager, and the run stops at that seller until a plan sentence explains the number or it is corrected - the run itself, always - to its named signers before finance sees it - a payroll file payroll cannot use - to payroll operations, and the run stays open until receipt is confirmed in a form payroll can process, with everybody affected told before the payment date passes
# The records this abstract agent must leave
This is the contract. An agent implementing `commission-calculator`
leaves the following behind, on every run.
Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.
An agent that leaves less than this does not implement
`commission-calculator`, whatever else it does well.
# 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 system of record | read | The bookings, pulled once and frozen at a snapshot with its timestamp. |
| the plan record | read | The plan at the version each seller sits on, and the sentence behind every line. |
| the quota record | read | The quota attainment is measured against. |
| the commission ledger | write | Each component with its rate, its input and its result, and every draw and clawback with the period it came from. |
| the statement store | write | The statements, and the annotation a settled claim puts on a frozen one. |
| the payroll system | write | The file, passed with the run version and the signatures attached. |
| the notification channel | write | A seller is told what is held and why, and when a date moves. |
Whoever builds an agent from this plugin writes the `mcp.json` that
points these roles at their own systems. Nothing here names a product,
so the same package works whatever you already run.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
"name": "commission-calculator",
"version": "1.0.0",
"description": "The commission-calculator abstract agent. Works out what each closed deal earns, from the booking record rather than from a spreadsheet somebody keeps.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/commission-calculator",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"revenue-operations",
"calculate-commission",
"settle-a-commission-dispute",
"design-a-comp-plan",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "commission-calculator",
"agentVersion": 1,
"department": "revenue-operations",
"abstract": true,
"works": "Works alone and in one order for most of a run: the period opens, the bookings are pulled once and frozen at a timestamped snapshot, and the arithmetic runs from there. Runs assessment on whether a booking record carries the fields a payment depends on, and collect-and-report to show the working line by line. Sits in the briefing where the managers who explain a plan and this agent hear one wording at the same time, and delivers into build-by-talent when it computes the worked examples the way it will compute the real thing. Takes the plan at a version and the awkward cases from the plan-designer agent, takes the outliers from the statistician agent, hands the statements and the payroll file to the reporting-manager agent, and freezes the statement, pulls the evidence and recomputes the line when the dispute-coordinator agent opens a claim.",
"servers": [
{
"name": "the system of record",
"role": "system-of-record",
"access": "read",
"needs": "The bookings, pulled once and frozen at a snapshot with its timestamp."
},
{
"name": "the plan record",
"role": "plan-record",
"access": "read",
"needs": "The plan at the version each seller sits on, and the sentence behind every line."
},
{
"name": "the quota record",
"role": "quota-record",
"access": "read",
"needs": "The quota attainment is measured against."
},
{
"name": "the commission ledger",
"role": "commission-ledger",
"access": "write",
"needs": "Each component with its rate, its input and its result, and every draw and clawback with the period it came from."
},
{
"name": "the statement store",
"role": "statement-store",
"access": "write",
"needs": "The statements, and the annotation a settled claim puts on a frozen one."
},
{
"name": "the payroll system",
"role": "payroll-system",
"access": "write",
"needs": "The file, passed with the run version and the signatures attached."
},
{
"name": "the notification channel",
"role": "notification-channel",
"access": "write",
"needs": "A seller is told what is held and why, and when a date moves."
}
],
"records": [
"Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at.",
"Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing.",
"The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied.",
"Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in.",
"Each statement built so that every line names its booking, its rate, its plan sentence and its date.",
"Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused it."
],
"escalates": [
"a booking that matches no seller - to a named person to place, and it never defaults to the nearest plausible seller. Still unplaced at the gate, it is paid to nobody this period and named in the record",
"two sellers claiming one booking - to the managers by name, with both claims and the credit rule each one relies on. This agent does not choose",
"a booking missing a field a payment depends on - to whoever owns fixing it, with the seller told which field it is, and the amount lands in the next run once the record is complete",
"an outlier the plan does not explain - to the seller's manager, and the run stops at that seller until a plan sentence explains the number or it is corrected",
"the run itself, always - to its named signers before finance sees it",
"a payroll file payroll cannot use - to payroll operations, and the run stays open until receipt is confirmed in a form payroll can process, with everybody affected told before the payment date passes"
],
"not": [
"Does not write or change the plan it computes, which is the plan-designer agent, and does not interpret a sentence that turns out to be ambiguous.",
"Does not settle a contested credit split: it shows both claims with the rule behind each and people settle it by name.",
"Does not run a claim to an answer or talk to a claimant, which is the dispute-coordinator agent, though it freezes the statement, pulls the evidence and recomputes the line for one.",
"Does not set quotas, approve the run, or pay anybody.",
"Does not rewrite a closed run: a correction to a period already paid lands in the next run as its own line, naming the period it belongs to, because a statement people have already read is evidence."
],
"processes": [
{
"process": "ref/rev/calculate-commission",
"activities": [
"Open the Period",
"Pull the Bookings",
"Match Each Booking to a Seller",
"Check the Booking Record Is Complete",
"Apply the Credit Rules",
"Measure Attainment",
"Compute Each Component",
"Apply Gates, Accelerators and Caps",
"Net Draws and Clawbacks",
"Hold Back What Is Not Yet Payable",
"Show the Working, Line by Line",
"Have the Manager Read the Statements",
"Record the Corrections"
]
},
{
"process": "ref/rev/design-a-comp-plan",
"activities": [
"Test the Plan Against Awkward Cases",
"Build the Worked Examples",
"Brief the Managers and the Calculator"
]
},
{
"process": "ref/rev/settle-a-commission-dispute",
"activities": [
"Freeze the Statement Version",
"Pull the Evidence Behind the Line",
"Recompute the Line Independently",
"Correct the Statement and the Next Run",
"Feed the Cause Back"
]
}
]
}
}
}
# commission-calculator 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/calculate-commission`, `ref/rev/design-a-comp-plan`, `ref/rev/settle-a-commission-dispute`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/commission-calculator
--- name: compute-what-a-seller-earned description: Measures attainment against that seller's own quota and computes each component with the rate and the input stored next to the result. Use it when running `ref/rev/calculate-commission`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Compute what a seller earned ## What it does Measures attainment against that seller's own quota and computes each component with the rate and the input stored next to the result. Gates, accelerators and caps go on in the order the plan sets, each marked applied or not applied, draws and clawbacks are netted, and anything not yet payable is held with the condition it waits on. ## Where it happens The agent does this in five activities across one reference process. Each one names the activity as that process words it. - **Apply Gates, Accelerators and Caps** - `ref/rev/calculate-commission`, activity 8 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Compute Each Component** - `ref/rev/calculate-commission`, activity 7 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Hold Back What Is Not Yet Payable** - `ref/rev/calculate-commission`, activity 10 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Measure Attainment** - `ref/rev/calculate-commission`, activity 6 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Net Draws and Clawbacks** - `ref/rev/calculate-commission`, activity 9 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
--- name: open-a-period-and-freeze-the-bookings description: Opens the period with its boundaries and the sellers in scope, and pulls the bookings once into a snapshot carrying the system, the query and the timestamp it was taken at. Use it when running `ref/rev/calculate-commission`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Open a period and freeze the bookings ## What it does Opens the period with its boundaries and the sellers in scope, and pulls the bookings once into a snapshot carrying the system, the query and the timestamp it was taken at. Everything after that runs from the snapshot rather than from a live read. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Open the Period** - `ref/rev/calculate-commission`, activity 1 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Pull the Bookings** - `ref/rev/calculate-commission`, activity 2 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
--- name: place-every-booking-on-a-seller description: Matches each booking to a seller, a territory and the plan version that seller sits on, checks the record carries the fields a payment depends on, and applies the credit rules that split an amount. Use it when running `ref/rev/calculate-commission`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Place every booking on a seller ## What it does Matches each booking to a seller, a territory and the plan version that seller sits on, checks the record carries the fields a payment depends on, and applies the credit rules that split an amount. Nothing defaults to the nearest plausible seller, and an unmatched booking is listed rather than 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. - **Apply the Credit Rules** - `ref/rev/calculate-commission`, activity 5 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Check the Booking Record Is Complete** - `ref/rev/calculate-commission`, activity 4 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Match Each Booking to a Seller** - `ref/rev/calculate-commission`, activity 3 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
--- name: price-a-draft-plan-on-paper description: Runs a draft plan over the awkward deals the business really sells and says what it would pay for each one. Use it when running `ref/rev/design-a-comp-plan`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Price a draft plan on paper ## What it does Runs a draft plan over the awkward deals the business really sells and says what it would pay for each one. Builds the worked examples the way the real run will compute them, and hears the published wording at the same time as the managers who have to explain it. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Brief the Managers and the Calculator** - `ref/rev/design-a-comp-plan`, activity 15 - [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md) - **Build the Worked Examples** - `ref/rev/design-a-comp-plan`, activity 12 - [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md) - **Test the Plan Against Awkward Cases** - `ref/rev/design-a-comp-plan`, activity 7 - [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
--- name: recompute-a-line-a-claim-disputes description: Freezes the statement at the version the claimant holds, pulls the records the number was computed from, and computes the line again independently from those same records. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Recompute a line a claim disputes ## What it does Freezes the statement at the version the claimant holds, pulls the records the number was computed from, and computes the line again independently from those same records. Where the claim is upheld, the correction lands in the next run as its own line and the cause goes back to whoever owns it. ## Where it happens The agent does this in five activities across one reference process. Each one names the activity as that process words it. - **Correct the Statement and the Next Run** - `ref/rev/settle-a-commission-dispute`, activity 13 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Feed the Cause Back** - `ref/rev/settle-a-commission-dispute`, activity 15 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Freeze the Statement Version** - `ref/rev/settle-a-commission-dispute`, activity 4 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Pull the Evidence Behind the Line** - `ref/rev/settle-a-commission-dispute`, activity 5 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Recompute the Line Independently** - `ref/rev/settle-a-commission-dispute`, activity 6 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
--- name: show-the-working-and-have-it-read description: Builds each statement so that every line names its booking, its rate, its plan sentence and its date, puts it in front of the manager who has to stand behind it, and records what they accepted and what they said was wrong. Use it when running `ref/rev/calculate-commission`. license: CC-BY-4.0 metadata: agent: commission-calculator agent-version: "1" --- # Show the working and have it read ## What it does Builds each statement so that every line names its booking, its rate, its plan sentence and its date, puts it in front of the manager who has to stand behind it, and records what they accepted and what they said was wrong. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Have the Manager Read the Statements** - `ref/rev/calculate-commission`, activity 13 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Record the Corrections** - `ref/rev/calculate-commission`, activity 16 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) - **Show the Working, Line by Line** - `ref/rev/calculate-commission`, activity 12 - [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md) ## What to record Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused 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`.
Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.
Point it at your systems
To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 7 roles, and the access level beside each one is the most the work needs.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
"mcpServers": {
"system-of-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/system-of-record"
},
"plan-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/plan-record"
},
"quota-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/quota-record"
},
"commission-ledger": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/commission-ledger"
},
"statement-store": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/statement-store"
},
"payroll-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/payroll-system"
},
"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.
3 processes, 21 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.
Open the Period · Pull the Bookings · Match Each Booking to a Seller · Check the Booking Record Is Complete · Apply the Credit Rules · Measure Attainment · Compute Each Component · Apply Gates, Accelerators and Caps · Net Draws and Clawbacks · Hold Back What Is Not Yet Payable · Show the Working, Line by Line · Have the Manager Read the Statements · Record the Corrections
Test the Plan Against Awkward Cases · Build the Worked Examples · Brief the Managers and the Calculator
Freeze the Statement Version · Pull the Evidence Behind the Line · Recompute the Line Independently · Correct the Statement and the Next Run · Feed the Cause Back
What it writes down
Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused it.
What it will not do
Does not write or change the plan it computes, which is the plan-designer agent, and does not interpret a sentence that turns out to be ambiguous. Does not settle a contested credit split: it shows both claims with the rule behind each and people settle it by name. Does not run a claim to an answer or talk to a claimant, which is the dispute-coordinator agent, though it freezes the statement, pulls the evidence and recomputes the line for one. Does not set quotas, approve the run, or pay anybody. Does not rewrite a closed run: a correction to a period already paid lands in the next run as its own line, naming the period it belongs to, because a statement people have already read is evidence.
These limits are written into the job on purpose, so that everyone adopting the process knows which decisions stay with a person.
Who has built one, and how far each one got
Nobody has built one yet. The catalog says so rather than leaving the section off, because an empty list is a fact about the document.
implements: commission-calculator v1
One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
The closest things in the catalog, by description
Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.
Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.
- Moltline Merchant Maths MCP server · moltlinestudio.com · hosted · mirrored from the MCP registry Processor fees, charge-to-net, invoice totals and proration. 3 of 6 tools free.
- subscriptions MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Verified monthly-seat catalog, account attribution, quota, overage, and MRR infrastructure.
- TaskRail MCP server · taskrail.alamavar.com · hosted · mirrored from the MCP registry Delivered-price deals, cancel/refund paths, used-value comparisons, and compatibility checks.