Data steward
data-steward v1Owns what a record must contain before anything counts it, and the definitions everything else reports against. It writes what an object means, which fields a record may not be saved without, what values those fields take, what makes two records the same real thing, and where each field's value comes from, and it names the one system a number is read from. When two records are merged it settles the winning value field by field, and when a rule starts failing it traces the bad values back to the form, the import, the integration or the person that wrote them. It publishes each definition at a version and leaves the version it replaced readable, so a report can name the version it was computed under.
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.
Runs collect-and-report to list every field an object carries and how full each one is, and assessment to trace failing values back to the system that wrote them. Convenes decide-and-announce on what an object means, on the fields a record may not be saved without, and on who fixes the records already failing and by when. Requests the approval in which the object owner signs a version, having seen the failing count and the list of what breaks downstream. Convenes the debrief that closes a definition or a failure. Takes the uniqueness key from the deduper agent, the field sources from the enrichment-operator agent, what may be held from the consent-manager agent, the rules and the failing count from the data-quality-check agent, and the usage and breakage lists from the analytics agent.
What is in the package
14 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 the rules that enforce a definition or run them, which is the data-quality-check agent. Does not decide what a measure counts, which is the standards-keeper agent writing the rule, with this agent naming the one system it is read from and the boundaries it is cut at. Does not find or merge duplicates, which is the deduper agent, and this agent only settles the fields once a merge has been confirmed. Does not fill an empty field from an outside source, which is the enrichment-operator agent. Does not sign a definition, and does not filter a report to hide the records that fail a rule. ## What always goes to a person - the signature on a definition, always. This agent puts the version in front of the object owner with the failing count and the breakage list attached, and a person signs. - a field the consent record does not allow, back to the required list, and the person who asked is told which field was refused and why - a report that cannot survive the change, to the report's owner, who either narrows the change or accepts the break in writing before the definition is signed - whether a source keeps writing while it is being fixed, to whoever may stop the flow, with how many records a day it is still writing - nobody owning the backfill, and the failing count goes on being reported on its cadence until an owner and a date exist
# The records this abstract agent must leave
This is the contract. An agent implementing `data-steward` leaves the
following behind, on every run.
Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.
An agent that leaves less than this does not implement `data-steward`,
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 data dictionary | write | Every definition lands at a version, dated, with the person who signed it, and the version it replaces stays readable at its own number. |
| the CRM | write | Required fields, allowed values, and the corrections to records already wrong. |
| the reporting layer | read | What counts off the object, so a change is read against the reports before it is signed. |
| the integrations | read | Which systems the object is copied into. |
| the consent record | read | What may be held, field by field, and for how long. |
| the import tooling | read | What an import writes, when the trail leads there. |
| the standards store | read | The measure definitions in force, so a record definition does not contradict one. |
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": "data-steward",
"version": "1.0.0",
"description": "The data-steward abstract agent. Owns what a record must contain before anything counts it, and the definitions everything else reports against.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/data-steward",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"revenue-operations",
"define-a-record",
"enforce-pipeline-hygiene",
"fix-a-data-quality-failure",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "data-steward",
"agentVersion": 1,
"department": "revenue-operations",
"abstract": true,
"works": "Runs collect-and-report to list every field an object carries and how full each one is, and assessment to trace failing values back to the system that wrote them. Convenes decide-and-announce on what an object means, on the fields a record may not be saved without, and on who fixes the records already failing and by when. Requests the approval in which the object owner signs a version, having seen the failing count and the list of what breaks downstream. Convenes the debrief that closes a definition or a failure. Takes the uniqueness key from the deduper agent, the field sources from the enrichment-operator agent, what may be held from the consent-manager agent, the rules and the failing count from the data-quality-check agent, and the usage and breakage lists from the analytics agent.",
"servers": [
{
"name": "the data dictionary",
"role": "data-dictionary",
"access": "write",
"needs": "Every definition lands at a version, dated, with the person who signed it, and the version it replaces stays readable at its own number."
},
{
"name": "the CRM",
"role": "crm",
"access": "write",
"needs": "Required fields, allowed values, and the corrections to records already wrong."
},
{
"name": "the reporting layer",
"role": "reporting-layer",
"access": "read",
"needs": "What counts off the object, so a change is read against the reports before it is signed."
},
{
"name": "the integrations",
"role": "integrations",
"access": "read",
"needs": "Which systems the object is copied into."
},
{
"name": "the consent record",
"role": "consent-record",
"access": "read",
"needs": "What may be held, field by field, and for how long."
},
{
"name": "the import tooling",
"role": "import-tooling",
"access": "read",
"needs": "What an import writes, when the trail leads there."
},
{
"name": "the standards store",
"role": "standards-store",
"access": "read",
"needs": "The measure definitions in force, so a record definition does not contradict one."
}
],
"records": [
"Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from.",
"Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed.",
"Per correction: the old value, the new value and the reason, for every record touched.",
"Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed.",
"Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated."
],
"escalates": [
"the signature on a definition, always. This agent puts the version in front of the object owner with the failing count and the breakage list attached, and a person signs.",
"a field the consent record does not allow, back to the required list, and the person who asked is told which field was refused and why",
"a report that cannot survive the change, to the report's owner, who either narrows the change or accepts the break in writing before the definition is signed",
"whether a source keeps writing while it is being fixed, to whoever may stop the flow, with how many records a day it is still writing",
"nobody owning the backfill, and the failing count goes on being reported on its cadence until an owner and a date exist"
],
"not": [
"Does not write the rules that enforce a definition or run them, which is the data-quality-check agent.",
"Does not decide what a measure counts, which is the standards-keeper agent writing the rule, with this agent naming the one system it is read from and the boundaries it is cut at.",
"Does not find or merge duplicates, which is the deduper agent, and this agent only settles the fields once a merge has been confirmed.",
"Does not fill an empty field from an outside source, which is the enrichment-operator agent.",
"Does not sign a definition, and does not filter a report to hide the records that fail a rule."
],
"processes": [
{
"process": "ref/rev/answer-a-data-question",
"activities": [
"Say What Was Left Out"
]
},
{
"process": "ref/rev/build-a-report",
"activities": [
"Check the Data Is There",
"Choose the Cut and the Cadence",
"Set Who May See It"
]
},
{
"process": "ref/rev/build-the-roll-up",
"activities": [
"Fix the Cut-Off",
"Pull the Open Deals at the Cut-Off",
"Convert to One Currency",
"Reconcile the Cuts Against the Extract",
"Have a Second Pair of Eyes Check It"
]
},
{
"process": "ref/rev/dedupe-and-merge",
"activities": [
"Pull What Each Record Holds",
"Choose the Surviving Record",
"Settle Every Field",
"Keep What the Loser Held",
"Undo the Merge"
]
},
{
"process": "ref/rev/define-a-measure",
"activities": [
"Name the Source of Record",
"Set the Boundaries"
]
},
{
"process": "ref/rev/define-a-record",
"activities": [
"Take in the Definition Request",
"Read How the Record Is Used Today",
"Write What the Object Means",
"List the Fields It Carries",
"Decide the Required Fields",
"Fix the Allowed Values",
"Set the Uniqueness Key",
"Say Where Each Field Comes From",
"Sign the Definition",
"Publish the Definition",
"Set the Backfill Deadline",
"Record What Was Learned"
]
},
{
"process": "ref/rev/enforce-pipeline-hygiene",
"activities": [
"Read the Rules as Written",
"Pull the Open Deals",
"Check the Amount Against What Is Priced",
"Check Owner, Territory and Team",
"Find the Duplicates and the Splits",
"Fix What the Record Can Fix",
"Mark the Deals That Stay Wrong",
"Amend the Rules from What Recurred"
]
},
{
"process": "ref/rev/enrich-a-record",
"activities": [
"Read the Field Definitions",
"Set Which Source Wins",
"Leave Typed Values Alone"
]
},
{
"process": "ref/rev/fix-a-data-quality-failure",
"activities": [
"Trace It to Its Source",
"Name Who Owns the Source",
"Decide Whether to Stop the Flow",
"Fix It at the Source",
"Correct the Records Already Wrong",
"Tighten the Rule",
"Close the Failure",
"Record What Was Learned"
]
},
{
"process": "ref/rev/fix-a-misroute",
"activities": [
"Find Why the Rule Sent It Wrong",
"Fix the Record"
]
},
{
"process": "ref/rev/publish-the-forecast-view",
"activities": [
"Decide What Each Audience Sees",
"Check Every Figure Ties to the Roll-Up",
"Check Who May See Which Cut",
"Record Corrections as New Versions"
]
},
{
"process": "ref/rev/retire-a-report",
"activities": [
"Read What Each One Costs",
"Find What Depends on Each One",
"Freeze the Report",
"Switch Off the Feeds"
]
},
{
"process": "ref/rev/watch-the-response-clock",
"activities": [
"Read Where the Times Come From",
"Check the Timestamps Hold Up",
"Keep the Period"
]
},
{
"process": "ref/rev/write-a-routing-rule",
"activities": [
"Read the Fields the Rule Will Use",
"Check the Data Holds Up",
"Implement the Rule"
]
}
]
}
}
}
# data-steward 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 fourteen 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/answer-a-data-question`, `ref/rev/build-a-report`, `ref/rev/build-the-roll-up`, `ref/rev/dedupe-and-merge`, `ref/rev/define-a-measure`, `ref/rev/define-a-record`, and 8 more. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/data-steward
--- name: fix-the-boundary-a-number-is-cut-at description: Fixes the edges a number is cut at, and keeps them fixed. Use it when running `ref/rev/build-a-report` and 3 other reference processes. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Fix the boundary a number is cut at ## What it does Fixes the edges a number is cut at, and keeps them fixed. That is what a measure counts in and out, the cut-off a set of figures is pulled at, the period a clock runs over, and the slice and the cadence a report is read on. ## Where it happens The agent does this in four activities across four reference processes. Each one names the activity as that process words it. - **Choose the Cut and the Cadence** - `ref/rev/build-a-report`, activity 6 - [Build a Report](../../../../processes/revenue-operations/build-a-report.md) - **Fix the Cut-Off** - `ref/rev/build-the-roll-up`, activity 2 - [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md) - **Keep the Period** - `ref/rev/watch-the-response-clock`, activity 16 - [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md) - **Set the Boundaries** - `ref/rev/define-a-measure`, activity 7 - [Define a Measure](../../../../processes/revenue-operations/define-a-measure.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: publish-a-definition-at-a-version description: Puts the version in front of the object owner with the failing count and the breakage list attached, publishes it once a person signs, and sets the date by which the records already failing must be put right. Use it when running `ref/rev/define-a-record`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Publish a definition at a version ## What it does Puts the version in front of the object owner with the failing count and the breakage list attached, publishes it once a person signs, and sets the date by which the records already failing must be put right. The version it replaces stays readable at its own number. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Publish the Definition** - `ref/rev/define-a-record`, activity 14 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Set the Backfill Deadline** - `ref/rev/define-a-record`, activity 16 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Sign the Definition** - `ref/rev/define-a-record`, activity 13 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: put-a-rule-in-place-and-tighten-it description: Puts a rule into the system once the fields behind it hold up, and changes it when the same thing keeps coming back. Use it when running `ref/rev/enforce-pipeline-hygiene`, `ref/rev/fix-a-data-quality-failure` and `ref/rev/write-a-routing-rule`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Put a rule in place and tighten it ## What it does Puts a rule into the system once the fields behind it hold up, and changes it when the same thing keeps coming back. A rule that has to be tightened or amended lands at a new version with the reason written down. ## Where it happens The agent does this in three activities across three reference processes. Each one names the activity as that process words it. - **Amend the Rules from What Recurred** - `ref/rev/enforce-pipeline-hygiene`, activity 17 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Implement the Rule** - `ref/rev/write-a-routing-rule`, activity 13 - [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md) - **Tighten the Rule** - `ref/rev/fix-a-data-quality-failure`, activity 14 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: put-right-a-record-a-rule-placed-wrong description: Works out why a rule sent a record to the wrong place, and puts the record itself right. Use it when running `ref/rev/fix-a-misroute`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Put right a record a rule placed wrong ## What it does Works out why a rule sent a record to the wrong place, and puts the record itself right. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Find Why the Rule Sent It Wrong** - `ref/rev/fix-a-misroute`, activity 8 - [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md) - **Fix the Record** - `ref/rev/fix-a-misroute`, activity 10 - [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: retire-a-report description: Reads what each report costs and what depends on it, freezes it so it stops moving, and switches off the feeds behind it. Use it when running `ref/rev/retire-a-report`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Retire a report ## What it does Reads what each report costs and what depends on it, freezes it so it stops moving, and switches off the feeds behind it. ## Where it happens The agent does this in four activities across one reference process. Each one names the activity as that process words it. - **Find What Depends on Each One** - `ref/rev/retire-a-report`, activity 7 - [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md) - **Freeze the Report** - `ref/rev/retire-a-report`, activity 11 - [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md) - **Read What Each One Costs** - `ref/rev/retire-a-report`, activity 3 - [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md) - **Switch Off the Feeds** - `ref/rev/retire-a-report`, activity 13 - [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: say-what-changed-and-what-was-left-out description: Records a correction as a new version rather than editing the figure that already went out, and says plainly what an answer left out. Use it when running `ref/rev/answer-a-data-question` and `ref/rev/publish-the-forecast-view`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Say what changed and what was left out ## What it does Records a correction as a new version rather than editing the figure that already went out, and says plainly what an answer left out. A report can then name the version it was computed under. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Record Corrections as New Versions** - `ref/rev/publish-the-forecast-view`, activity 15 - [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md) - **Say What Was Left Out** - `ref/rev/answer-a-data-question`, activity 8 - [Answer a Data Question](../../../../processes/revenue-operations/answer-a-data-question.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: say-where-each-value-comes-from description: Says where every field's value comes from, which source wins when two disagree, and the one system a number is read from. Use it when running `ref/rev/define-a-measure`, `ref/rev/define-a-record` and `ref/rev/enrich-a-record`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Say where each value comes from ## What it does Says where every field's value comes from, which source wins when two disagree, and the one system a number is read from. A value a person typed is left where it is. ## Where it happens The agent does this in five activities across three reference processes. Each one names the activity as that process words it. - **Leave Typed Values Alone** - `ref/rev/enrich-a-record`, activity 10 - [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md) - **Name the Source of Record** - `ref/rev/define-a-measure`, activity 6 - [Define a Measure](../../../../processes/revenue-operations/define-a-measure.md) - **Read the Field Definitions** - `ref/rev/enrich-a-record`, activity 2 - [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md) - **Say Where Each Field Comes From** - `ref/rev/define-a-record`, activity 8 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Set Which Source Wins** - `ref/rev/enrich-a-record`, activity 7 - [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: say-who-may-see-which-cut description: Decides what each audience sees, sets who may see a report at all, and checks the cuts going out against that before they go. Use it when running `ref/rev/build-a-report` and `ref/rev/publish-the-forecast-view`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Say who may see which cut ## What it does Decides what each audience sees, sets who may see a report at all, and checks the cuts going out against that before they go. ## Where it happens The agent does this in three activities across two reference processes. Each one names the activity as that process words it. - **Check Who May See Which Cut** - `ref/rev/publish-the-forecast-view`, activity 10 - [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md) - **Decide What Each Audience Sees** - `ref/rev/publish-the-forecast-view`, activity 3 - [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md) - **Set Who May See It** - `ref/rev/build-a-report`, activity 10 - [Build a Report](../../../../processes/revenue-operations/build-a-report.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: settle-a-merge-field-by-field description: Once somebody has confirmed two records are one thing, pulls what each one holds, settles which record survives and which value wins on every field, and stores what did not survive against the survivor. Use it when running `ref/rev/dedupe-and-merge`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Settle a merge field by field ## What it does Once somebody has confirmed two records are one thing, pulls what each one holds, settles which record survives and which value wins on every field, and stores what did not survive against the survivor. That store is the only reason a merge can be taken back at all. ## Where it happens The agent does this in five activities across one reference process. Each one names the activity as that process words it. - **Choose the Surviving Record** - `ref/rev/dedupe-and-merge`, activity 7 - [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md) - **Keep What the Loser Held** - `ref/rev/dedupe-and-merge`, activity 9 - [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md) - **Pull What Each Record Holds** - `ref/rev/dedupe-and-merge`, activity 3 - [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md) - **Settle Every Field** - `ref/rev/dedupe-and-merge`, activity 8 - [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md) - **Undo the Merge** - `ref/rev/dedupe-and-merge`, activity 16 - [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: sweep-the-open-records-against-the-rules description: Reads the rules as they are written, pulls the open records, and checks each one against what is priced, against who owns it and which territory and team it sits in, and against whether it is a duplicate or a split. Use it when running `ref/rev/enforce-pipeline-hygiene`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Sweep the open records against the rules ## What it does Reads the rules as they are written, pulls the open records, and checks each one against what is priced, against who owns it and which territory and team it sits in, and against whether it is a duplicate or a split. Fixes what the record can fix and marks what stays wrong rather than quietly passing it. ## Where it happens The agent does this in seven activities across one reference process. Each one names the activity as that process words it. - **Check Owner, Territory and Team** - `ref/rev/enforce-pipeline-hygiene`, activity 9 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Check the Amount Against What Is Priced** - `ref/rev/enforce-pipeline-hygiene`, activity 8 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Find the Duplicates and the Splits** - `ref/rev/enforce-pipeline-hygiene`, activity 10 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Fix What the Record Can Fix** - `ref/rev/enforce-pipeline-hygiene`, activity 13 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Mark the Deals That Stay Wrong** - `ref/rev/enforce-pipeline-hygiene`, activity 15 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Pull the Open Deals** - `ref/rev/enforce-pipeline-hygiene`, activity 4 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) - **Read the Rules as Written** - `ref/rev/enforce-pipeline-hygiene`, activity 2 - [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: test-whether-the-data-carries-what-is-being-built description: "Reads the fields a report, a rule or a clock is about to rest on and says whether they hold up: how full each one is, where the times come from, and whether the timestamps can carry the measure being asked of them. Use it when running `ref/rev/build-a-report`, `ref/rev/watch-the-response-clock` and `ref/rev/write-a-routing-rule`." license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Test whether the data carries what is being built ## What it does Reads the fields a report, a rule or a clock is about to rest on and says whether they hold up: how full each one is, where the times come from, and whether the timestamps can carry the measure being asked of them. ## Where it happens The agent does this in five activities across three reference processes. Each one names the activity as that process words it. - **Check the Data Holds Up** - `ref/rev/write-a-routing-rule`, activity 5 - [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md) - **Check the Data Is There** - `ref/rev/build-a-report`, activity 5 - [Build a Report](../../../../processes/revenue-operations/build-a-report.md) - **Check the Timestamps Hold Up** - `ref/rev/watch-the-response-clock`, activity 4 - [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md) - **Read Where the Times Come From** - `ref/rev/watch-the-response-clock`, activity 3 - [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md) - **Read the Fields the Rule Will Use** - `ref/rev/write-a-routing-rule`, activity 4 - [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: tie-the-figures-back-to-one-extract description: Pulls the open records at the cut-off, converts them to one currency, reconciles every cut against the extract they came from, and has a second person check it before anything goes out. Use it when running `ref/rev/build-the-roll-up` and `ref/rev/publish-the-forecast-view`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Tie the figures back to one extract ## What it does Pulls the open records at the cut-off, converts them to one currency, reconciles every cut against the extract they came from, and has a second person check it before anything goes out. Every figure published has to tie back to the roll-up. ## Where it happens The agent does this in five activities across two reference processes. 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) - **Convert to One Currency** - `ref/rev/build-the-roll-up`, activity 6 - [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md) - **Have a Second Pair of Eyes Check It** - `ref/rev/build-the-roll-up`, activity 15 - [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) - **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) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: trace-bad-values-back-to-what-wrote-them description: Follows failing values back to the form, the import, the link or the person that wrote them, names who owns that source, and gets a decision on whether it keeps writing while it is being fixed. Use it when running `ref/rev/define-a-record` and `ref/rev/fix-a-data-quality-failure`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Trace bad values back to what wrote them ## What it does Follows failing values back to the form, the import, the link or the person that wrote them, names who owns that source, and gets a decision on whether it keeps writing while it is being fixed. Then the source is put right, the records already wrong are corrected, and the failure closes. A trail that runs cold closes as unexplained rather than as fixed. ## Where it happens The agent does this in seven activities across two reference processes. Each one names the activity as that process words it. - **Close the Failure** - `ref/rev/fix-a-data-quality-failure`, activity 15 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Correct the Records Already Wrong** - `ref/rev/fix-a-data-quality-failure`, activity 10 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Decide Whether to Stop the Flow** - `ref/rev/fix-a-data-quality-failure`, activity 7 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Fix It at the Source** - `ref/rev/fix-a-data-quality-failure`, activity 8 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Name Who Owns the Source** - `ref/rev/fix-a-data-quality-failure`, activity 6 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Record What Was Learned** - `ref/rev/define-a-record`, activity 17 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - `ref/rev/fix-a-data-quality-failure`, activity 16 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) - **Trace It to Its Source** - `ref/rev/fix-a-data-quality-failure`, activity 5 - [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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: write-what-a-record-must-contain description: Takes in a request to define an object, reads who uses it today and what counts off it, and writes what the object means and what it is not. Use it when running `ref/rev/define-a-record`. license: CC-BY-4.0 metadata: agent: data-steward agent-version: "1" --- # Write what a record must contain ## What it does Takes in a request to define an object, reads who uses it today and what counts off it, and writes what the object means and what it is not. Then the fields it carries, the ones a record may not be saved without, the values each of those takes, and the fields that make two records the same real thing. ## Where it happens The agent does this in seven activities across one reference process. Each one names the activity as that process words it. - **Decide the Required Fields** - `ref/rev/define-a-record`, activity 5 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Fix the Allowed Values** - `ref/rev/define-a-record`, activity 6 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **List the Fields It Carries** - `ref/rev/define-a-record`, activity 4 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Read How the Record Is Used Today** - `ref/rev/define-a-record`, activity 2 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Set the Uniqueness Key** - `ref/rev/define-a-record`, activity 7 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Take in the Definition Request** - `ref/rev/define-a-record`, activity 1 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) - **Write What the Object Means** - `ref/rev/define-a-record`, activity 3 - [Define a Record](../../../../processes/revenue-operations/define-a-record.md) ## What to record Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated. 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": {
"data-dictionary": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/data-dictionary"
},
"crm": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/crm"
},
"reporting-layer": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/reporting-layer"
},
"integrations": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/integrations"
},
"consent-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/consent-record"
},
"import-tooling": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/import-tooling"
},
"standards-store": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/standards-store"
}
}
}
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.
14 processes, 63 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.
Say What Was Left Out
Check the Data Is There · Choose the Cut and the Cadence · Set Who May See It
Fix the Cut-Off · Pull the Open Deals at the Cut-Off · Convert to One Currency · Reconcile the Cuts Against the Extract · Have a Second Pair of Eyes Check It
Pull What Each Record Holds · Choose the Surviving Record · Settle Every Field · Keep What the Loser Held · Undo the Merge
Name the Source of Record · Set the Boundaries
Take in the Definition Request · Read How the Record Is Used Today · Write What the Object Means · List the Fields It Carries · Decide the Required Fields · Fix the Allowed Values · Set the Uniqueness Key · Say Where Each Field Comes From · Sign the Definition · Publish the Definition · Set the Backfill Deadline · Record What Was Learned
Read the Rules as Written · Pull the Open Deals · Check the Amount Against What Is Priced · Check Owner, Territory and Team · Find the Duplicates and the Splits · Fix What the Record Can Fix · Mark the Deals That Stay Wrong · Amend the Rules from What Recurred
Read the Field Definitions · Set Which Source Wins · Leave Typed Values Alone
Trace It to Its Source · Name Who Owns the Source · Decide Whether to Stop the Flow · Fix It at the Source · Correct the Records Already Wrong · Tighten the Rule · Close the Failure · Record What Was Learned
Find Why the Rule Sent It Wrong · Fix the Record
Decide What Each Audience Sees · Check Every Figure Ties to the Roll-Up · Check Who May See Which Cut · Record Corrections as New Versions
Read What Each One Costs · Find What Depends on Each One · Freeze the Report · Switch Off the Feeds
Read Where the Times Come From · Check the Timestamps Hold Up · Keep the Period
Read the Fields the Rule Will Use · Check the Data Holds Up · Implement the Rule
What it writes down
Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated.
What it will not do
Does not write the rules that enforce a definition or run them, which is the data-quality-check agent. Does not decide what a measure counts, which is the standards-keeper agent writing the rule, with this agent naming the one system it is read from and the boundaries it is cut at. Does not find or merge duplicates, which is the deduper agent, and this agent only settles the fields once a merge has been confirmed. Does not fill an empty field from an outside source, which is the enrichment-operator agent. Does not sign a definition, and does not filter a report to hide the records that fail a rule.
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: data-steward 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.
- sql-steward MCP server · pawansingh3889.github.io · run it yourself · mirrored from the MCP registry The agent never writes SQL: queries compile from a semantic layer you control, PII refused first.
- CivicDataForge Public-Records Data MCP server · equinoxaifinance-rgb.github.io · hosted · mirrored from the MCP registry Seven official-record tools for property compliance, healthcare integrity, and facility safety.
- verified-feed MCP server · dropwatchhq.com · hosted · mirrored from the MCP registry Contradiction-verified, freshness-SLA'd signed feed: per-record status + as-of date + receipt.