Sign in
abstract agent · sales · 5 processes · plugin 1.0.0

Usage monitor

usage-monitor v1

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

The abstract agent

What it is granted, and what it hands to a person

This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.

WORKS INref/sls/close-a-renewalref/sls/open-an-expansion-dealref/sls/open-a-renewalGRANTEDthe usage recordread — what was actually used, period by periothe billing systemread — what was invoiced against what was metethe agreement store and the entitlement recordread — a use number means nothing without the the CRMwrite — the reading against the account, datedTHE ABSTRACT AGENTusage-monitorv1reads what a customer…HANDS TO A PERSONuse past a limit that was…to the account owner, with…use falling away on a line…to the risk watcher and the…a usage record that does…to whoever owns the billing…a reading it cannot take,…said plainly, instead of…MUST FOLLOWcollect-and-reportassessment

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.

The plugin

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.

usage-monitor · 10 files · 1.0.0
com.agentcatalog.agent/NOT.mdWhat the agent does not do, and when it asks a person.
# Where this abstract agent stops

Does not decide what 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
com.agentcatalog.agent/RECORDS.mdThe records the agent must leave behind.
# The records this abstract agent must leave

This is the contract. An agent implementing `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.
com.agentcatalog.agent/SERVERS.mdThe systems the agent needs, by role rather than by product.
# 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.
plugin.jsonThe manifest. It lists the skills and the systems the agent needs.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
  "name": "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"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# 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
skills/read-use-against-what-was-bought/SKILL.md"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`."
---
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`.
skills/say-which-way-each-line-is-moving/SKILL.mdShows 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`.
---
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`.
skills/sit-in-the-scoring-of-a-departure-risk/SKILL.mdBrings 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`.
---
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`.
skills/take-in-a-signal-to-read/SKILL.mdTakes 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`.
---
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`.
skills/take-the-reading-again-while-a-run-is-open/SKILL.mdKeeps 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`.
---
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`.
mcp.jsonNot in the package.

Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.

Setting it up

Point it at your systems

To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 4 roles, and the access level beside each one is the most the work needs.

usage-record · readbilling-system · readagreement-store-and-the-entitlement-record · readcrm · write
mcp.json You write this file. It is not part of the package.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
  "mcpServers": {
    "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.

Where it works

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.

Close a Renewalref/sls/close-a-renewal · 15 activities
123456789101112131415

Check What They Say Against Use

Open an Expansion Dealref/sls/open-an-expansion-deal · 16 activities
12345678910111213141516

Confirm the Opening Still Holds

Open a Renewalref/sls/open-a-renewal · 13 activities
12345678910111213

Measure What Was Used · Score the Risk of Leaving

Spot an Expansionref/sls/spot-an-expansion · 16 activities
12345678910111213141516

Take in the Signal · Read the Usage Against the Limit · Look for the Teams Newly Adopting

Work a Churn Riskref/sls/work-a-churn-risk · 15 activities
123456789101112131415

Read the Usage Trend · Watch for the Signal to Turn

The records it leaves

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.

Where it stops

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.

Agents built from this plugin

Who has built one, and how far each one got

Nobody has built one yet. The catalog says so rather than leaving the section off, because an empty list is a fact about the document.

declare it implements: usage-monitor v1 One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
A guess, not a claim

The closest things in the catalog, by description

Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.

Might do the job

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,…
Might be reached for

Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.

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