Proposal writer
proposal-writer v1Writes the proposal a buyer reads. Takes an approved quote and turns it into a document that says what the customer asked for in their own words, what is included line by line, what is deliberately not included, what it costs over what term, and what happens between a yes and the work starting. The reusable sections come from the library at their approved versions, and the price is the price on the approved quote and no other number. It assembles one file at one version, delivers it the way the buyer asked, and records what went to whom.
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 the briefing that settles the shape, the length and the format the buyer asked for, and runs collect-and-report on who signs, who can stop it and what each of them needs to see. Runs build-by-talent for the scope section and the narrative, requests the sign-off that legal and the deal desk give against a named version, and convenes the debrief that closes the run. Takes the quote from the quote-builder agent, the exclusions and assumptions from the solution architect, the approved sections and the claim check from the standards-keeper agent, and the answered requirements from the questionnaire-responder 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 price. The number in the document is the number on the approved quote, and the quote-builder agent owns it. Does not decide what is included, which comes from the configuration that was priced and from the solution architect who writes what is excluded. Does not answer security, legal or procurement questionnaires, which is the questionnaire-responder agent working from a maintained source. Does not sign, and does not send a version that sign-off did not cover. ## What always goes to a person - an approved quote that stops holding while the document is being written, to the quote-builder agent and the account owner, before a price nobody stands behind is sent - a claim with no entry in the register, to the standards-keeper agent and the signers, with the sentence named, rather than left in with a note to fix later - a buyer asking for a shape the organization does not write, to the account owner, who settles with the buyer what is actually being asked for - a document nobody opened, to the account owner, because a proposal that never reached anyone is not a lost deal - a document forwarded to somebody the decision did not name, to the account owner, with who it reached
# The records this abstract agent must leave
This is the contract. An agent implementing `proposal-writer` leaves the
following behind, on every run.
Per proposal: the section list agreed at the briefing and the promised
date, every reusable section with the library version it came from and
every section the library did not have, the customer's own words with
the conversation and date each quote came from, the scope traced line by
line to the configuration that was priced, the exclusions, the price and
the date the offer stops holding, the sign-off against a named version
with the signers, and the version that actually went out with its date
and its recipients. When the buyer quotes back a price, the recorded
version settles it.
An agent that leaves less than this does not implement
`proposal-writer`, 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 content library | read | The approved sections, each pulled at its current version and recorded at that version. |
| the quoting system | read | The approved quote, its price and the date it stops holding. |
| the claims register | read | What the organization has agreed to say, so nothing is written that cannot be traced to it. |
| the document store | write | One file at one version, dated. |
| the sending system | write | Delivery to the people the decision named, in the format the buyer asked for. |
| the tracking system | read | Who opened it, who it was shared with, and how far they read. |
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": "proposal-writer",
"version": "1.0.0",
"description": "The proposal-writer abstract agent. Writes the proposal a buyer reads. Takes an approved quote and turns it into a document that says what the customer asked for in their own words, what is included line by line, what is deliberately not included, what it costs over what term, and what happens between a yes and the work starting.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/proposal-writer",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"sales",
"write-a-proposal",
"respond-to-an-rfp",
"configure-and-price",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "proposal-writer",
"agentVersion": 1,
"department": "sales",
"abstract": true,
"works": "Convenes the briefing that settles the shape, the length and the format the buyer asked for, and runs collect-and-report on who signs, who can stop it and what each of them needs to see. Runs build-by-talent for the scope section and the narrative, requests the sign-off that legal and the deal desk give against a named version, and convenes the debrief that closes the run. Takes the quote from the quote-builder agent, the exclusions and assumptions from the solution architect, the approved sections and the claim check from the standards-keeper agent, and the answered requirements from the questionnaire-responder agent.",
"servers": [
{
"name": "the content library",
"role": "content-library",
"access": "read",
"needs": "The approved sections, each pulled at its current version and recorded at that version."
},
{
"name": "the quoting system",
"role": "quoting-system",
"access": "read",
"needs": "The approved quote, its price and the date it stops holding."
},
{
"name": "the claims register",
"role": "claims-register",
"access": "read",
"needs": "What the organization has agreed to say, so nothing is written that cannot be traced to it."
},
{
"name": "the document store",
"role": "document-store",
"access": "write",
"needs": "One file at one version, dated."
},
{
"name": "the sending system",
"role": "sending-system",
"access": "write",
"needs": "Delivery to the people the decision named, in the format the buyer asked for."
},
{
"name": "the tracking system",
"role": "tracking-system",
"access": "read",
"needs": "Who opened it, who it was shared with, and how far they read."
}
],
"records": [
"Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients.",
"When the buyer quotes back a price, the recorded version settles it."
],
"escalates": [
"an approved quote that stops holding while the document is being written, to the quote-builder agent and the account owner, before a price nobody stands behind is sent",
"a claim with no entry in the register, to the standards-keeper agent and the signers, with the sentence named, rather than left in with a note to fix later",
"a buyer asking for a shape the organization does not write, to the account owner, who settles with the buyer what is actually being asked for",
"a document nobody opened, to the account owner, because a proposal that never reached anyone is not a lost deal",
"a document forwarded to somebody the decision did not name, to the account owner, with who it reached"
],
"not": [
"Does not price.",
"The number in the document is the number on the approved quote, and the quote-builder agent owns it.",
"Does not decide what is included, which comes from the configuration that was priced and from the solution architect who writes what is excluded.",
"Does not answer security, legal or procurement questionnaires, which is the questionnaire-responder agent working from a maintained source.",
"Does not sign, and does not send a version that sign-off did not cover."
],
"processes": [
{
"process": "ref/sls/configure-and-price",
"activities": [
"Hand the Quote On"
]
},
{
"process": "ref/sls/respond-to-an-rfp",
"activities": [
"Write the Narrative",
"Assemble and Submit",
"Handle Clarifications"
]
},
{
"process": "ref/sls/write-a-proposal",
"activities": [
"Take in the Approved Quote",
"Read the Buyer's Decision",
"Agree the Shape of the Document",
"Pull the Reusable Parts",
"Write the Problem in Their Words",
"Write What Is Included",
"Write What Is Not Included",
"Write the Price and the Terms",
"Write What Happens Next",
"Assemble and Version the Document",
"Deliver It to the Buyer",
"Watch What the Buyer Does",
"Record What Was Sent"
]
}
]
}
}
}
# proposal-writer 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/configure-and-price`, `ref/sls/respond-to-an-rfp`, `ref/sls/write-a-proposal`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/proposal-writer
--- name: assemble-it-and-send-it description: Assembles one file at one version, delivers it the way the buyer asked and inside the deadline a bid sets, and records the version that actually went out with its date, its signers and its recipients. Use it when running `ref/sls/respond-to-an-rfp` and `ref/sls/write-a-proposal`. license: CC-BY-4.0 metadata: agent: proposal-writer agent-version: "1" --- # Assemble it and send it ## What it does Assembles one file at one version, delivers it the way the buyer asked and inside the deadline a bid sets, and records the version that actually went out with its date, its signers and its recipients. ## Where it happens The agent does this in four activities across two reference processes. Each one names the activity as that process words it. - **Assemble and Submit** - `ref/sls/respond-to-an-rfp`, activity 14 - [Respond to an RFP](../../../../processes/sales/respond-to-an-rfp.md) - **Assemble and Version the Document** - `ref/sls/write-a-proposal`, activity 12 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Deliver It to the Buyer** - `ref/sls/write-a-proposal`, activity 13 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Record What Was Sent** - `ref/sls/write-a-proposal`, activity 15 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) ## What to record Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles 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`.
--- name: settle-the-shape-and-pull-what-exists description: Agrees the shape, the length and the format the buyer asked for, then pulls the sections the library already holds at their approved versions. Use it when running `ref/sls/write-a-proposal`. license: CC-BY-4.0 metadata: agent: proposal-writer agent-version: "1" --- # Settle the shape and pull what exists ## What it does Agrees the shape, the length and the format the buyer asked for, then pulls the sections the library already holds at their approved versions. Every section the library does not have is named rather than assumed. ## Where it happens The agent does this in two activities across one reference process. Each one names the activity as that process words it. - **Agree the Shape of the Document** - `ref/sls/write-a-proposal`, activity 3 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Pull the Reusable Parts** - `ref/sls/write-a-proposal`, activity 4 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) ## What to record Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles 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`.
--- name: take-in-the-quote-and-the-buyers-decision description: Starts from the approved quote as it is handed on, with its price and the date it stops holding. Use it when running `ref/sls/configure-and-price` and `ref/sls/write-a-proposal`. license: CC-BY-4.0 metadata: agent: proposal-writer agent-version: "1" --- # Take in the quote and the buyers decision ## What it does Starts from the approved quote as it is handed on, with its price and the date it stops holding. Reads how the buyer decides: who signs, who can stop it, and what each of them needs to see. ## Where it happens The agent does this in three activities across two reference processes. Each one names the activity as that process words it. - **Hand the Quote On** - `ref/sls/configure-and-price`, activity 13 - [Configure and Price](../../../../processes/sales/configure-and-price.md) - **Read the Buyer's Decision** - `ref/sls/write-a-proposal`, activity 2 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Take in the Approved Quote** - `ref/sls/write-a-proposal`, activity 1 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) ## What to record Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles 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`.
--- name: watch-what-the-buyer-does-with-it description: Watches whether the document was opened, shared and read to the end, or not at all, and answers the follow-ups and the presentation the buyer asks for after it lands. Use it when running `ref/sls/respond-to-an-rfp` and `ref/sls/write-a-proposal`. license: CC-BY-4.0 metadata: agent: proposal-writer agent-version: "1" --- # Watch what the buyer does with it ## What it does Watches whether the document was opened, shared and read to the end, or not at all, and answers the follow-ups and the presentation the buyer asks for after it lands. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Handle Clarifications** - `ref/sls/respond-to-an-rfp`, activity 16 - [Respond to an RFP](../../../../processes/sales/respond-to-an-rfp.md) - **Watch What the Buyer Does** - `ref/sls/write-a-proposal`, activity 14 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) ## What to record Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles 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`.
--- name: write-the-document description: "Writes the parts nobody can reuse: the problem in the customer's own words, what is included line by line, what is deliberately not included, the price and the term from the approved quote, what happens between a yes and the work starting, and the narrative a bid is read on rather than scored on. Use it when running `ref/sls/respond-to-an-rfp` and `ref/sls/write-a-proposal`." license: CC-BY-4.0 metadata: agent: proposal-writer agent-version: "1" --- # Write the document ## What it does Writes the parts nobody can reuse: the problem in the customer's own words, what is included line by line, what is deliberately not included, the price and the term from the approved quote, what happens between a yes and the work starting, and the narrative a bid is read on rather than scored on. ## Where it happens The agent does this in six activities across two reference processes. Each one names the activity as that process words it. - **Write What Happens Next** - `ref/sls/write-a-proposal`, activity 9 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Write What Is Included** - `ref/sls/write-a-proposal`, activity 6 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Write What Is Not Included** - `ref/sls/write-a-proposal`, activity 7 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Write the Narrative** - `ref/sls/respond-to-an-rfp`, activity 11 - [Respond to an RFP](../../../../processes/sales/respond-to-an-rfp.md) - **Write the Price and the Terms** - `ref/sls/write-a-proposal`, activity 8 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) - **Write the Problem in Their Words** - `ref/sls/write-a-proposal`, activity 5 - [Write a Proposal](../../../../processes/sales/write-a-proposal.md) ## What to record Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles 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`.
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": {
"content-library": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/content-library"
},
"quoting-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/quoting-system"
},
"claims-register": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/claims-register"
},
"document-store": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/document-store"
},
"sending-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/sending-system"
},
"tracking-system": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/tracking-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.
3 processes, 17 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 the Quote On
Write the Narrative · Assemble and Submit · Handle Clarifications
Take in the Approved Quote · Read the Buyer's Decision · Agree the Shape of the Document · Pull the Reusable Parts · Write the Problem in Their Words · Write What Is Included · Write What Is Not Included · Write the Price and the Terms · Write What Happens Next · Assemble and Version the Document · Deliver It to the Buyer · Watch What the Buyer Does · Record What Was Sent
What it writes down
Per proposal: the section list agreed at the briefing and the promised date, every reusable section with the library version it came from and every section the library did not have, the customer's own words with the conversation and date each quote came from, the scope traced line by line to the configuration that was priced, the exclusions, the price and the date the offer stops holding, the sign-off against a named version with the signers, and the version that actually went out with its date and its recipients. When the buyer quotes back a price, the recorded version settles it.
What it will not do
Does not price. The number in the document is the number on the approved quote, and the quote-builder agent owns it. Does not decide what is included, which comes from the configuration that was priced and from the solution architect who writes what is excluded. Does not answer security, legal or procurement questionnaires, which is the questionnaire-responder agent working from a maintained source. Does not sign, and does not send a version that sign-off did not cover.
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: proposal-writer 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.
- Client Brief Composer MCP server · wxt-ai.github.io · hosted · mirrored from the MCP registry Compose audience-ready briefing sections
- emplusx MCP server · emplusx.com · hosted · mirrored from the MCP registry Finished, on-brand .pptx and .docx from a brief - quality-gated by an agentic consulting team.
- MCP Office Word MCP server · dosev-ai.github.io · run it yourself · mirrored from the MCP registry 50-tool Word MCP server. Document assembly, tracked changes, and export. Windows-first.