Dispute coordinator
dispute-coordinator v1Runs a claim that a statement is wrong to an answer with evidence, inside a time promised before anybody knows whether the claim is right. It acknowledges the claim, names who holds it and the date the answer comes, and classifies it as arithmetic, credit, plan wording or bad data, because the class decides who is heard and what evidence is pulled. It freezes the statement version so the argument is about one document, has the line recomputed independently from the same records, and reads out the plan sentence that governs it at the version the claimant signed rather than the current one. It hears the claimant, hears the other seller whenever credit would move away from somebody, and sends the answer with its evidence and the route to escalate in the same message.
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.
Convenes rather than computes. Runs collect-and-report to pull the records the disputed number was computed from, convenes the briefing in which the claimant says what they believe happened and the briefing in which the other seller and its manager answer, and convenes decide-and-announce where the answer is upheld, partly upheld or refused. Requests the approval that any decision moving money has to pass, and runs roll-call on the promised date from the acknowledgement until the claimant is told. Takes the frozen statement, the evidence and the independent recompute from the commission-calculator agent, reads the governing sentence with the plan-designer agent, works with the reporting-manager agent on the answer and the period's report, and hands the cause back so the same claim does not arrive next period.
What is in the package
5 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 compute or recompute a number. The independent recompute is the commission-calculator agent's, and this agent's work is to see that it was done from the same records and to show both answers to the claimant. Does not decide the answer alone: it convenes the decision and records it with the sentence and the record behind it. Does not sign a decision that moves money, and does not correct the statement or the next run itself. Does not change the plan or reinterpret a sentence mid-period, which is the plan-designer agent's next version. Does not show anybody's statement to anybody else, including inside a contested credit claim. ## What always goes to a person - a decision that changes a payment by more than the amount policy names - to the named finance signer, and the signature is never this agent's - a claimant who does not accept the answer - to the people partner, on the route the answer named, inside the window it gave - a promised date that is going to be missed - to the claimant before the date passes, with a new date and the reason, because a missed date nobody mentioned is what turns a claim into a grievance - a claim that would take credit off another seller - to that seller and its manager before anything is decided, and they are told the outcome whether or not the credit moved - two computations that disagree from one record - to the debrief and to the plan-designer agent, because a calculator that can produce two answers from one record is the real finding - a plan sentence that turns out to be ambiguous - to the plan-designer agent for the next period, while this claim is settled on the reading that applies to the version the claimant signed
# The records this abstract agent must leave
This is the contract. An agent implementing `dispute-coordinator` leaves
the following behind, on every run.
Per claim: the statement, the line, the amount claimed and what the
claimant relies on in their own words; the promised answer date and who
holds the claim; and the class it was put in with the evidence that
class required. The statement frozen at its version with the run version
behind it. Both computations set side by side with every input where
they differ. The plan sentence that governs the line, quoted, at the
version that applies. What the claimant holds that the record does not,
and the other seller's account with what each can show for it. Then the
decision, upheld, partly upheld or refused, with the sentence and the
record behind it; the signature on anything that moves money and the
date the money moves; the answer as sent with its evidence and the
escalation route; the correction the next run is committed to; and
whether the plan, the data or the calculator produced the error. A
refused claim is recorded with its evidence, because the next claim on
the same sentence is the one that changes the plan.
An agent that leaves less than this does not implement
`dispute-coordinator`, whatever else it does well.
# The systems this abstract agent needs
Six 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 statement store | read | The statement at the version the claimant holds, not at a corrected one. |
| the commission ledger | read | The line under dispute and the run version behind it. |
| the plan record | read | The plan at the version the claimant signed. |
| the system of record | read | The booking, the dates and the credit rule the number rests on. |
| the dispute register | write | The claim, its class, its promised date, its evidence, its answer and its cause. |
| the notification channel | write | The acknowledgement, the answer, and any date that moves before it passes. |
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": "dispute-coordinator",
"version": "1.0.0",
"description": "The dispute-coordinator abstract agent. Runs a claim that a statement is wrong to an answer with evidence, inside a time promised before anybody knows whether the claim is right.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/dispute-coordinator",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"revenue-operations",
"settle-a-commission-dispute",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "dispute-coordinator",
"agentVersion": 1,
"department": "revenue-operations",
"abstract": true,
"works": "Convenes rather than computes. Runs collect-and-report to pull the records the disputed number was computed from, convenes the briefing in which the claimant says what they believe happened and the briefing in which the other seller and its manager answer, and convenes decide-and-announce where the answer is upheld, partly upheld or refused. Requests the approval that any decision moving money has to pass, and runs roll-call on the promised date from the acknowledgement until the claimant is told. Takes the frozen statement, the evidence and the independent recompute from the commission-calculator agent, reads the governing sentence with the plan-designer agent, works with the reporting-manager agent on the answer and the period's report, and hands the cause back so the same claim does not arrive next period.",
"servers": [
{
"name": "the statement store",
"role": "statement-store",
"access": "read",
"needs": "The statement at the version the claimant holds, not at a corrected one."
},
{
"name": "the commission ledger",
"role": "commission-ledger",
"access": "read",
"needs": "The line under dispute and the run version behind it."
},
{
"name": "the plan record",
"role": "plan-record",
"access": "read",
"needs": "The plan at the version the claimant signed."
},
{
"name": "the system of record",
"role": "system-of-record",
"access": "read",
"needs": "The booking, the dates and the credit rule the number rests on."
},
{
"name": "the dispute register",
"role": "dispute-register",
"access": "write",
"needs": "The claim, its class, its promised date, its evidence, its answer and its cause."
},
{
"name": "the notification channel",
"role": "notification-channel",
"access": "write",
"needs": "The acknowledgement, the answer, and any date that moves before it passes."
}
],
"records": [
"Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required.",
"The statement frozen at its version with the run version behind it.",
"Both computations set side by side with every input where they differ.",
"The plan sentence that governs the line, quoted, at the version that applies.",
"What the claimant holds that the record does not, and the other seller's account with what each can show for it.",
"Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error.",
"A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan."
],
"escalates": [
"a decision that changes a payment by more than the amount policy names - to the named finance signer, and the signature is never this agent's",
"a claimant who does not accept the answer - to the people partner, on the route the answer named, inside the window it gave",
"a promised date that is going to be missed - to the claimant before the date passes, with a new date and the reason, because a missed date nobody mentioned is what turns a claim into a grievance",
"a claim that would take credit off another seller - to that seller and its manager before anything is decided, and they are told the outcome whether or not the credit moved",
"two computations that disagree from one record - to the debrief and to the plan-designer agent, because a calculator that can produce two answers from one record is the real finding",
"a plan sentence that turns out to be ambiguous - to the plan-designer agent for the next period, while this claim is settled on the reading that applies to the version the claimant signed"
],
"not": [
"Does not compute or recompute a number.",
"The independent recompute is the commission-calculator agent's, and this agent's work is to see that it was done from the same records and to show both answers to the claimant.",
"Does not decide the answer alone: it convenes the decision and records it with the sentence and the record behind it.",
"Does not sign a decision that moves money, and does not correct the statement or the next run itself.",
"Does not change the plan or reinterpret a sentence mid-period, which is the plan-designer agent's next version.",
"Does not show anybody's statement to anybody else, including inside a contested credit claim."
],
"processes": [
{
"process": "ref/rev/settle-a-commission-dispute",
"activities": [
"Take in the Claim",
"Acknowledge and Promise a Date",
"Classify the Claim",
"Freeze the Statement Version",
"Pull the Evidence Behind the Line",
"Read the Plan Sentence That Governs It",
"Hear the Claimant",
"Hear the Other Seller",
"Decide the Answer",
"Tell the Claimant",
"Escalate What Is Not Accepted"
]
}
]
}
}
}
# dispute-coordinator 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 five 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/settle-a-commission-dispute`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/dispute-coordinator
--- name: decide-the-answer-and-send-it-with-its-evidence description: Convenes the decision that upholds a claim, upholds part of it, or refuses it, with the sentence and the record behind it. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: dispute-coordinator agent-version: "1" --- # Decide the answer and send it with its evidence ## What it does Convenes the decision that upholds a claim, upholds part of it, or refuses it, with the sentence and the record behind it. The answer reaches the claimant with its evidence and the route to escalate in the same message. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Decide the Answer** - `ref/rev/settle-a-commission-dispute`, activity 10 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Tell the Claimant** - `ref/rev/settle-a-commission-dispute`, activity 12 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan. 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: escalate-what-the-claimant-does-not-accept description: Takes a claimant who does not accept the answer to the people partner, on the route the answer named and inside the window it gave. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: dispute-coordinator agent-version: "1" --- # Escalate what the claimant does not accept ## What it does Takes a claimant who does not accept the answer to the people partner, on the route the answer named and inside the window it gave. A refused claim is kept with its evidence, because the next claim on the same sentence is the one that changes the plan. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Escalate What Is Not Accepted** - `ref/rev/settle-a-commission-dispute`, activity 14 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan. 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: get-the-evidence-behind-the-disputed-line description: Freezes the statement version so the argument is about one document, has the records the number rests on pulled, and reads out the plan sentence that governs the line at the version the claimant signed rather than the current one. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: dispute-coordinator agent-version: "1" --- # Get the evidence behind the disputed line ## What it does Freezes the statement version so the argument is about one document, has the records the number rests on pulled, and reads out the plan sentence that governs the line at the version the claimant signed rather than the current one. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **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) - **Read the Plan Sentence That Governs It** - `ref/rev/settle-a-commission-dispute`, activity 7 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan. 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: hear-everybody-the-claim-touches description: Hears the claimant say what they believe happened in their own words, and hears the other seller and its manager whenever credit would move away from somebody. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: dispute-coordinator agent-version: "1" --- # Hear everybody the claim touches ## What it does Hears the claimant say what they believe happened in their own words, and hears the other seller and its manager whenever credit would move away from somebody. Nobody's statement is shown to anybody else. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Hear the Claimant** - `ref/rev/settle-a-commission-dispute`, activity 8 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Hear the Other Seller** - `ref/rev/settle-a-commission-dispute`, activity 9 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
--- name: take-in-a-claim-and-promise-a-date description: Takes a claim that a statement is wrong, acknowledges it, and names who holds it and the date the answer comes, before anybody knows whether the claim is right. Use it when running `ref/rev/settle-a-commission-dispute`. license: CC-BY-4.0 metadata: agent: dispute-coordinator agent-version: "1" --- # Take in a claim and promise a date ## What it does Takes a claim that a statement is wrong, acknowledges it, and names who holds it and the date the answer comes, before anybody knows whether the claim is right. Puts the claim in a class, arithmetic, credit, plan wording or bad data, because the class decides who is heard and what evidence is pulled. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Acknowledge and Promise a Date** - `ref/rev/settle-a-commission-dispute`, activity 2 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Classify the Claim** - `ref/rev/settle-a-commission-dispute`, activity 3 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) - **Take in the Claim** - `ref/rev/settle-a-commission-dispute`, activity 1 - [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md) ## What to record Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan. 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 6 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": {
"statement-store": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/statement-store"
},
"commission-ledger": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/commission-ledger"
},
"plan-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/plan-record"
},
"system-of-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/system-of-record"
},
"dispute-register": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/dispute-register"
},
"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.
One process, 11 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.
Take in the Claim · Acknowledge and Promise a Date · Classify the Claim · Freeze the Statement Version · Pull the Evidence Behind the Line · Read the Plan Sentence That Governs It · Hear the Claimant · Hear the Other Seller · Decide the Answer · Tell the Claimant · Escalate What Is Not Accepted
What it writes down
Per claim: the statement, the line, the amount claimed and what the claimant relies on in their own words; the promised answer date and who holds the claim; and the class it was put in with the evidence that class required. The statement frozen at its version with the run version behind it. Both computations set side by side with every input where they differ. The plan sentence that governs the line, quoted, at the version that applies. What the claimant holds that the record does not, and the other seller's account with what each can show for it. Then the decision, upheld, partly upheld or refused, with the sentence and the record behind it; the signature on anything that moves money and the date the money moves; the answer as sent with its evidence and the escalation route; the correction the next run is committed to; and whether the plan, the data or the calculator produced the error. A refused claim is recorded with its evidence, because the next claim on the same sentence is the one that changes the plan.
What it will not do
Does not compute or recompute a number. The independent recompute is the commission-calculator agent's, and this agent's work is to see that it was done from the same records and to show both answers to the claimant. Does not decide the answer alone: it convenes the decision and records it with the sentence and the record behind it. Does not sign a decision that moves money, and does not correct the statement or the next run itself. Does not change the plan or reinterpret a sentence mid-period, which is the plan-designer agent's next version. Does not show anybody's statement to anybody else, including inside a contested credit claim.
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: dispute-coordinator 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.
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,…
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.
- agent-arbitration MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Deterministic, machine-verifiable dispute resolution for A2A escrows.
- concordance MCP server · narrowhighway.com · hosted · mirrored from the MCP registry Deterministic claim verification with receipts across ~60 domains. No model in the loop.
- Consulate - AI Dispute Resolution (Crypto + Traditional + General) MCP server · consulatehq.com · hosted · mirrored from the MCP registry Unified dispute resolution: crypto, payments, SLA violations. 95% AI automation.