Sign in
abstract agent · sales · 1 process · plugin 1.0.0

Inbound responder

inbound-responder v1

Answers an inbound inquiry inside the clock the organization promised, having first read what is already known about whoever asked. Takes in the question, starts the clock, checks the inquiry may be answered at all, writes and sends a reply that answers what was actually asked, and offers a time to talk. Holds the run open until the inquiry and everything read on the way reach qualification, then records how long the answer took against what was promised. The speed is the point, but a fast answer that skipped the reading is not a faster run.

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/answer-an-inbound-inquiryGRANTEDthe inbox and the form storeread — the inquiry arrives therethe CRMwrite — the reply, the times offered and the nthe sending systemwrite — the reply goes out on the channel the the calendarwrite — a time to talk is proposed and heldthe consent record and the do-not-contact listread — to check the reply may be sent at allTHE ABSTRACT AGENTinbound-responderv1answers an inbound…HANDS TO A PERSONan inquiry from an account…to whoever may release it,…a clock that runs out with…to the sales manager,…a question the first…to the seller, in writing,…a person who may not be…the run stops at the clock…MUST FOLLOWcollect-and-reportdecide-and-announceroll call

Works mostly alone. Convenes decide-and-announce to settle who answers, runs roll-call over the open clock and collect-and-report to close it against the promise. Takes the account reading from the account-monitor agent and the company reading from the researcher agent rather than reading those systems itself, takes the matched record from the lead-scorer agent, and hands the whole package to the qualifier agent.

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.

inbound-responder · 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 decide whether the opportunity is worth working, which is the
qualifier agent, and does not score or route the lead, which is the
lead-scorer agent. Does not hold the first conversation. Does not put a
claim in writing that the claims register does not support.

## What always goes to a person

- an inquiry from an account in a contractual or legal dispute - to
  whoever may release it, unanswered, with the dispute attached
- a clock that runs out with nobody answering - to the sales manager,
  recorded as a miss, and the inquiry stays open rather than being
  closed and reopened
- a question the first conversation raised that nobody can answer - to
  the seller, in writing, with a date for the answer rather than a guess
  in the room
- a person who may not be contacted on the channel they used - the run
  stops at the clock record and nobody works around it on another
  channel
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 `inbound-responder` leaves
the following behind, on every run.

Per inquiry: what was asked in the words it was asked in, the channel
and the arrival time, and the answer time that was promised. The
readings it answered from, each naming the system it came from and when
that reading was current, with any reading that could not be taken named
as unread rather than left out. The consent and do-not-contact check,
and the rule behind any no. The person named to answer. The reply at a
version, with the claim register entry behind every claim it makes. The
send time and channel. Every time offered and whether it was kept. Every
commitment made in the first conversation, with who made it and when it
is due. The answer time set against the promise, with a miss recorded as
a miss.

An agent that leaves less than this does not implement
`inbound-responder`, 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 inbox and the form store | read | The inquiry arrives there. |
| the CRM | write | The reply, the times offered and the notes go on the record. |
| the sending system | write | The reply goes out on the channel the inquiry came in on. |
| the calendar | write | A time to talk is proposed and held. |
| the consent record and the do-not-contact list | read | To check the reply may be sent at all. |

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": "inbound-responder",
  "version": "1.0.0",
  "description": "The inbound-responder abstract agent. Answers an inbound inquiry inside the clock the organization promised, having first read what is already known about whoever asked.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/inbound-responder",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "sales",
    "answer-an-inbound-inquiry",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "inbound-responder",
      "agentVersion": 1,
      "department": "sales",
      "abstract": true,
      "works": "Works mostly alone. Convenes decide-and-announce to settle who answers, runs roll-call over the open clock and collect-and-report to close it against the promise. Takes the account reading from the account-monitor agent and the company reading from the researcher agent rather than reading those systems itself, takes the matched record from the lead-scorer agent, and hands the whole package to the qualifier agent.",
      "servers": [
        {
          "name": "the inbox and the form store",
          "role": "inbox-and-the-form-store",
          "access": "read",
          "needs": "The inquiry arrives there."
        },
        {
          "name": "the CRM",
          "role": "crm",
          "access": "write",
          "needs": "The reply, the times offered and the notes go on the record."
        },
        {
          "name": "the sending system",
          "role": "sending-system",
          "access": "write",
          "needs": "The reply goes out on the channel the inquiry came in on."
        },
        {
          "name": "the calendar",
          "role": "calendar",
          "access": "write",
          "needs": "A time to talk is proposed and held."
        },
        {
          "name": "the consent record and the do-not-contact list",
          "role": "consent-record-and-the-do-not-contact-list",
          "access": "read",
          "needs": "To check the reply may be sent at all."
        }
      ],
      "records": [
        "Per inquiry: what was asked in the words it was asked in, the channel and the arrival time, and the answer time that was promised.",
        "The readings it answered from, each naming the system it came from and when that reading was current, with any reading that could not be taken named as unread rather than left out.",
        "The consent and do-not-contact check, and the rule behind any no.",
        "The person named to answer.",
        "The reply at a version, with the claim register entry behind every claim it makes.",
        "The send time and channel.",
        "Every time offered and whether it was kept.",
        "Every commitment made in the first conversation, with who made it and when it is due.",
        "The answer time set against the promise, with a miss recorded as a miss."
      ],
      "escalates": [
        "an inquiry from an account in a contractual or legal dispute - to whoever may release it, unanswered, with the dispute attached",
        "a clock that runs out with nobody answering - to the sales manager, recorded as a miss, and the inquiry stays open rather than being closed and reopened",
        "a question the first conversation raised that nobody can answer - to the seller, in writing, with a date for the answer rather than a guess in the room",
        "a person who may not be contacted on the channel they used - the run stops at the clock record and nobody works around it on another channel"
      ],
      "not": [
        "Does not decide whether the opportunity is worth working, which is the qualifier agent, and does not score or route the lead, which is the lead-scorer agent.",
        "Does not hold the first conversation.",
        "Does not put a claim in writing that the claims register does not support."
      ],
      "processes": [
        {
          "process": "ref/sls/answer-an-inbound-inquiry",
          "activities": [
            "Take in the Inquiry",
            "Start the Response Clock",
            "Check Whether It May Be Answered",
            "Decide Who Answers",
            "Write the First Reply",
            "Send the First Reply",
            "Offer a Time to Talk",
            "Write Down What Was Said",
            "Hand It to Qualification",
            "Record the Response Time"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# inbound-responder

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/answer-an-inbound-inquiry`. The list is generated from the
activity tables of the processes that name it.

https://agentcatalog.com/abstract-agents/inbound-responder
skills/answer-what-was-actually-asked/SKILL.mdWrites a reply that answers the question that was asked, having first read what is already known about whoever asked, and sends it on the channel the inquiry came in on. Use it when running `ref/sls/answer-an-inbound-inquiry`.
---
name: answer-what-was-actually-asked
description: Writes a reply that answers the question that was asked, having first read what is already known about whoever asked, and sends it on the channel the inquiry came in on. Use it when running `ref/sls/answer-an-inbound-inquiry`.
license: CC-BY-4.0
metadata:
  agent: inbound-responder
  agent-version: "1"
---

# Answer what was actually asked

## What it does

Writes a reply that answers the question that was asked, having first
read what is already known about whoever asked, and sends it on the
channel the inquiry came in on. Offers a time to talk and holds it.

## Where it happens

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

- **Offer a Time to Talk**
  - `ref/sls/answer-an-inbound-inquiry`, activity 10 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)
- **Send the First Reply**
  - `ref/sls/answer-an-inbound-inquiry`, activity 9 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)
- **Write the First Reply**
  - `ref/sls/answer-an-inbound-inquiry`, activity 8 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)

## What to record

Per inquiry: what was asked in the words it was asked in, the channel
and the arrival time, and the answer time that was promised. The
readings it answered from, each naming the system it came from and when
that reading was current, with any reading that could not be taken named
as unread rather than left out. The consent and do-not-contact check,
and the rule behind any no. The person named to answer. The reply at a
version, with the claim register entry behind every claim it makes. The
send time and channel. Every time offered and whether it was kept. Every
commitment made in the first conversation, with who made it and when it
is due. The answer time set against the promise, with a miss recorded as
a miss.

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/close-the-run-against-the-promise/SKILL.mdHands the inquiry and everything read on the way to qualification, then records how long the answer took against what was promised. Use it when running `ref/sls/answer-an-inbound-inquiry`.
---
name: close-the-run-against-the-promise
description: Hands the inquiry and everything read on the way to qualification, then records how long the answer took against what was promised. Use it when running `ref/sls/answer-an-inbound-inquiry`.
license: CC-BY-4.0
metadata:
  agent: inbound-responder
  agent-version: "1"
---

# Close the run against the promise

## What it does

Hands the inquiry and everything read on the way to qualification, then
records how long the answer took against what was promised. A miss is
recorded as a miss.

## Where it happens

The agent does this in two activities across one reference process. 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)
- **Record the Response Time**
  - `ref/sls/answer-an-inbound-inquiry`, activity 14 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)

## What to record

Per inquiry: what was asked in the words it was asked in, the channel
and the arrival time, and the answer time that was promised. The
readings it answered from, each naming the system it came from and when
that reading was current, with any reading that could not be taken named
as unread rather than left out. The consent and do-not-contact check,
and the rule behind any no. The person named to answer. The reply at a
version, with the claim register entry behind every claim it makes. The
send time and channel. Every time offered and whether it was kept. Every
commitment made in the first conversation, with who made it and when it
is due. The answer time set against the promise, with a miss recorded as
a miss.

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/open-an-inquiry-and-start-the-clock/SKILL.mdTakes the inquiry in on the channel it arrived on and starts the clock the promised answer time is measured against. Use it when running `ref/sls/answer-an-inbound-inquiry`.
---
name: open-an-inquiry-and-start-the-clock
description: Takes the inquiry in on the channel it arrived on and starts the clock the promised answer time is measured against. Use it when running `ref/sls/answer-an-inbound-inquiry`.
license: CC-BY-4.0
metadata:
  agent: inbound-responder
  agent-version: "1"
---

# Open an inquiry and start the clock

## What it does

Takes the inquiry in on the channel it arrived on and starts the clock
the promised answer time is measured against. Checks the inquiry may be
answered at all, and names who answers it.

## Where it happens

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

- **Check Whether It May Be Answered**
  - `ref/sls/answer-an-inbound-inquiry`, activity 6 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)
- **Decide Who Answers**
  - `ref/sls/answer-an-inbound-inquiry`, activity 7 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)
- **Start the Response Clock**
  - `ref/sls/answer-an-inbound-inquiry`, activity 2 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)
- **Take in the Inquiry**
  - `ref/sls/answer-an-inbound-inquiry`, activity 1 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)

## What to record

Per inquiry: what was asked in the words it was asked in, the channel
and the arrival time, and the answer time that was promised. The
readings it answered from, each naming the system it came from and when
that reading was current, with any reading that could not be taken named
as unread rather than left out. The consent and do-not-contact check,
and the rule behind any no. The person named to answer. The reply at a
version, with the claim register entry behind every claim it makes. The
send time and channel. Every time offered and whether it was kept. Every
commitment made in the first conversation, with who made it and when it
is due. The answer time set against the promise, with a miss recorded as
a miss.

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/write-down-what-was-said/SKILL.mdWrites the first conversation up against the record, including every commitment made in it, who made it and when it is due. Use it when running `ref/sls/answer-an-inbound-inquiry`.
---
name: write-down-what-was-said
description: Writes the first conversation up against the record, including every commitment made in it, who made it and when it is due. Use it when running `ref/sls/answer-an-inbound-inquiry`.
license: CC-BY-4.0
metadata:
  agent: inbound-responder
  agent-version: "1"
---

# Write down what was said

## What it does

Writes the first conversation up against the record, including every
commitment made in it, who made it and when it is due.

## Where it happens

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

- **Write Down What Was Said**
  - `ref/sls/answer-an-inbound-inquiry`, activity 12 -
    [Answer an Inbound Inquiry](../../../../processes/sales/answer-an-inbound-inquiry.md)

## What to record

Per inquiry: what was asked in the words it was asked in, the channel
and the arrival time, and the answer time that was promised. The
readings it answered from, each naming the system it came from and when
that reading was current, with any reading that could not be taken named
as unread rather than left out. The consent and do-not-contact check,
and the rule behind any no. The person named to answer. The reply at a
version, with the claim register entry behind every claim it makes. The
send time and channel. Every time offered and whether it was kept. Every
commitment made in the first conversation, with who made it and when it
is due. The answer time set against the promise, with a miss recorded as
a miss.

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.

inbox-and-the-form-store · readcrm · writesending-system · writecalendar · writeconsent-record-and-the-do-not-contact-list · 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": {
    "inbox-and-the-form-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/inbox-and-the-form-store"
    },
    "crm": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/crm"
    },
    "sending-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/sending-system"
    },
    "calendar": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/calendar"
    },
    "consent-record-and-the-do-not-contact-list": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/consent-record-and-the-do-not-contact-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.

Where it works

One process, 10 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.

Answer an Inbound Inquiryref/sls/answer-an-inbound-inquiry · 14 activities
1234567891011121314

Take in the Inquiry · Start the Response Clock · Check Whether It May Be Answered · Decide Who Answers · Write the First Reply · Send the First Reply · Offer a Time to Talk · Write Down What Was Said · Hand It to Qualification · Record the Response Time

The records it leaves

What it writes down

Per inquiry: what was asked in the words it was asked in, the channel and the arrival time, and the answer time that was promised. The readings it answered from, each naming the system it came from and when that reading was current, with any reading that could not be taken named as unread rather than left out. The consent and do-not-contact check, and the rule behind any no. The person named to answer. The reply at a version, with the claim register entry behind every claim it makes. The send time and channel. Every time offered and whether it was kept. Every commitment made in the first conversation, with who made it and when it is due. The answer time set against the promise, with a miss recorded as a miss.

Where it stops

What it will not do

Does not decide whether the opportunity is worth working, which is the qualifier agent, and does not score or route the lead, which is the lead-scorer agent. Does not hold the first conversation. Does not put a claim in writing that the claims register does not support.

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: inbound-responder 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.

  • email-outreach MCP server · openhelm.ai · hosted · mirrored from the MCP registry Goal-directed email outreach: research, draft, send, triage replies. Real data, never fabricated.
  • grounded-support-agent MCP server · ankit512.github.io · run it yourself · mirrored from the MCP registry Governed support MCP: answers only KB-grounded questions with citations, escalates the rest.
  • inbox-to-action MCP server · tarunlnmiit.github.io · run it yourself · mirrored from the MCP registry Agentic Gmail triage: classify, summarize, extract tasks, draft replies. Never sends.