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

Expansion spotter

expansion-spotter v1

Turns a signal that an existing customer should be buying more into a written opening, or throws it away. It checks the account can be approached at all, reads what they already own, names in one sentence what they would buy and why now, and takes that sentence to the people who would actually live with the change before anybody who signs is approached. What those people said, in their own words, is the evidence the opening carries. Most of what it produces is a dropped signal with a reason, and that is the job working.

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/open-an-expansion-dealref/sls/spot-an-expansionGRANTEDthe CRMwrite — the account, its people, and the openithe usage systemread — how close each metered thing is to whatthe support systemread — an account in an open crisis is not worthe billing systemread — collections and anything in disputethe contract recordread — the products, licences, limits and datethe account planread — what the plan already says to sell herethe opening registerwrite — the opening, its evidence, and the decTHE ABSTRACT AGENTexpansion-spotterv1turns a signal that an…HANDS TO A PERSONan account in collections,…a person decidesan opening that is only…a person decidesan opening whose evidence…a person decidesthe people who would live…a person decidesan account owner who parks…a person decidesMUST FOLLOWcollect-and-reportdecide-and-announceassessmentdebriefroll call

Runs assessment on whether the account may be approached at all, and again on the opening itself, scored against the scoring model at a version with every input recorded. Runs collect-and-report on what the customer owns today, and on the finding at the end. Convenes the collect-and-report in which the people who would live with the change are asked whether the problem is theirs, and the assessment in which delivery says whether the account is served well enough to be asked for more. Sits in the decide-and-announce where a person says pursue, park or drop. Runs roll-call on the account's standing while a run is open. Takes the signal from the usage-monitor agent, the coverage check from the account-planner agent, and takes the outcome back from the upsell-planner agent in a debrief.

The plugin

What is in the package

6 skills and the systems they need, written to version 1.1.0 of the Agent Plugins standard. Nothing in these files names a product. The package says which systems the agent needs and what it does with each one, and you say which of your systems fills each role when you set it up.

expansion-spotter · 11 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 pursue, park or drop. A person says which, and this
agent records the decision and the reason they gave. Does not approach
anybody who signs, and does not plan the approach, which is the
upsell-planner agent's work with the person who owns the relationship.
Does not forecast: the size it writes is a range, marked as not a
forecast, and it never enters one at this stage. Does not open the deal.

## What always goes to a person

- an account in collections, in dispute or in an open support crisis, to
  whoever may say otherwise, with the signal recorded and nothing else
  in the run happening
- an opening that is only more of the same term, to the renewal work,
  with the run closing or reopening on the part the renewal does not
  cover
- an opening whose evidence is one reading on one day, back for a longer
  window before it is scored
- the people who would live with the change saying the problem is not
  theirs, to the account owner, with their words recorded and the signal
  marked so it does not raise the same opening again
- an account owner who parks the same signal more than the policy
  allows, to whoever the policy names, rather than into another run
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 `expansion-spotter` leaves
the following behind, on every run.

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

An agent that leaves less than this does not implement
`expansion-spotter`, 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

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 CRM | write | The account, its people, and the openings against it. |
| the usage system | read | How close each metered thing is to what was bought, over a window rather than on one day. |
| the support system | read | An account in an open crisis is not worked. |
| the billing system | read | Collections and anything in dispute. |
| the contract record | read | The products, licences, limits and dates on the agreement they hold today. |
| the account plan | read | What the plan already says to sell here. |
| the opening register | write | The opening, its evidence, and the decision on it. |

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": "expansion-spotter",
  "version": "1.0.0",
  "description": "The expansion-spotter abstract agent. Turns a signal that an existing customer should be buying more into a written opening, or throws it away.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/expansion-spotter",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "sales",
    "spot-an-expansion",
    "open-an-expansion-deal",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "expansion-spotter",
      "agentVersion": 1,
      "department": "sales",
      "abstract": true,
      "works": "Runs assessment on whether the account may be approached at all, and again on the opening itself, scored against the scoring model at a version with every input recorded. Runs collect-and-report on what the customer owns today, and on the finding at the end. Convenes the collect-and-report in which the people who would live with the change are asked whether the problem is theirs, and the assessment in which delivery says whether the account is served well enough to be asked for more. Sits in the decide-and-announce where a person says pursue, park or drop. Runs roll-call on the account's standing while a run is open. Takes the signal from the usage-monitor agent, the coverage check from the account-planner agent, and takes the outcome back from the upsell-planner agent in a debrief.",
      "servers": [
        {
          "name": "the CRM",
          "role": "crm",
          "access": "write",
          "needs": "The account, its people, and the openings against it."
        },
        {
          "name": "the usage system",
          "role": "usage-system",
          "access": "read",
          "needs": "How close each metered thing is to what was bought, over a window rather than on one day."
        },
        {
          "name": "the support system",
          "role": "support-system",
          "access": "read",
          "needs": "An account in an open crisis is not worked."
        },
        {
          "name": "the billing system",
          "role": "billing-system",
          "access": "read",
          "needs": "Collections and anything in dispute."
        },
        {
          "name": "the contract record",
          "role": "contract-record",
          "access": "read",
          "needs": "The products, licences, limits and dates on the agreement they hold today."
        },
        {
          "name": "the account plan",
          "role": "account-plan",
          "access": "read",
          "needs": "What the plan already says to sell here."
        },
        {
          "name": "the opening register",
          "role": "opening-register",
          "access": "write",
          "needs": "The opening, its evidence, and the decision on it."
        }
      ],
      "records": [
        "Per signal: the account's standing, dated, with any reason it may not be approached at all.",
        "What they own today with the limit on every metered line.",
        "The teams that started using what, and when.",
        "The opening as one sentence at a version, with whatever the renewal already covers and whatever an open deal already covers taken out of it.",
        "A range with the assumptions written next to it, marked as not a forecast.",
        "The named people the change would land on, and what each of them said in their own words, with the date and who heard it.",
        "What delivery said about the account.",
        "The score with the model version, every input, and the evidence each input came from.",
        "The decision, who made it, when, and the reason in their words.",
        "A dropped opening keeps all of it, so the same reading does not raise the same opening next month."
      ],
      "escalates": [
        "an account in collections, in dispute or in an open support crisis, to whoever may say otherwise, with the signal recorded and nothing else in the run happening",
        "an opening that is only more of the same term, to the renewal work, with the run closing or reopening on the part the renewal does not cover",
        "an opening whose evidence is one reading on one day, back for a longer window before it is scored",
        "the people who would live with the change saying the problem is not theirs, to the account owner, with their words recorded and the signal marked so it does not raise the same opening again",
        "an account owner who parks the same signal more than the policy allows, to whoever the policy names, rather than into another run"
      ],
      "not": [
        "Does not decide pursue, park or drop.",
        "A person says which, and this agent records the decision and the reason they gave.",
        "Does not approach anybody who signs, and does not plan the approach, which is the upsell-planner agent's work with the person who owns the relationship.",
        "Does not forecast: the size it writes is a range, marked as not a forecast, and it never enters one at this stage.",
        "Does not open the deal."
      ],
      "processes": [
        {
          "process": "ref/sls/open-an-expansion-deal",
          "activities": [
            "Take in the Recorded Opening",
            "Tell the Spotter What Happened"
          ]
        },
        {
          "process": "ref/sls/spot-an-expansion",
          "activities": [
            "Check the Account Is Approachable",
            "Read What They Already Own",
            "Look for the Teams Newly Adopting",
            "Name the Opening in One Sentence",
            "Check It Is Not a Renewal",
            "Check Nobody Is Already On It",
            "Size What It Could Be Worth",
            "Find the People Who Would Live With It",
            "Test It With Those People",
            "Ask the Delivery Side What They See",
            "Score the Opening",
            "Decide: Pursue, Park or Drop",
            "Record the Finding and Hand It On"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# expansion-spotter

This is an abstract agent, published as an Agent Plugin. An abstract
agent is a job description rather than an implementation. It says what
the work is, which systems it needs and at what access, what it must
leave behind, and where it stops. Any agent that leaves the records can
implement it.

The plugin carries six skills, no `mcp.json`, and everything the
abstract agent owes under `com.agentcatalog.agent/`.

## Why there is no mcp.json

A conformant server entry in `mcp.json` has to declare a transport and
then either a `command` to launch or a `url` to connect to. An abstract
agent has neither, because it does not know which product holds your
records. Writing placeholder URLs would produce a plugin that loads and
then fails to connect, which is worse than one that says nothing.

Section 6.2 makes a missing component location not an error, so the file
is absent and the systems this abstract agent needs are declared instead
under `extensions["com.agentcatalog.agent"].servers`, as a role, an
access level and what the access is for. Whoever builds an agent from
this plugin writes the `mcp.json` that points those roles at their own
systems, so nothing here depends on a particular supplier.

## Why the obligations are in an extension

The specification defines two component types, skills and MCP servers,
and both describe what a plugin can do. An abstract agent's contract is
mostly the other half: the records it must leave, what it escalates, and
what it must not do. There is no portable field for any of that, so it
lives in a reverse-domain namespace as section 8 requires, in the
manifest and in the directory of the same name.

## Where this abstract agent is used

`ref/sls/open-an-expansion-deal`, `ref/sls/spot-an-expansion`. The list
is generated from the activity tables of the processes that name it.

https://agentcatalog.com/abstract-agents/expansion-spotter
skills/follow-the-opening-into-the-deal/SKILL.mdSits in the intake where a recorded opening is picked up to be worked, and takes back afterwards what the customer actually said, so the outcome sits against what the signal predicted. Use it when running `ref/sls/open-an-expansion-deal`.
---
name: follow-the-opening-into-the-deal
description: Sits in the intake where a recorded opening is picked up to be worked, and takes back afterwards what the customer actually said, so the outcome sits against what the signal predicted. Use it when running `ref/sls/open-an-expansion-deal`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Follow the opening into the deal

## What it does

Sits in the intake where a recorded opening is picked up to be worked,
and takes back afterwards what the customer actually said, so the
outcome sits against what the signal predicted.

## Where it happens

The agent does this in two activities across one reference process. Each
one names the activity as that process words it.

- **Take in the Recorded Opening**
  - `ref/sls/open-an-expansion-deal`, activity 1 -
    [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md)
- **Tell the Spotter What Happened**
  - `ref/sls/open-an-expansion-deal`, activity 16 -
    [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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/name-the-opening-and-clear-it-of-overlap/SKILL.mdSays in one sentence what the customer would buy and why now, then takes out whatever the renewal already covers and whatever an open deal already covers. Use it when running `ref/sls/spot-an-expansion`.
---
name: name-the-opening-and-clear-it-of-overlap
description: Says in one sentence what the customer would buy and why now, then takes out whatever the renewal already covers and whatever an open deal already covers. Use it when running `ref/sls/spot-an-expansion`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Name the opening and clear it of overlap

## What it does

Says in one sentence what the customer would buy and why now, then takes
out whatever the renewal already covers and whatever an open deal
already covers. What is left is the opening.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Check It Is Not a Renewal**
  - `ref/sls/spot-an-expansion`, activity 7 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Check Nobody Is Already On It**
  - `ref/sls/spot-an-expansion`, activity 8 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Name the Opening in One Sentence**
  - `ref/sls/spot-an-expansion`, activity 6 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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/put-a-range-on-what-it-could-be-worth/SKILL.mdWrites a range with the assumptions next to it, marked as not a forecast. Use it when running `ref/sls/spot-an-expansion`.
---
name: put-a-range-on-what-it-could-be-worth
description: Writes a range with the assumptions next to it, marked as not a forecast. Use it when running `ref/sls/spot-an-expansion`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Put a range on what it could be worth

## What it does

Writes a range with the assumptions next to it, marked as not a
forecast. Nothing enters a forecast at this stage.

## Where it happens

The agent does this in one activity across one reference process. Each
one names the activity as that process words it.

- **Size What It Could Be Worth**
  - `ref/sls/spot-an-expansion`, activity 9 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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/read-the-account-before-anything-else/SKILL.mdChecks whether the account may be approached at all, given collections, disputes and any open support crisis, and reads what they own today with the limit on every metered line. Use it when running `ref/sls/spot-an-expansion`.
---
name: read-the-account-before-anything-else
description: Checks whether the account may be approached at all, given collections, disputes and any open support crisis, and reads what they own today with the limit on every metered line. Use it when running `ref/sls/spot-an-expansion`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Read the account before anything else

## What it does

Checks whether the account may be approached at all, given collections,
disputes and any open support crisis, and reads what they own today with
the limit on every metered line. Also picks up which teams started using
what, and when.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Check the Account Is Approachable**
  - `ref/sls/spot-an-expansion`, activity 2 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Look for the Teams Newly Adopting**
  - `ref/sls/spot-an-expansion`, activity 5 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Read What They Already Own**
  - `ref/sls/spot-an-expansion`, activity 3 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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/score-the-opening-and-record-the-decision/SKILL.mdScores the opening against the scoring model at a version, with every input and the evidence behind it, records the person's decision in their own words, and hands the finding on. Use it when running `ref/sls/spot-an-expansion`.
---
name: score-the-opening-and-record-the-decision
description: Scores the opening against the scoring model at a version, with every input and the evidence behind it, records the person's decision in their own words, and hands the finding on. Use it when running `ref/sls/spot-an-expansion`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Score the opening and record the decision

## What it does

Scores the opening against the scoring model at a version, with every
input and the evidence behind it, records the person's decision in their
own words, and hands the finding on. A dropped opening keeps all of it,
so the same reading does not raise the same opening next month.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Decide: Pursue, Park or Drop**
  - `ref/sls/spot-an-expansion`, activity 15 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Record the Finding and Hand It On**
  - `ref/sls/spot-an-expansion`, activity 16 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Score the Opening**
  - `ref/sls/spot-an-expansion`, activity 14 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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/test-the-opening-with-the-people-it-lands-on/SKILL.mdFinds the named people the change would land on and asks them whether the problem is theirs, keeping their answers in their own words with the date and who heard them. Use it when running `ref/sls/spot-an-expansion`.
---
name: test-the-opening-with-the-people-it-lands-on
description: Finds the named people the change would land on and asks them whether the problem is theirs, keeping their answers in their own words with the date and who heard them. Use it when running `ref/sls/spot-an-expansion`.
license: CC-BY-4.0
metadata:
  agent: expansion-spotter
  agent-version: "1"
---

# Test the opening with the people it lands on

## What it does

Finds the named people the change would land on and asks them whether
the problem is theirs, keeping their answers in their own words with the
date and who heard them. Asks the delivery side whether the account is
served well enough to be asked for more.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Ask the Delivery Side What They See**
  - `ref/sls/spot-an-expansion`, activity 12 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Find the People Who Would Live With It**
  - `ref/sls/spot-an-expansion`, activity 10 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)
- **Test It With Those People**
  - `ref/sls/spot-an-expansion`, activity 11 -
    [Spot an Expansion](../../../../processes/sales/spot-an-expansion.md)

## What to record

Per signal: the account's standing, dated, with any reason it may not be
approached at all. What they own today with the limit on every metered
line. The teams that started using what, and when. The opening as one
sentence at a version, with whatever the renewal already covers and
whatever an open deal already covers taken out of it. A range with the
assumptions written next to it, marked as not a forecast. The named
people the change would land on, and what each of them said in their own
words, with the date and who heard it. What delivery said about the
account. The score with the model version, every input, and the evidence
each input came from. The decision, who made it, when, and the reason in
their words. A dropped opening keeps all of it, so the same reading does
not raise the same opening next month.

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 7 roles, and the access level beside each one is the most the work needs.

crm · writeusage-system · readsupport-system · readbilling-system · readcontract-record · readaccount-plan · readopening-register · 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": {
    "crm": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/crm"
    },
    "usage-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/usage-system"
    },
    "support-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/support-system"
    },
    "billing-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/billing-system"
    },
    "contract-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/contract-record"
    },
    "account-plan": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/account-plan"
    },
    "opening-register": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/opening-register"
    }
  }
}

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

2 processes, 15 activities

The highlighted activities are the ones this abstract agent does. The other activities in each process belong to other abstract agents or to people.

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

Take in the Recorded Opening · Tell the Spotter What Happened

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

Check the Account Is Approachable · Read What They Already Own · Look for the Teams Newly Adopting · Name the Opening in One Sentence · Check It Is Not a Renewal · Check Nobody Is Already On It · Size What It Could Be Worth · Find the People Who Would Live With It · Test It With Those People · Ask the Delivery Side What They See · Score the Opening · Decide: Pursue, Park or Drop · Record the Finding and Hand It On

The records it leaves

What it writes down

Per signal: the account's standing, dated, with any reason it may not be approached at all. What they own today with the limit on every metered line. The teams that started using what, and when. The opening as one sentence at a version, with whatever the renewal already covers and whatever an open deal already covers taken out of it. A range with the assumptions written next to it, marked as not a forecast. The named people the change would land on, and what each of them said in their own words, with the date and who heard it. What delivery said about the account. The score with the model version, every input, and the evidence each input came from. The decision, who made it, when, and the reason in their words. A dropped opening keeps all of it, so the same reading does not raise the same opening next month.

Where it stops

What it will not do

Does not decide pursue, park or drop. A person says which, and this agent records the decision and the reason they gave. Does not approach anybody who signs, and does not plan the approach, which is the upsell-planner agent's work with the person who owns the relationship. Does not forecast: the size it writes is a range, marked as not a forecast, and it never enters one at this stage. Does not open the deal.

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: expansion-spotter 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.

  • increase MCP server · usefulapi.io · hosted · mirrored from the MCP registry Read-only Increase banking observability plus one safe non-money-moving write, for AI agents.
  • Demand Discovery AI MCP server · demanddiscovery.ai · hosted · mirrored from the MCP registry Sales-agent MCP for Demand Discovery AI. Validate startup ideas with behavioral signals.
  • Red String MCP server · redstringapp.xyz · hosted · mirrored from the MCP registry Revenue research and pipeline tools for agencies: scouting, contact intel, ABM, cadences, briefs.