Qualifier
qualifier v1Asks the questions that separate a real evaluation from a browse, records the answers, and produces a decision to work it or not. Takes the answered inquiry with everything read on the way, writes the questions down before anybody asks them, and works with the seller through the problem, the money, the decision, the date and the alternatives. Sets what came back against the customer profile, names every question that came back empty, and carries the decision, its reason and its evidence onto the record. When the answer is a no that is not a never, it writes the lead back to nurture with a reason, a date to look again, and the events that would end the wait early.
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 for the work-it decision, which a person makes, and the debrief that closes the run. Runs assessment against the profile and collect-and-report for the decision record and the status of the open questions. Takes the answered package from the inbound-responder agent, takes the readings from the account-monitor and researcher agents, hands the scoring to the lead-scorer agent, and hands a returned lead to nurture through the lead-scorer agent and the account-monitor agent that sets the watch.
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 answer the inquiry, which is the inbound-responder agent, and does not compute the score, which is the lead-scorer agent. Does not run the discovery conversation that follows a yes. Does not make the work-it call itself and does not fill an unanswered question with an assumption. ## What always goes to a person - the work-it, nurture or decline decision itself, always - to the sales manager, with the answers, the gaps and the score attached - an opportunity being worked past the stage the process gates while the named number of questions are still empty - a reason for return that the record contradicts - back to the seller before it is written down - a buyer who stops replying midway - the run holds at the question it reached and the wait goes to the seller rather than being closed with guessed answers
# The records this abstract agent must leave
This is the contract. An agent implementing `qualifier` leaves the
following behind, on every run.
The questions as written before they were asked, naming the version of
the question set they came from. Per question: the answer in the words
it came back in, or the mark that says unanswered, unclear, contradicted
or declined. Nothing is filled in with an assumption. The fit check line
by line against the profile version. The gaps, listed. The decision, who
made it, the date, the reason, and the evidence under it. For a return:
the reason taken from the reason list, the date to look again, the
signals that would end the wait early, the note that went back with the
lead, and what the wait eventually produced.
An agent that leaves less than this does not implement `qualifier`,
whatever else it does well.
# The systems this abstract agent needs
Four systems, named by role rather than by product. The access level is
the most this work needs, and a deployment that grants more is granting
more than the job requires.
| Role | Access | What the access is for |
|---|---|---|
| the opportunity record | write | The answers, the gaps and the decision live there. |
| the CRM | write | |
| product usage data, the support system and contract records | read | The account is read again for what changed since the inquiry. |
| the nurture list | write | A returned lead goes back with its reason and its date. |
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": "qualifier",
"version": "1.0.0",
"description": "The qualifier abstract agent. Asks the questions that separate a real evaluation from a browse, records the answers, and produces a decision to work it or not.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/qualifier",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"sales",
"qualify-an-opportunity",
"return-a-lead-to-nurture",
"answer-an-inbound-inquiry",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "qualifier",
"agentVersion": 1,
"department": "sales",
"abstract": true,
"works": "Convenes decide-and-announce for the work-it decision, which a person makes, and the debrief that closes the run. Runs assessment against the profile and collect-and-report for the decision record and the status of the open questions. Takes the answered package from the inbound-responder agent, takes the readings from the account-monitor and researcher agents, hands the scoring to the lead-scorer agent, and hands a returned lead to nurture through the lead-scorer agent and the account-monitor agent that sets the watch.",
"servers": [
{
"name": "the opportunity record",
"role": "opportunity-record",
"access": "write",
"needs": "The answers, the gaps and the decision live there."
},
{
"name": "the CRM",
"role": "crm",
"access": "write"
},
{
"name": "product usage data, the support system and contract records",
"role": "product-usage-data-the-support-system-and-contract-records",
"access": "read",
"needs": "The account is read again for what changed since the inquiry."
},
{
"name": "the nurture list",
"role": "nurture-list",
"access": "write",
"needs": "A returned lead goes back with its reason and its date."
}
],
"records": [
"The questions as written before they were asked, naming the version of the question set they came from.",
"Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined.",
"Nothing is filled in with an assumption.",
"The fit check line by line against the profile version.",
"The gaps, listed.",
"The decision, who made it, the date, the reason, and the evidence under it.",
"For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced."
],
"escalates": [
"the work-it, nurture or decline decision itself, always - to the sales manager, with the answers, the gaps and the score attached",
"an opportunity being worked past the stage the process gates while the named number of questions are still empty",
"a reason for return that the record contradicts - back to the seller before it is written down",
"a buyer who stops replying midway - the run holds at the question it reached and the wait goes to the seller rather than being closed with guessed answers"
],
"not": [
"Does not answer the inquiry, which is the inbound-responder agent, and does not compute the score, which is the lead-scorer agent.",
"Does not run the discovery conversation that follows a yes.",
"Does not make the work-it call itself and does not fill an unanswered question with an assumption."
],
"processes": [
{
"process": "ref/sls/answer-an-inbound-inquiry",
"activities": [
"Hand It to Qualification"
]
},
{
"process": "ref/sls/qualify-an-opportunity",
"activities": [
"Take in the Answered Inquiry",
"Write the Questions to Ask",
"Ask About the Problem",
"Ask About the Decision",
"Check the Fit Against the Profile",
"Record the Gaps",
"Record the Decision and Its Reason",
"Record What Was Learned"
]
},
{
"process": "ref/sls/return-a-lead-to-nurture",
"activities": [
"Take in the Return Decision",
"Read the Reason Given",
"Check the Reason Against the Record",
"Name What Would Bring It Back Early",
"Write the Handback Note",
"Close the Opportunity Record",
"Record the Outcome"
]
}
]
}
}
}
# qualifier 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/answer-an-inbound-inquiry`, `ref/sls/qualify-an-opportunity`, `ref/sls/return-a-lead-to-nurture`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/qualifier
--- name: ask-the-qualifying-questions description: Writes the questions down before anybody asks them, then works with the seller through the problem, the money, the decision, the date and the alternatives. Use it when running `ref/sls/qualify-an-opportunity`. license: CC-BY-4.0 metadata: agent: qualifier agent-version: "1" --- # Ask the qualifying questions ## What it does Writes the questions down before anybody asks them, then works with the seller through the problem, the money, the decision, the date and the alternatives. Every answer is recorded in the words it came back in, or marked unanswered, unclear, contradicted or declined. ## 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 About the Decision** - `ref/sls/qualify-an-opportunity`, activity 7 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) - **Ask About the Problem** - `ref/sls/qualify-an-opportunity`, activity 5 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) - **Write the Questions to Ask** - `ref/sls/qualify-an-opportunity`, activity 4 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) ## What to record The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced. 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-decision-and-its-reason description: Carries the decision onto the record with who made it, the date, the reason and the evidence under it, and records what the run taught about the questions that were asked. Use it when running `ref/sls/qualify-an-opportunity`. license: CC-BY-4.0 metadata: agent: qualifier agent-version: "1" --- # Record the decision and its reason ## What it does Carries the decision onto the record with who made it, the date, the reason and the evidence under it, and records what the run taught about the questions that were asked. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Record What Was Learned** - `ref/sls/qualify-an-opportunity`, activity 16 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) - **Record the Decision and Its Reason** - `ref/sls/qualify-an-opportunity`, activity 15 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) ## What to record The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced. 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: return-a-lead-to-nurture description: Takes a decision not to work a lead now, reads the reason given, and checks it against what the record actually says. Use it when running `ref/sls/return-a-lead-to-nurture`. license: CC-BY-4.0 metadata: agent: qualifier agent-version: "1" --- # Return a lead to nurture ## What it does Takes a decision not to work a lead now, reads the reason given, and checks it against what the record actually says. Names the events that would end the wait early, writes the handback note, closes the opportunity record, and records what the wait eventually produced. ## Where it happens The agent does this in seven activities across one reference process. Each one names the activity as that process words it. - **Check the Reason Against the Record** - `ref/sls/return-a-lead-to-nurture`, activity 3 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Close the Opportunity Record** - `ref/sls/return-a-lead-to-nurture`, activity 10 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Name What Would Bring It Back Early** - `ref/sls/return-a-lead-to-nurture`, activity 5 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Read the Reason Given** - `ref/sls/return-a-lead-to-nurture`, activity 2 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Record the Outcome** - `ref/sls/return-a-lead-to-nurture`, activity 13 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Take in the Return Decision** - `ref/sls/return-a-lead-to-nurture`, activity 1 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) - **Write the Handback Note** - `ref/sls/return-a-lead-to-nurture`, activity 6 - [Return a Lead to Nurture](../../../../processes/sales/return-a-lead-to-nurture.md) ## What to record The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced. 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-answers-against-the-profile description: Sets what came back against the customer profile, line by line and against a named version of it. Use it when running `ref/sls/qualify-an-opportunity`. license: CC-BY-4.0 metadata: agent: qualifier agent-version: "1" --- # Set the answers against the profile ## What it does Sets what came back against the customer profile, line by line and against a named version of it. Lists every question that came back empty instead of filling it in with an assumption. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Check the Fit Against the Profile** - `ref/sls/qualify-an-opportunity`, activity 10 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) - **Record the Gaps** - `ref/sls/qualify-an-opportunity`, activity 12 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) ## What to record The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced. 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-an-answered-inquiry description: Takes the answered inquiry in with everything read on the way to it, so the questions that follow are asked against what is already known rather than from a blank page. Use it when running `ref/sls/answer-an-inbound-inquiry` and `ref/sls/qualify-an-opportunity`. license: CC-BY-4.0 metadata: agent: qualifier agent-version: "1" --- # Take in an answered inquiry ## What it does Takes the answered inquiry in with everything read on the way to it, so the questions that follow are asked against what is already known rather than from a blank page. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Hand It to Qualification** - `ref/sls/answer-an-inbound-inquiry`, activity 13 - [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md) - **Take in the Answered Inquiry** - `ref/sls/qualify-an-opportunity`, activity 1 - [Qualify an Opportunity](../../../../processes/sales/qualify-an-opportunity.md) ## What to record The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced. That contract covers every activity this abstract agent takes on, and it is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract agent does not do is in `com.agentcatalog.agent/NOT.md`.
Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.
Point it at your systems
To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 4 roles, and the access level beside each one is the most the work needs.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
"mcpServers": {
"opportunity-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/opportunity-record"
},
"crm": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/crm"
},
"product-usage-data-the-support-system-and-contract-records": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/product-usage-data-the-support-system-and-contract-records"
},
"nurture-list": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/nurture-list"
}
}
}
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.
3 processes, 16 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.
Hand It to Qualification
Take in the Answered Inquiry · Write the Questions to Ask · Ask About the Problem · Ask About the Decision · Check the Fit Against the Profile · Record the Gaps · Record the Decision and Its Reason · Record What Was Learned
Take in the Return Decision · Read the Reason Given · Check the Reason Against the Record · Name What Would Bring It Back Early · Write the Handback Note · Close the Opportunity Record · Record the Outcome
What it writes down
The questions as written before they were asked, naming the version of the question set they came from. Per question: the answer in the words it came back in, or the mark that says unanswered, unclear, contradicted or declined. Nothing is filled in with an assumption. The fit check line by line against the profile version. The gaps, listed. The decision, who made it, the date, the reason, and the evidence under it. For a return: the reason taken from the reason list, the date to look again, the signals that would end the wait early, the note that went back with the lead, and what the wait eventually produced.
What it will not do
Does not answer the inquiry, which is the inbound-responder agent, and does not compute the score, which is the lead-scorer agent. Does not run the discovery conversation that follows a yes. Does not make the work-it call itself and does not fill an unanswered question with an assumption.
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: qualifier v1
One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
The closest things in the catalog, by description
Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.
Things that could be the worker: an agent, a packaged product, a plugin.
- The Website Specification — A2A agent Agent · specification.website Read-only A2A agent that answers natural-language questions about The Website Specification and returns matching topics with status, canonical URL,…
Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.
- sales MCP server · autostackup.github.io · run it yourself · mirrored from the MCP registry BANT + MEDDIC qualification, ICP scoring, pipeline forecasting & outreach for Claude.
- leadpipe-mcp MCP server · enzoemir1.github.io · run it yourself · mirrored from the MCP registry AI lead qualification: ICP filter, 0-100 scoring, Hunter.io enrichment, HubSpot/Pipedrive export.
- SalesCloser-AI MCP server · evozim.github.io · hosted · mirrored from the MCP registry Conversational sales call auditor grading pitch conversion rates.