2026-07-28). An MCP client subscribes to an event once,
and Enginy then pushes every matching occurrence to the client — so an agent can triage a reply or follow up on an
accepted connection request the moment it happens, instead of polling the inbox.
In ChatGPT this powers automations such as “When a prospect replies, summarize the thread and draft an answer”:
ChatGPT discovers the events below, subscribes on your behalf and runs your instructions for each event.
Available events
Every event accepts one optional filter,
campaignId, to receive events from a single campaign only.
Each payload carries the same contact and campaign objects as workspace webhooks,
plus a conversationId (and, for message.replied, messageId and messageType) so the agent can open the thread
or reply with the inbox tools.
When a contact is in several campaigns on the same LinkedIn or InMail thread (for example an archived campaign and
its rerun), a reply is sent once, naming the conversation you can open and, with a campaignId filter, the
conversation in that campaign. If that is not the conversation the reply was first recorded on, messageId is null;
read the conversation to get the message.
Who can use events
- OAuth connections only. Events belong to the person who connected the MCP client. Sessions authenticated
with a static API key, and sessions with an active readonly impersonation, do not
advertise the
eventscapability. - Scope: the connection needs
MESSAGING_READ, and the workspace MCP policy must allow it. - Row-level access is enforced per event. A user restricted to specific identities only receives events for
conversations they can see in the app, and a
campaignIdfilter must be a campaign they can see. - Access is re-checked before every delivery attempt, including events already queued or being retried: revoking the MCP connection, deactivating the user, losing access to the conversation, or pausing the workspace MCP policy stops delivery immediately. A subscription made while switched to another account through a multi-user account also stops if the connecting user or their own workspace loses MCP access, or their permission to switch accounts is revoked.
Delivery details
For client developers implementing the receiving side:- Methods:
events/list,events/subscribe(webhook delivery only) andevents/unsubscribe. The server declarescapabilities.eventsonserver/discover. - Verification: before a subscription activates, Enginy POSTs
{"type":"verification","challenge":"…"}to the callback URL; the endpoint must answer2xxwith{"challenge":"…"}. A callback verified with the same secret is not re-challenged for 24 hours; a new or rotated secret is always challenged again. - Signing: every request follows Standard Webhooks —
webhook-id(theeventId),webhook-timestamp,webhook-signature(HMAC-SHA256 with thewhsec_secret fromevents/subscribe) andX-MCP-Subscription-Id. After a secret rotation, requests are signed with both the new and the previous secret for 15 minutes. - Retries: failed deliveries are retried with exponential backoff for about two hours with the same
eventId. Only410 Goneand413are treated as final: they are not retried, and410deactivates the subscription until the client subscribes again. - Limits: callback URLs must be public
httpsURLs (no redirects are followed); up to 50 active subscriptions and 20 callback verifications per hour per user; subscriptions expire after the grantedrefreshBefore(default 7 days, at most 30) unless refreshed; event bodies stay under 256 KiB (long message bodies are truncated and flagged withcontentTruncated). - No replay: events are not replayable;
cursoris alwaysnull.
MCP Events and workspace webhooks are fed by the same activity. Webhooks
are configured by a workspace admin for a system integration; events are subscribed per user by an MCP
client.