> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pomerado.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Subscribe with MCP Events

> Let an MCP client that supports MCP Events hear about its own jobs, with nothing to set up in Pomerado.

MCP Events lets an MCP client be told when a job it started needs it or finishes. The client subscribes itself through the Pomerado MCP, so there's nothing to set up in Pomerado. ChatGPT is one such client.

## Subscribe

The client lists the events with `events/list`, then subscribes to each with `events/subscribe`, giving its own HTTPS callback URL and a `whsec_` signing secret. Before it accepts a new callback, Pomerado sends it a signed challenge that it must echo back.

* Without arguments, a subscription covers every job you start through that client. Pass `job_id` to follow one job.
* A subscription lasts up to 24 hours; the client renews it by subscribing again. A renewal with a new secret signs with both for 24 hours.
* Each member can hold up to 20 subscriptions; each event and callback counts as one.

## Handle events

The events are the same five that [webhooks](/guides/notifications/webhooks) send: `job.needs_input`, `job.input_expiring`, `job.succeeded`, `job.failed` and `job.repairing`. Deliveries are signed and retried the same way, in this shape:

```json theme={null}
{
  "eventId": "evt_5f0c9a1e7d3b4c2a8e6f1d0b9c7a5e3f",
  "name": "job.needs_input",
  "timestamp": "2026-10-05T21:14:03.000Z",
  "data": {
    "job_id": "job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
    "job_kind": "run",
    "origin": "mcp",
    "request_id": "req_22222222222242228222222222222222",
    "request_version": 1,
    "question_types": ["choice"],
    "expires_at": "2026-10-05T21:24:03.000Z",
    "protected_input_url": "https://app.pomerado.ai/input/jobs/0f8e2d1c-4b3a-49e8-a7f6-e5d4c3b2a190"
  },
  "cursor": null
}
```

## Act on an event

* On `job.needs_input`, [answer the question](/guides/jobs/answer-questions) with `answer_job`, or give the person `protected_input_url` for a secret or login.
* On `job.succeeded`, read the result with `get_job` within 60 minutes. The first read delivers it.
* On `job.failed`, check `possible_commit` before running a write again.
* On `job.repairing`, keep following the run with `get_job` until `maintenance.deadline_at`.

Events carry no answers, secrets or results. An event may arrive late or more than once, with the same `eventId`.

<Note>
  A subscription covers only the jobs you start through that client. To hear about every job you start, from any client, use a [webhook](/guides/notifications/webhooks).
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.