Usage monitor
usage-monitor v1Reads what a customer actually uses against what they bought, and reports the gap in both directions: the metered thing running past the limit on the agreement, and the entitlement nobody is touching. Sets use against the entitlement period by period, shows which parts of the customer started using what and which stopped, and says which way each line is moving. Every number names the system it was read from and the date it was read, so a later run can tell whether the reading still holds. It reports the gap and leaves the meaning to the people who work the account.
What it is granted, and what it hands to a person
This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.
Works alone for most of its work, running collect-and-report against the usage record and keeping a standing read open while an opening or a risk is being worked, so the evidence is current when somebody decides. Sits in the assessment that scores the risk of an account leaving, alongside the risk watcher and the account monitor, because usage alone is never the whole answer. Feeds the expansion spotter and the upsell planner on the way up, and the risk watcher and the renewal manager on the way down. Takes the entitlement from the agreement and the account standing from the account monitor.
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 decide what the gap means. It does not open an expansion, set a renewal position, price a save, or score churn risk on its own, and the written reason a risk gets worked from comes from the people who own the account, not from a number. Does not contact the customer, and does not change what an account is entitled to. ## What always goes to a person - use past a limit that was bought - to the account owner, with the periods and the entitlement attached, before anybody prices anything - use falling away on a line the customer is paying for - to the risk watcher and the account owner, inside the hours the process sets - a usage record that does not reconcile with what was billed - to whoever owns the billing record, left unresolved rather than smoothed over - a reading it cannot take, because the meter is missing, broken or covers the wrong period - said plainly, instead of filled with an estimate
# The records this abstract agent must leave
This is the contract. An agent implementing `usage-monitor` leaves the
following behind, on every run.
Per reading: the metered thing, the entitlement it is set against, the
periods compared, the system it was read from and the date it was read.
Per account: where use sits against each limit, which teams began using
what and when, which stopped and when, and the direction of travel on
each line. A reading is dated rather than reused, so a run that confirms
an opening or watches a risk turn records a fresh read at today's date
and keeps the earlier one beside it. Anyone auditing a decision can put
the reading next to the agreement and get the same answer.
An agent that leaves less than this does not implement `usage-monitor`,
whatever else it does well.
# The systems this abstract agent needs
Four 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 usage record | read | What was actually used, period by period. |
| the billing system | read | What was invoiced against what was metered. |
| the agreement store and the entitlement record | read | A use number means nothing without the limit it sits under. |
| the CRM | write | The reading against the account, dated. |
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": "usage-monitor",
"version": "1.0.0",
"description": "The usage-monitor abstract agent. Reads what a customer actually uses against what they bought, and reports the gap in both directions: the metered thing running past the limit on the agreement, and the entitlement nobody is touching.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/usage-monitor",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"sales",
"spot-an-expansion",
"open-a-renewal",
"work-a-churn-risk",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "usage-monitor",
"agentVersion": 1,
"department": "sales",
"abstract": true,
"works": "Works alone for most of its work, running collect-and-report against the usage record and keeping a standing read open while an opening or a risk is being worked, so the evidence is current when somebody decides. Sits in the assessment that scores the risk of an account leaving, alongside the risk watcher and the account monitor, because usage alone is never the whole answer. Feeds the expansion spotter and the upsell planner on the way up, and the risk watcher and the renewal manager on the way down. Takes the entitlement from the agreement and the account standing from the account monitor.",
"servers": [
{
"name": "the usage record",
"role": "usage-record",
"access": "read",
"needs": "What was actually used, period by period."
},
{
"name": "the billing system",
"role": "billing-system",
"access": "read",
"needs": "What was invoiced against what was metered."
},
{
"name": "the agreement store and the entitlement record",
"role": "agreement-store-and-the-entitlement-record",
"access": "read",
"needs": "A use number means nothing without the limit it sits under."
},
{
"name": "the CRM",
"role": "crm",
"access": "write",
"needs": "The reading against the account, dated."
}
],
"records": [
"Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read.",
"Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line.",
"A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it.",
"Anyone auditing a decision can put the reading next to the agreement and get the same answer."
],
"escalates": [
"use past a limit that was bought - to the account owner, with the periods and the entitlement attached, before anybody prices anything",
"use falling away on a line the customer is paying for - to the risk watcher and the account owner, inside the hours the process sets",
"a usage record that does not reconcile with what was billed - to whoever owns the billing record, left unresolved rather than smoothed over",
"a reading it cannot take, because the meter is missing, broken or covers the wrong period - said plainly, instead of filled with an estimate"
],
"not": [
"Does not decide what the gap means.",
"It does not open an expansion, set a renewal position, price a save, or score churn risk on its own, and the written reason a risk gets worked from comes from the people who own the account, not from a number.",
"Does not contact the customer, and does not change what an account is entitled to."
],
"processes": [
{
"process": "ref/sls/spot-an-expansion",
"activities": [
"Take in the Signal",
"Read the Usage Against the Limit",
"Look for the Teams Newly Adopting"
]
},
{
"process": "ref/sls/open-an-expansion-deal",
"activities": [
"Confirm the Opening Still Holds"
]
},
{
"process": "ref/sls/open-a-renewal",
"activities": [
"Measure What Was Used",
"Score the Risk of Leaving"
]
},
{
"process": "ref/sls/close-a-renewal",
"activities": [
"Check What They Say Against Use"
]
},
{
"process": "ref/sls/work-a-churn-risk",
"activities": [
"Read the Usage Trend",
"Watch for the Signal to Turn"
]
}
]
}
}
}
# usage-monitor 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/sls/spot-an-expansion`, `ref/sls/open-an-expansion-deal`, `ref/sls/open-a-renewal`, `ref/sls/close-a-renewal`, `ref/sls/work-a-churn-risk`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/usage-monitor
--- name: read-use-against-what-was-bought description: "Sets what the customer actually used against the entitlement on the agreement, period by period, and reports the gap in both directions: the metered thing running past its limit, and the entitlement nobody is touching. Use it when running `ref/sls/close-a-renewal`, `ref/sls/open-a-renewal` and `ref/sls/spot-an-expansion`." license: CC-BY-4.0 metadata: agent: usage-monitor agent-version: "1" --- # Read use against what was bought ## What it does Sets what the customer actually used against the entitlement on the agreement, period by period, and reports the gap in both directions: the metered thing running past its limit, and the entitlement nobody is touching. The same reading answers what a customer says about their own use. ## Where it happens The agent does this in three activities across three reference processes. Each one names the activity as that process words it. - **Check What They Say Against Use** - `ref/sls/close-a-renewal`, activity 4 - [Close a Renewal](../../../../processes/sales/close-a-renewal.md) - **Measure What Was Used** - `ref/sls/open-a-renewal`, activity 4 - [Open a Renewal](../../../../processes/sales/open-a-renewal.md) - **Read the Usage Against the Limit** - `ref/sls/spot-an-expansion`, activity 4 - [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md) ## What to record Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer. 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-which-way-each-line-is-moving description: Shows which parts of the customer started using what and when, which stopped, and the direction of travel on each line. Use it when running `ref/sls/spot-an-expansion` and `ref/sls/work-a-churn-risk`. license: CC-BY-4.0 metadata: agent: usage-monitor agent-version: "1" --- # Say which way each line is moving ## What it does Shows which parts of the customer started using what and when, which stopped, and the direction of travel on each line. A direction is read over a window rather than off a single day. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Look for the Teams Newly Adopting** - `ref/sls/spot-an-expansion`, activity 5 - [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md) - **Read the Usage Trend** - `ref/sls/work-a-churn-risk`, activity 3 - [Work a Churn Risk](../../../../processes/sales/work-a-churn-risk.md) ## What to record Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer. 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: sit-in-the-scoring-of-a-departure-risk description: Brings the usage reading to the assessment that scores how likely an account is to leave, alongside the other readings of the account. Use it when running `ref/sls/open-a-renewal`. license: CC-BY-4.0 metadata: agent: usage-monitor agent-version: "1" --- # Sit in the scoring of a departure risk ## What it does Brings the usage reading to the assessment that scores how likely an account is to leave, alongside the other readings of the account. Usage alone is never the whole answer, and the agent does not score the risk on its own. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Score the Risk of Leaving** - `ref/sls/open-a-renewal`, activity 7 - [Open a Renewal](../../../../processes/sales/open-a-renewal.md) ## What to record Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer. 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-signal-to-read description: Takes in the signal that asks for a reading, with the account it is against and what raised it, so the reading answers a question somebody actually asked. Use it when running `ref/sls/spot-an-expansion`. license: CC-BY-4.0 metadata: agent: usage-monitor agent-version: "1" --- # Take in a signal to read ## What it does Takes in the signal that asks for a reading, with the account it is against and what raised it, so the reading answers a question somebody actually asked. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Take in the Signal** - `ref/sls/spot-an-expansion`, activity 1 - [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md) ## What to record Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer. 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-the-reading-again-while-a-run-is-open description: Keeps a standing read open while an opening or a risk is being worked, so the evidence is current when somebody decides. Use it when running `ref/sls/open-an-expansion-deal` and `ref/sls/work-a-churn-risk`. license: CC-BY-4.0 metadata: agent: usage-monitor agent-version: "1" --- # Take the reading again while a run is open ## What it does Keeps a standing read open while an opening or a risk is being worked, so the evidence is current when somebody decides. Each read is taken fresh at today's date and kept beside the earlier one rather than replacing it. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Confirm the Opening Still Holds** - `ref/sls/open-an-expansion-deal`, activity 3 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Watch for the Signal to Turn** - `ref/sls/work-a-churn-risk`, activity 13 - [Work a Churn Risk](../../../../processes/sales/work-a-churn-risk.md) ## What to record Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer. 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 4 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": {
"usage-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/usage-record"
},
"billing-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/billing-system"
},
"agreement-store-and-the-entitlement-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/agreement-store-and-the-entitlement-record"
},
"crm": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/crm"
}
}
}
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.
5 processes, 9 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.
Check What They Say Against Use
Confirm the Opening Still Holds
Measure What Was Used · Score the Risk of Leaving
Take in the Signal · Read the Usage Against the Limit · Look for the Teams Newly Adopting
Read the Usage Trend · Watch for the Signal to Turn
What it writes down
Per reading: the metered thing, the entitlement it is set against, the periods compared, the system it was read from and the date it was read. Per account: where use sits against each limit, which teams began using what and when, which stopped and when, and the direction of travel on each line. A reading is dated rather than reused, so a run that confirms an opening or watches a risk turn records a fresh read at today's date and keeps the earlier one beside it. Anyone auditing a decision can put the reading next to the agreement and get the same answer.
What it will not do
Does not decide what the gap means. It does not open an expansion, set a renewal position, price a save, or score churn risk on its own, and the written reason a risk gets worked from comes from the people who own the account, not from a number. Does not contact the customer, and does not change what an account is entitled to.
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: usage-monitor 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-metering MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Usage metering + SLA accounting for agent services (the meter behind x402 micropayments).
- monitoring MCP server · pingvera.com · hosted · mirrored from the MCP registry Client-website monitoring for agencies: uptime, incidents, SSL/domain expiry, server metrics.
- Agentic Diaries Audit MCP server · kandikandikandi.github.io · hosted · mirrored from the MCP registry Checks what a support agent knew but did not say against its policies. Free tier, no login.