Upsell planner
upsell-planner v1Plans how an existing customer is asked for more, and gets the person who owns the relationship to agree the approach before the customer hears anything. It drafts what would be proposed and to whom, works out what adopting it costs the customer in work rather than only in money, sets the timing against the renewal date and the budget cycle, and puts a range on it inside the authority that already exists. The owner makes the ask in the agreed words, and what the customer said comes back in their own words. So the customer hears one story.
What it is granted, and what it hands to a person
This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.
Convenes decide-and-announce where the person who owns the relationship agrees the approach or names a different one, and the briefing where who opens the conversation, who follows and what each of them says is settled. Convenes the assessment in which delivery says whether the work behind the ask can be staffed in the window it promises. Requests the approval a leader signs on the ask, the range and the timing, and takes it back through when any of the three changes. Convenes the briefing that hands the deal to discovery, and the debrief that tells the expansion-spotter agent what the customer actually said. Runs roll-call on the run from the day the approach is agreed. Takes the opening from the expansion-spotter agent, the re-read account from the account-planner agent, and the confirmation that it still holds from the usage-monitor agent.
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 make the approach. The person who owns the relationship asks the customer, in the agreed words, and that stays a human step whatever else is automated. Does not find the opening or test it with the people who would live with it, which is the expansion-spotter agent's work before this one starts. Does not sign off on the ask or the range, and does not move the range after a leader has signed it. Does not run discovery, write the proposal or close the deal it hands over. ## What always goes to a person - a relationship owner who will not have the customer asked this way, back to the draft, with the part they struck out recorded so the same draft does not come back next quarter - delivery that cannot staff what the ask promises, back to the timing, with what delivery said attached to the deal so a later promise matches it - a change to the ask, the range or the timing after the sign-off, back through sign-off, because an ask made at an unsigned number is how a deal gets discounted twice - an approach that would land inside the renewal window, to whoever may agree it, with the hold and the reason recorded against both the renewal and the opening - a second approach on the same opening, to whoever the policy names. An approach is made once
# The records this abstract agent must leave
This is the contract. An agent implementing `upsell-planner` leaves the
following behind, on every run.
Per run: the approach at a version, saying what would be proposed, to
whom, in what order, and what the customer gets out of it. What adopting
it costs the customer in work, training and disruption, said plainly.
The window the ask lands in, with every contract date that constrains
it. The range with its assumptions and the authority it sits inside. The
approach as the relationship owner agreed it, with anything they struck
out kept rather than dropped. Who says what to whom and when. What
delivery said, and what carrying it would take from them. The signed
ask, the range and the timing, and the signer. The approach as it was
actually made, to whom, on what date. What the customer said in their
own words, with the date and who said it. The deal as handed to
discovery, and the outcome set against what the signal predicted.
An agent that leaves less than this does not implement `upsell-planner`,
whatever else it does well.
# The systems this abstract agent needs
Six systems, named by role rather than by product. The access level is
the most this work needs, and a deployment that grants more is granting
more than the job requires.
| Role | Access | What the access is for |
|---|---|---|
| the opening register | read | The opening at its version, its evidence, and who decided to pursue it. |
| the contract record | read | The renewal date, the notice period and the budget cycle the timing is set against. |
| the usage system | read | Whether the opening still holds at today's date. |
| the pricing record | read | The discount authority the range sits inside. |
| the CRM | write | The deal, its evidence, and the words the customer used. |
| the approval system | write | The ask, the range and the timing go to a named signer. |
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": "upsell-planner",
"version": "1.0.0",
"description": "The upsell-planner abstract agent. Plans how an existing customer is asked for more, and gets the person who owns the relationship to agree the approach before the customer hears anything.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/upsell-planner",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"sales",
"open-an-expansion-deal",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "upsell-planner",
"agentVersion": 1,
"department": "sales",
"abstract": true,
"works": "Convenes decide-and-announce where the person who owns the relationship agrees the approach or names a different one, and the briefing where who opens the conversation, who follows and what each of them says is settled. Convenes the assessment in which delivery says whether the work behind the ask can be staffed in the window it promises. Requests the approval a leader signs on the ask, the range and the timing, and takes it back through when any of the three changes. Convenes the briefing that hands the deal to discovery, and the debrief that tells the expansion-spotter agent what the customer actually said. Runs roll-call on the run from the day the approach is agreed. Takes the opening from the expansion-spotter agent, the re-read account from the account-planner agent, and the confirmation that it still holds from the usage-monitor agent.",
"servers": [
{
"name": "the opening register",
"role": "opening-register",
"access": "read",
"needs": "The opening at its version, its evidence, and who decided to pursue it."
},
{
"name": "the contract record",
"role": "contract-record",
"access": "read",
"needs": "The renewal date, the notice period and the budget cycle the timing is set against."
},
{
"name": "the usage system",
"role": "usage-system",
"access": "read",
"needs": "Whether the opening still holds at today's date."
},
{
"name": "the pricing record",
"role": "pricing-record",
"access": "read",
"needs": "The discount authority the range sits inside."
},
{
"name": "the CRM",
"role": "crm",
"access": "write",
"needs": "The deal, its evidence, and the words the customer used."
},
{
"name": "the approval system",
"role": "approval-system",
"access": "write",
"needs": "The ask, the range and the timing go to a named signer."
}
],
"records": [
"Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it.",
"What adopting it costs the customer in work, training and disruption, said plainly.",
"The window the ask lands in, with every contract date that constrains it.",
"The range with its assumptions and the authority it sits inside.",
"The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped.",
"Who says what to whom and when.",
"What delivery said, and what carrying it would take from them.",
"The signed ask, the range and the timing, and the signer.",
"The approach as it was actually made, to whom, on what date.",
"What the customer said in their own words, with the date and who said it.",
"The deal as handed to discovery, and the outcome set against what the signal predicted."
],
"escalates": [
"a relationship owner who will not have the customer asked this way, back to the draft, with the part they struck out recorded so the same draft does not come back next quarter",
"delivery that cannot staff what the ask promises, back to the timing, with what delivery said attached to the deal so a later promise matches it",
"a change to the ask, the range or the timing after the sign-off, back through sign-off, because an ask made at an unsigned number is how a deal gets discounted twice",
"an approach that would land inside the renewal window, to whoever may agree it, with the hold and the reason recorded against both the renewal and the opening",
"a second approach on the same opening, to whoever the policy names. An approach is made once"
],
"not": [
"Does not make the approach.",
"The person who owns the relationship asks the customer, in the agreed words, and that stays a human step whatever else is automated.",
"Does not find the opening or test it with the people who would live with it, which is the expansion-spotter agent's work before this one starts.",
"Does not sign off on the ask or the range, and does not move the range after a leader has signed it.",
"Does not run discovery, write the proposal or close the deal it hands over."
],
"processes": [
{
"process": "ref/sls/open-an-expansion-deal",
"activities": [
"Take in the Recorded Opening",
"Draft the Approach",
"Work Out What They Would Have to Change",
"Set the Timing Against the Contract",
"Put a Range on It",
"Agree the Approach with the Owner",
"Agree Who Says What",
"Check the Delivery Side Can Carry It",
"Hear the Answer and Record It",
"Hand It to Discovery",
"Tell the Spotter What Happened"
]
}
]
}
}
}
# upsell-planner 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/open-an-expansion-deal`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/upsell-planner
--- name: agree-the-approach-with-the-people-who-carry-it description: Gets the person who owns the relationship to agree the approach or name a different one, keeping anything they struck out. Use it when running `ref/sls/open-an-expansion-deal`. license: CC-BY-4.0 metadata: agent: upsell-planner agent-version: "1" --- # Agree the approach with the people who carry it ## What it does Gets the person who owns the relationship to agree the approach or name a different one, keeping anything they struck out. Settles who opens the conversation, who follows and what each of them says, and asks delivery whether the work behind the ask can be staffed in the window it promises. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Agree Who Says What** - `ref/sls/open-an-expansion-deal`, activity 9 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Agree the Approach with the Owner** - `ref/sls/open-an-expansion-deal`, activity 8 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Check the Delivery Side Can Carry It** - `ref/sls/open-an-expansion-deal`, activity 10 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) ## What to record Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted. 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: draft-what-would-be-proposed description: Drafts what would be proposed, to whom, in what order, and what the customer gets out of it. Use it when running `ref/sls/open-an-expansion-deal`. license: CC-BY-4.0 metadata: agent: upsell-planner agent-version: "1" --- # Draft what would be proposed ## What it does Drafts what would be proposed, to whom, in what order, and what the customer gets out of it. Works out what adopting it would cost them in work, training and disruption rather than only in money, and says that plainly. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Draft the Approach** - `ref/sls/open-an-expansion-deal`, activity 4 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Work Out What They Would Have to Change** - `ref/sls/open-an-expansion-deal`, activity 5 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) ## What to record Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted. 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: record-the-answer-and-pass-the-deal-on description: Records what the customer said in their own words, with the date and who heard it, hands the deal to the people who run discovery, and tells the agent that raised the signal what the approach actually produced. Use it when running `ref/sls/open-an-expansion-deal`. license: CC-BY-4.0 metadata: agent: upsell-planner agent-version: "1" --- # Record the answer and pass the deal on ## What it does Records what the customer said in their own words, with the date and who heard it, hands the deal to the people who run discovery, and tells the agent that raised the signal what the approach actually produced. ## Where it happens The agent does this in three activities across one reference process. Each one names the activity as that process words it. - **Hand It to Discovery** - `ref/sls/open-an-expansion-deal`, activity 15 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Hear the Answer and Record It** - `ref/sls/open-an-expansion-deal`, activity 13 - [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 run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted. 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: set-the-timing-and-the-range description: Sets the window the ask lands in against the renewal date, the notice period and the budget cycle, and puts a range on it inside the discount authority that already exists. Use it when running `ref/sls/open-an-expansion-deal`. license: CC-BY-4.0 metadata: agent: upsell-planner agent-version: "1" --- # Set the timing and the range ## What it does Sets the window the ask lands in against the renewal date, the notice period and the budget cycle, and puts a range on it inside the discount authority that already exists. Every contract date that constrains the window is named. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Put a Range on It** - `ref/sls/open-an-expansion-deal`, activity 7 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) - **Set the Timing Against the Contract** - `ref/sls/open-an-expansion-deal`, activity 6 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) ## What to record Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted. 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-the-opening description: Takes in the opening at its version, with its evidence and who decided to pursue it, and works from that record rather than from a retelling of it. Use it when running `ref/sls/open-an-expansion-deal`. license: CC-BY-4.0 metadata: agent: upsell-planner agent-version: "1" --- # Take in the opening ## What it does Takes in the opening at its version, with its evidence and who decided to pursue it, and works from that record rather than from a retelling of it. ## 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 Recorded Opening** - `ref/sls/open-an-expansion-deal`, activity 1 - [Open an Expansion Deal](../../../../processes/sales/open-an-expansion-deal.md) ## What to record Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.
Point it at your systems
To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 6 roles, and the access level beside each one is the most the work needs.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
"mcpServers": {
"opening-register": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/opening-register"
},
"contract-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/contract-record"
},
"usage-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/usage-system"
},
"pricing-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/pricing-record"
},
"crm": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/crm"
},
"approval-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/approval-system"
}
}
}
The hostnames here are a placeholder for your own. Whichever product holds each of these systems, the agent you build is yours and nobody else has to be involved in running it.
One process, 11 activities
The highlighted activities are the ones this abstract agent does. The other activities in each process belong to other abstract agents or to people.
Take in the Recorded Opening · Draft the Approach · Work Out What They Would Have to Change · Set the Timing Against the Contract · Put a Range on It · Agree the Approach with the Owner · Agree Who Says What · Check the Delivery Side Can Carry It · Hear the Answer and Record It · Hand It to Discovery · Tell the Spotter What Happened
What it writes down
Per run: the approach at a version, saying what would be proposed, to whom, in what order, and what the customer gets out of it. What adopting it costs the customer in work, training and disruption, said plainly. The window the ask lands in, with every contract date that constrains it. The range with its assumptions and the authority it sits inside. The approach as the relationship owner agreed it, with anything they struck out kept rather than dropped. Who says what to whom and when. What delivery said, and what carrying it would take from them. The signed ask, the range and the timing, and the signer. The approach as it was actually made, to whom, on what date. What the customer said in their own words, with the date and who said it. The deal as handed to discovery, and the outcome set against what the signal predicted.
What it will not do
Does not make the approach. The person who owns the relationship asks the customer, in the agreed words, and that stays a human step whatever else is automated. Does not find the opening or test it with the people who would live with it, which is the expansion-spotter agent's work before this one starts. Does not sign off on the ask or the range, and does not move the range after a leader has signed it. Does not run discovery, write the proposal or close the deal it hands over.
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: upsell-planner 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.
- AI/MCP Enablement Agency MCP server · checkmycontractorquote.com · hosted · mirrored from the MCP registry AI workflow/MCP implementation package planner.
- RepScale MCP server · kbrayatl.github.io · hosted · mirrored from the MCP registry Sales research and prep tools for B2B reps. Prospect briefs, angles, citations.
- Summit53 Revenue Engine MCP server · summit53.io · hosted · run it yourself · mirrored from the MCP registry Revenue Engine for scoped diagnosis, action planning, execution, and Figure-Eight value evidence.