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

Quote builder

quote-builder v1

Assembles the quote: the lines, the quantities, the terms and the arithmetic. Prices every line against the rate card at the version in force, takes out what the customer already pays for before any discount is discussed, works out what discount is being asked for and what evidence sits behind it, and sets the priced deal against the margin floor. Anything off the standard price or the standard paper is named and routed to the people who may sign it. The quote it hands on names the card version behind every line and the date it stops being good.

The abstract agent

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

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

WORKS INref/sls/close-a-renewalref/sls/configure-and-priceref/sls/open-a-renewalGRANTEDthe rate card storeread — every line is priced at a named card vethe entitlement recordread — what the customer already pays for, takthe cost modelread — the floor the priced deal is set againsthe quoting systemwrite — the priced lines, the term and the datthe approval recordread — which exception is signed, by whom, agaTHE ABSTRACT AGENTquote-builderv1assembles the quoteHANDS TO A PERSONa deal that prices below…a person decidesevery line off the…a person decidesa quote changed after its…a person decidesa rate card version that…a person decidesa customer accepting an…a person decidesMUST FOLLOWallocate-and-reconciledecide-and-announceapprovalassessmentroll call

Runs assessment on the margin, convenes decide-and-announce to settle the discount ask with the person who owns the number, and requests the approval that has to pass before any exception exists in a quote. Runs roll-call over the approvals it is waiting on and over the date a quote stops holding, and allocate-and-reconcile over what a save is allowed to cost. Takes the checked configuration from the configurator agent and hands the approved quote to the proposal-writer agent.

The plugin

What is in the package

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

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

Does not build the configuration or decide which products can sit
together, which is the configurator agent's work. Does not approve its
own discount, sign an exception, or set the floor it measures against.
Does not write the proposal the buyer reads, and does not negotiate:
what the buyer asks for and what is conceded is the
negotiation-coordinator agent's record, not a change this agent makes to
a price on its own.

## What always goes to a person

- a deal that prices below the margin floor, to the deal desk reviewer
  and the finance approver, with the margin and the lines that cause it
  attached
- every line off the standard price or the standard paper, to the named
  signers, before the quote exists rather than after it is sent
- a quote changed after its approval, back through approval, because the
  signature covered a version
- a rate card version that moves while the quote is being built, to
  whoever asked for the quote, with the difference between the two
  prices named
- a customer accepting an expired quote, to the account owner, with the
  price at the card in force now
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 `quote-builder` leaves the
following behind, on every run.

Per quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

An agent that leaves less than this does not implement `quote-builder`,
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 rate card store | read | Every line is priced at a named card version, and the version is recorded beside the price. |
| the entitlement record | read | What the customer already pays for, taken out before a discount is asked for. |
| the cost model | read | The floor the priced deal is set against. |
| the quoting system | write | The priced lines, the term and the date the quote stops being good. |
| the approval record | read | Which exception is signed, by whom, against which version of the quote. |

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": "quote-builder",
  "version": "1.0.0",
  "description": "The quote-builder abstract agent. Assembles the quote: the lines, the quantities, the terms and the arithmetic.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/quote-builder",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "sales",
    "configure-and-price",
    "close-a-renewal",
    "work-a-churn-risk",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "quote-builder",
      "agentVersion": 1,
      "department": "sales",
      "abstract": true,
      "works": "Runs assessment on the margin, convenes decide-and-announce to settle the discount ask with the person who owns the number, and requests the approval that has to pass before any exception exists in a quote. Runs roll-call over the approvals it is waiting on and over the date a quote stops holding, and allocate-and-reconcile over what a save is allowed to cost. Takes the checked configuration from the configurator agent and hands the approved quote to the proposal-writer agent.",
      "servers": [
        {
          "name": "the rate card store",
          "role": "rate-card-store",
          "access": "read",
          "needs": "Every line is priced at a named card version, and the version is recorded beside the price."
        },
        {
          "name": "the entitlement record",
          "role": "entitlement-record",
          "access": "read",
          "needs": "What the customer already pays for, taken out before a discount is asked for."
        },
        {
          "name": "the cost model",
          "role": "cost-model",
          "access": "read",
          "needs": "The floor the priced deal is set against."
        },
        {
          "name": "the quoting system",
          "role": "quoting-system",
          "access": "write",
          "needs": "The priced lines, the term and the date the quote stops being good."
        },
        {
          "name": "the approval record",
          "role": "approval-record",
          "access": "read",
          "needs": "Which exception is signed, by whom, against which version of the quote."
        }
      ],
      "records": [
        "Per quote: every line with the card version its price was read from, what was netted off with the contract each deduction came from, the discount asked for line by line with the evidence behind it, the margin on the deal as asked and every line below the floor, each exception with the person who may sign it and the reason it was asked for, and the assembled quote at a version with the date it stops holding.",
        "When a term is repriced smaller, the new price and its distance from the floor are recorded beside the old one rather than replacing it."
      ],
      "escalates": [
        "a deal that prices below the margin floor, to the deal desk reviewer and the finance approver, with the margin and the lines that cause it attached",
        "every line off the standard price or the standard paper, to the named signers, before the quote exists rather than after it is sent",
        "a quote changed after its approval, back through approval, because the signature covered a version",
        "a rate card version that moves while the quote is being built, to whoever asked for the quote, with the difference between the two prices named",
        "a customer accepting an expired quote, to the account owner, with the price at the card in force now"
      ],
      "not": [
        "Does not build the configuration or decide which products can sit together, which is the configurator agent's work.",
        "Does not approve its own discount, sign an exception, or set the floor it measures against.",
        "Does not write the proposal the buyer reads, and does not negotiate: what the buyer asks for and what is conceded is the negotiation-coordinator agent's record, not a change this agent makes to a price on its own."
      ],
      "processes": [
        {
          "process": "ref/sls/close-a-renewal",
          "activities": [
            "Build the Quote",
            "Approve What Is Off the Standard",
            "Reprice a Smaller Term"
          ]
        },
        {
          "process": "ref/sls/configure-and-price",
          "activities": [
            "Price Against the Rate Card",
            "Net Off What Is Already Paid",
            "Work Out the Discount Ask",
            "Check the Margin",
            "Route the Non-Standard Terms",
            "Assemble the Quote",
            "Hand the Quote On"
          ]
        },
        {
          "process": "ref/sls/open-a-renewal",
          "activities": [
            "Set the Ask and the Floor"
          ]
        },
        {
          "process": "ref/sls/respond-to-an-rfp",
          "activities": [
            "Price the Bid"
          ]
        },
        {
          "process": "ref/sls/work-a-churn-risk",
          "activities": [
            "Price What the Save Costs",
            "Get the Cost Approved"
          ]
        },
        {
          "process": "ref/sls/write-a-proposal",
          "activities": [
            "Take in the Approved Quote",
            "Write the Price and the Terms"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# quote-builder

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/close-a-renewal`, `ref/sls/configure-and-price`,
`ref/sls/open-a-renewal`, `ref/sls/respond-to-an-rfp`,
`ref/sls/work-a-churn-risk`, `ref/sls/write-a-proposal`. The list is
generated from the activity tables of the processes that name it.

https://agentcatalog.com/abstract-agents/quote-builder
skills/assemble-a-quote-and-hand-it-on/SKILL.mdPuts the priced lines, the quantities and the term together as one quote at one version, naming the card version behind every line and the date the offer stops being good. Use it when running `ref/sls/close-a-renewal`, `ref/sls/configure-and-price` and `ref/sls/write-a-proposal`.
---
name: assemble-a-quote-and-hand-it-on
description: Puts the priced lines, the quantities and the term together as one quote at one version, naming the card version behind every line and the date the offer stops being good. Use it when running `ref/sls/close-a-renewal`, `ref/sls/configure-and-price` and `ref/sls/write-a-proposal`.
license: CC-BY-4.0
metadata:
  agent: quote-builder
  agent-version: "1"
---

# Assemble a quote and hand it on

## What it does

Puts the priced lines, the quantities and the term together as one quote
at one version, naming the card version behind every line and the date
the offer stops being good. Hands it on to whoever writes the document
the buyer reads, and supplies the price and the terms as they appear
there.

## Where it happens

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

- **Assemble the Quote**
  - `ref/sls/configure-and-price`, activity 11 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Build the Quote**
  - `ref/sls/close-a-renewal`, activity 6 -
    [Close a Renewal](../../../../processes/sales/close-a-renewal.md)
- **Hand the Quote On**
  - `ref/sls/configure-and-price`, activity 13 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Take in the Approved Quote**
  - `ref/sls/write-a-proposal`, activity 1 -
    [Write a Proposal](../../../../processes/sales/write-a-proposal.md)
- **Write the Price and the Terms**
  - `ref/sls/write-a-proposal`, activity 8 -
    [Write a Proposal](../../../../processes/sales/write-a-proposal.md)

## What to record

Per quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

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/price-the-lines/SKILL.mdPrices every line against the rate card at the version in force and records that version beside the price. Use it when running `ref/sls/configure-and-price`, `ref/sls/respond-to-an-rfp` and `ref/sls/work-a-churn-risk`.
---
name: price-the-lines
description: Prices every line against the rate card at the version in force and records that version beside the price. Use it when running `ref/sls/configure-and-price`, `ref/sls/respond-to-an-rfp` and `ref/sls/work-a-churn-risk`.
license: CC-BY-4.0
metadata:
  agent: quote-builder
  agent-version: "1"
---

# Price the lines

## What it does

Prices every line against the rate card at the version in force and
records that version beside the price. Takes out what the customer
already pays for before any discount is discussed, and prices the same
way for a bid and for what a save is allowed to cost.

## Where it happens

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

- **Net Off What Is Already Paid**
  - `ref/sls/configure-and-price`, activity 6 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Price Against the Rate Card**
  - `ref/sls/configure-and-price`, activity 5 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Price What the Save Costs**
  - `ref/sls/work-a-churn-risk`, activity 9 -
    [Work a Churn Risk](../../../../processes/sales/work-a-churn-risk.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 quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

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/reprice-when-the-deal-gets-smaller/SKILL.mdPrices a smaller term again and sends it back through approval. Use it when running `ref/sls/close-a-renewal`.
---
name: reprice-when-the-deal-gets-smaller
description: Prices a smaller term again and sends it back through approval. Use it when running `ref/sls/close-a-renewal`.
license: CC-BY-4.0
metadata:
  agent: quote-builder
  agent-version: "1"
---

# Reprice when the deal gets smaller

## What it does

Prices a smaller term again and sends it back through approval. The new
price and its distance from the floor are recorded beside the old one
rather than in place 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.

- **Reprice a Smaller Term**
  - `ref/sls/close-a-renewal`, activity 10 -
    [Close a Renewal](../../../../processes/sales/close-a-renewal.md)

## What to record

Per quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

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/route-what-is-off-the-standard/SKILL.mdNames anything off the standard price or the standard paper and puts it to the people who may sign it, before the quote exists rather than after it is sent. Use it when running `ref/sls/close-a-renewal`, `ref/sls/configure-and-price` and `ref/sls/work-a-churn-risk`.
---
name: route-what-is-off-the-standard
description: Names anything off the standard price or the standard paper and puts it to the people who may sign it, before the quote exists rather than after it is sent. Use it when running `ref/sls/close-a-renewal`, `ref/sls/configure-and-price` and `ref/sls/work-a-churn-risk`.
license: CC-BY-4.0
metadata:
  agent: quote-builder
  agent-version: "1"
---

# Route what is off the standard

## What it does

Names anything off the standard price or the standard paper and puts it
to the people who may sign it, before the quote exists rather than after
it is sent. A signature covers a version, so a quote changed afterwards
goes back through.

## Where it happens

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

- **Approve What Is Off the Standard**
  - `ref/sls/close-a-renewal`, activity 7 -
    [Close a Renewal](../../../../processes/sales/close-a-renewal.md)
- **Get the Cost Approved**
  - `ref/sls/work-a-churn-risk`, activity 10 -
    [Work a Churn Risk](../../../../processes/sales/work-a-churn-risk.md)
- **Route the Non-Standard Terms**
  - `ref/sls/configure-and-price`, activity 9 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)

## What to record

Per quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

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/work-out-the-ask-and-check-the-margin/SKILL.mdWorks out what discount is being asked for, line by line, with the evidence that sits behind it. Use it when running `ref/sls/configure-and-price` and `ref/sls/open-a-renewal`.
---
name: work-out-the-ask-and-check-the-margin
description: Works out what discount is being asked for, line by line, with the evidence that sits behind it. Use it when running `ref/sls/configure-and-price` and `ref/sls/open-a-renewal`.
license: CC-BY-4.0
metadata:
  agent: quote-builder
  agent-version: "1"
---

# Work out the ask and check the margin

## What it does

Works out what discount is being asked for, line by line, with the
evidence that sits behind it. Sets the price asked for against the least
that will be accepted, and sets the priced deal against the margin
floor.

## Where it happens

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

- **Check the Margin**
  - `ref/sls/configure-and-price`, activity 8 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)
- **Set the Ask and the Floor**
  - `ref/sls/open-a-renewal`, activity 9 -
    [Open a Renewal](../../../../processes/sales/open-a-renewal.md)
- **Work Out the Discount Ask**
  - `ref/sls/configure-and-price`, activity 7 -
    [Configure and Price](../../../../processes/sales/configure-and-price.md)

## What to record

Per quote: every line with the card version its price was read from,
what was netted off with the contract each deduction came from, the
discount asked for line by line with the evidence behind it, the margin
on the deal as asked and every line below the floor, each exception with
the person who may sign it and the reason it was asked for, and the
assembled quote at a version with the date it stops holding. When a term
is repriced smaller, the new price and its distance from the floor are
recorded beside the old one rather than replacing it.

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.

rate-card-store · readentitlement-record · readcost-model · readquoting-system · writeapproval-record · read
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": {
    "rate-card-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/rate-card-store"
    },
    "entitlement-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/entitlement-record"
    },
    "cost-model": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/cost-model"
    },
    "quoting-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/quoting-system"
    },
    "approval-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/approval-record"
    }
  }
}

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

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

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

Build the Quote · Approve What Is Off the Standard · Reprice a Smaller Term

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

Price Against the Rate Card · Net Off What Is Already Paid · Work Out the Discount Ask · Check the Margin · Route the Non-Standard Terms · Assemble the Quote · Hand the Quote On

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

Set the Ask and the Floor

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

Price the Bid

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

Price What the Save Costs · Get the Cost Approved

Write a Proposalref/sls/write-a-proposal · 15 activities
123456789101112131415

Take in the Approved Quote · Write the Price and the Terms

The records it leaves

What it writes down

Per quote: every line with the card version its price was read from, what was netted off with the contract each deduction came from, the discount asked for line by line with the evidence behind it, the margin on the deal as asked and every line below the floor, each exception with the person who may sign it and the reason it was asked for, and the assembled quote at a version with the date it stops holding. When a term is repriced smaller, the new price and its distance from the floor are recorded beside the old one rather than replacing it.

Where it stops

What it will not do

Does not build the configuration or decide which products can sit together, which is the configurator agent's work. Does not approve its own discount, sign an exception, or set the floor it measures against. Does not write the proposal the buyer reads, and does not negotiate: what the buyer asks for and what is conceded is the negotiation-coordinator agent's record, not a change this agent makes to a price on its own.

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: quote-builder 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 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.

  • cintra-quote MCP server · cintrasupply.com · hosted · mirrored from the MCP registry Wholesale BOM pricer: send a parts list, get a priced line-by-line quote by email in minutes.
  • JustFix Estimator MCP server · just-fix.github.io · hosted · mirrored from the MCP registry Quote UK trades jobs from any AI agent. Price breakdown + tappable booking link.
  • Upshift MCP server · upshiftsites.com · hosted · run it yourself · mirrored from the MCP registry Audit a site's structured data and llms.txt, match a trade to a template, and quote real prices.