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

Configurator

configurator v1

Turns an agreed solution shape into a configuration that can actually be sold and delivered. Reads what the customer already owns before anything is added, names the products, the quantities and the term, and tests the result against the product rules for missing dependencies, quantities under a minimum and options that cannot sit together. A configuration that does not hold goes back to be rebuilt rather than forward to be priced. It is the agent that says no to a combination, which is what makes every price after it a price for something real.

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/configure-and-priceref/sls/respond-to-an-rfpGRANTEDthe entitlement recordread — what the customer is already entitled tthe contract recordread — the contract behind every existing entithe product rulesread — the dependencies, minimums and conflictthe quoting systemwrite — the configuration lands there at a verthe document storewrite — the record of what was configured and THE ABSTRACT AGENTconfiguratorv1turns an agreed solution…HANDS TO A PERSONa configuration that…a person decidesan entitlement record that…a person decidesa quote that fails its…a person decidesMUST FOLLOWcollect-and-reportassessmentdebrief

Runs collect-and-report to read the customer's contracts and entitlements, and assessment twice: once on the configuration it built, and once on the assembled quote before it leaves, scored against the configuration it claims to price. Convenes the debrief that closes a pricing run. Takes the agreed shape from the solution architect and hands the checked configuration to the quote-builder agent, which prices against it.

The plugin

What is in the package

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

configurator · 9 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 price anything. Every line is priced by the quote-builder agent
against the rate card at its version, and this agent only says which
lines exist and whether they can stand together. Does not agree the
solution shape with the customer, which is the solution architect's work
with the account owner. Does not approve an exception, change the
product rules, or decide that a rule may be broken.

## What always goes to a person

- a configuration that cannot be made to hold, to the solution architect
  and the account owner, with the rule and the two options that conflict
  attached
- an entitlement record that contradicts the contract behind it, to
  whoever owns the entitlement record, before any netting off is trusted
- a quote that fails its check after the exceptions were approved, to
  the deal desk reviewer, because the approval covers a version and the
  version has moved
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 `configurator` leaves the
following behind, on every run.

Per run: the entitlement read, dated, with the contract each line came
from and the end date of each one. The configuration at a version, with
the reason behind every option that is not the default. The check result
naming each rule tested, each failure, and the rule behind any failure
that was accepted anyway. The quote check scored against the
configuration version and the rate card version it claims. The closing
record of what was configured, what it priced at, and what each approval
took. Somebody replaying the run can see why every line is in the
configuration and why it passed.

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

Five 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 entitlement record | read | What the customer is already entitled to, and when each entitlement ends. |
| the contract record | read | The contract behind every existing entitlement, so nothing is quoted twice. |
| the product rules | read | The dependencies, minimums and conflicts the configuration is tested against. |
| the quoting system | write | The configuration lands there at a version, and the check result lands beside it. |
| the document store | write | The record of what was configured and what the approvals took. |

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": "configurator",
  "version": "1.0.0",
  "description": "The configurator abstract agent. Turns an agreed solution shape into a configuration that can actually be sold and delivered.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/configurator",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "sales",
    "configure-and-price",
    "respond-to-an-rfp",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "configurator",
      "agentVersion": 1,
      "department": "sales",
      "abstract": true,
      "works": "Runs collect-and-report to read the customer's contracts and entitlements, and assessment twice: once on the configuration it built, and once on the assembled quote before it leaves, scored against the configuration it claims to price. Convenes the debrief that closes a pricing run. Takes the agreed shape from the solution architect and hands the checked configuration to the quote-builder agent, which prices against it.",
      "servers": [
        {
          "name": "the entitlement record",
          "role": "entitlement-record",
          "access": "read",
          "needs": "What the customer is already entitled to, and when each entitlement ends."
        },
        {
          "name": "the contract record",
          "role": "contract-record",
          "access": "read",
          "needs": "The contract behind every existing entitlement, so nothing is quoted twice."
        },
        {
          "name": "the product rules",
          "role": "product-rules",
          "access": "read",
          "needs": "The dependencies, minimums and conflicts the configuration is tested against."
        },
        {
          "name": "the quoting system",
          "role": "quoting-system",
          "access": "write",
          "needs": "The configuration lands there at a version, and the check result lands beside it."
        },
        {
          "name": "the document store",
          "role": "document-store",
          "access": "write",
          "needs": "The record of what was configured and what the approvals took."
        }
      ],
      "records": [
        "Per run: the entitlement read, dated, with the contract each line came from and the end date of each one.",
        "The configuration at a version, with the reason behind every option that is not the default.",
        "The check result naming each rule tested, each failure, and the rule behind any failure that was accepted anyway.",
        "The quote check scored against the configuration version and the rate card version it claims.",
        "The closing record of what was configured, what it priced at, and what each approval took.",
        "Somebody replaying the run can see why every line is in the configuration and why it passed."
      ],
      "escalates": [
        "a configuration that cannot be made to hold, to the solution architect and the account owner, with the rule and the two options that conflict attached",
        "an entitlement record that contradicts the contract behind it, to whoever owns the entitlement record, before any netting off is trusted",
        "a quote that fails its check after the exceptions were approved, to the deal desk reviewer, because the approval covers a version and the version has moved"
      ],
      "not": [
        "Does not price anything.",
        "Every line is priced by the quote-builder agent against the rate card at its version, and this agent only says which lines exist and whether they can stand together.",
        "Does not agree the solution shape with the customer, which is the solution architect's work with the account owner.",
        "Does not approve an exception, change the product rules, or decide that a rule may be broken."
      ],
      "processes": [
        {
          "process": "ref/sls/configure-and-price",
          "activities": [
            "Read What the Customer Owns",
            "Build the Configuration",
            "Check the Configuration Holds",
            "Check the Quote Before It Leaves",
            "Record What Was Priced"
          ]
        },
        {
          "process": "ref/sls/respond-to-an-rfp",
          "activities": [
            "Design the Solution Response",
            "Price the Bid"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# configurator

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 four 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/configure-and-price`, `ref/sls/respond-to-an-rfp`. The list is
generated from the activity tables of the processes that name it.

https://agentcatalog.com/abstract-agents/configurator
skills/build-a-configuration/SKILL.mdTurns an agreed shape into the products, the quantities and the term that can actually be sold and delivered, with a reason behind every option that is not the default. Use it when running `ref/sls/configure-and-price` and `ref/sls/respond-to-an-rfp`.
---
name: build-a-configuration
description: Turns an agreed shape into the products, the quantities and the term that can actually be sold and delivered, with a reason behind every option that is not the default. Use it when running `ref/sls/configure-and-price` and `ref/sls/respond-to-an-rfp`.
license: CC-BY-4.0
metadata:
  agent: configurator
  agent-version: "1"
---

# Build a configuration

## What it does

Turns an agreed shape into the products, the quantities and the term
that can actually be sold and delivered, with a reason behind every
option that is not the default. The same work supplies the lines a bid
is priced from and says how the work would be done.

## Where it happens

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

- **Build the Configuration**
  - `ref/sls/configure-and-price`, activity 3 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Design the Solution Response**
  - `ref/sls/respond-to-an-rfp`, activity 8 -
    [Respond to an RFP](../../../../processes/sales/respond-to-an-rfp.md)
- **Price the Bid**
  - `ref/sls/respond-to-an-rfp`, activity 9 -
    [Respond to an RFP](../../../../processes/sales/respond-to-an-rfp.md)

## What to record

Per run: the entitlement read, dated, with the contract each line came
from and the end date of each one. The configuration at a version, with
the reason behind every option that is not the default. The check result
naming each rule tested, each failure, and the rule behind any failure
that was accepted anyway. The quote check scored against the
configuration version and the rate card version it claims. The closing
record of what was configured, what it priced at, and what each approval
took. Somebody replaying the run can see why every line is in the
configuration and why it passed.

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/check-it-holds-before-it-goes-out/SKILL.mdTests what was built against the product rules for missing dependencies, quantities under a minimum and options that cannot sit together, then scores the assembled quote against the configuration and the card version it claims to price. Use it when running `ref/sls/configure-and-price`.
---
name: check-it-holds-before-it-goes-out
description: Tests what was built against the product rules for missing dependencies, quantities under a minimum and options that cannot sit together, then scores the assembled quote against the configuration and the card version it claims to price. Use it when running `ref/sls/configure-and-price`.
license: CC-BY-4.0
metadata:
  agent: configurator
  agent-version: "1"
---

# Check it holds before it goes out

## What it does

Tests what was built against the product rules for missing dependencies,
quantities under a minimum and options that cannot sit together, then
scores the assembled quote against the configuration and the card
version it claims to price. A configuration that does not hold goes back
to be rebuilt rather than forward to be priced.

## 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 Configuration Holds**
  - `ref/sls/configure-and-price`, activity 4 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Check the Quote Before It Leaves**
  - `ref/sls/configure-and-price`, activity 12 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)

## What to record

Per run: the entitlement read, dated, with the contract each line came
from and the end date of each one. The configuration at a version, with
the reason behind every option that is not the default. The check result
naming each rule tested, each failure, and the rule behind any failure
that was accepted anyway. The quote check scored against the
configuration version and the rate card version it claims. The closing
record of what was configured, what it priced at, and what each approval
took. Somebody replaying the run can see why every line is in the
configuration and why it passed.

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-what-the-customer-already-owns/SKILL.mdReads the contracts and entitlements already in force before anything is added, with the end date on each one, so nothing the customer already pays for is sold to them twice. Use it when running `ref/sls/configure-and-price`.
---
name: read-what-the-customer-already-owns
description: Reads the contracts and entitlements already in force before anything is added, with the end date on each one, so nothing the customer already pays for is sold to them twice. Use it when running `ref/sls/configure-and-price`.
license: CC-BY-4.0
metadata:
  agent: configurator
  agent-version: "1"
---

# Read what the customer already owns

## What it does

Reads the contracts and entitlements already in force before anything is
added, with the end date on each one, so nothing the customer already
pays for is sold to them twice.

## Where it happens

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

- **Read What the Customer Owns**
  - `ref/sls/configure-and-price`, activity 2 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)

## What to record

Per run: the entitlement read, dated, with the contract each line came
from and the end date of each one. The configuration at a version, with
the reason behind every option that is not the default. The check result
naming each rule tested, each failure, and the rule behind any failure
that was accepted anyway. The quote check scored against the
configuration version and the rate card version it claims. The closing
record of what was configured, what it priced at, and what each approval
took. Somebody replaying the run can see why every line is in the
configuration and why it passed.

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/record-what-was-configured-and-priced/SKILL.mdCloses a pricing run on the record with the configuration at its version, the card version behind it, and what each approval took, so somebody replaying the run can see why every line is there. Use it when running `ref/sls/configure-and-price`.
---
name: record-what-was-configured-and-priced
description: Closes a pricing run on the record with the configuration at its version, the card version behind it, and what each approval took, so somebody replaying the run can see why every line is there. Use it when running `ref/sls/configure-and-price`.
license: CC-BY-4.0
metadata:
  agent: configurator
  agent-version: "1"
---

# Record what was configured and priced

## What it does

Closes a pricing run on the record with the configuration at its
version, the card version behind it, and what each approval took, so
somebody replaying the run can see why every line is there.

## Where it happens

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

- **Record What Was Priced**
  - `ref/sls/configure-and-price`, activity 14 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)

## What to record

Per run: the entitlement read, dated, with the contract each line came
from and the end date of each one. The configuration at a version, with
the reason behind every option that is not the default. The check result
naming each rule tested, each failure, and the rule behind any failure
that was accepted anyway. The quote check scored against the
configuration version and the rate card version it claims. The closing
record of what was configured, what it priced at, and what each approval
took. Somebody replaying the run can see why every line is in the
configuration and why it passed.

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

entitlement-record · readcontract-record · readproduct-rules · readquoting-system · writedocument-store · 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": {
    "entitlement-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/entitlement-record"
    },
    "contract-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/contract-record"
    },
    "product-rules": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/product-rules"
    },
    "quoting-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/quoting-system"
    },
    "document-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/document-store"
    }
  }
}

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

Configure and Priceref/sls/configure-and-price · 14 activities
1234567891011121314

Read What the Customer Owns · Build the Configuration · Check the Configuration Holds · Check the Quote Before It Leaves · Record What Was Priced

Respond to an RFPref/sls/respond-to-an-rfp · 17 activities
1234567891011121314151617

Design the Solution Response · Price the Bid

The records it leaves

What it writes down

Per run: the entitlement read, dated, with the contract each line came from and the end date of each one. The configuration at a version, with the reason behind every option that is not the default. The check result naming each rule tested, each failure, and the rule behind any failure that was accepted anyway. The quote check scored against the configuration version and the rate card version it claims. The closing record of what was configured, what it priced at, and what each approval took. Somebody replaying the run can see why every line is in the configuration and why it passed.

Where it stops

What it will not do

Does not price anything. Every line is priced by the quote-builder agent against the rate card at its version, and this agent only says which lines exist and whether they can stand together. Does not agree the solution shape with the customer, which is the solution architect's work with the account owner. Does not approve an exception, change the product rules, or decide that a rule may be broken.

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

  • a2a2p — Agent-to-Agent-to-Physical MCP server · a2a2p.com · hosted · mirrored from the MCP registry Turn agent intent into physical parts: engineering review, measured geometry, calibrated pricing.
  • Agent Commerce Guard MCP server · fxjim.github.io · hosted · mirrored from the MCP registry Policy review and purchase discovery for AI-agent commerce actions.
  • ShipCheck MCP server · wtaylorwilson.github.io · hosted · mirrored from the MCP registry Independent preview-URL QA for coding agents. Playwright heuristics, pass/fail pack.