Service eligibility and regional restrictions
PuppyIP serves only compliant overseas businesses and their authorized personnel. Proxy services are not available in mainland China. The service may only be used for lawful business activities outside mainland China. Use of this service within mainland China is prohibited.
Hosting a proxy IP or server overseas does not change these restrictions. The service must not be provided to end users in mainland China through relaying, forwarding, sharing or resale. Before use, read the Terms of Service.
Key Takeaways
- At DevDay on September 29, 2026, US time, OpenAI announced Plugin Extensions and support for the proposed MCP Events specification. The recap labels both for all plans, but actual account and client entry points still need checking.
- ChatGPT's MCP Events integration requires MCP 2.0 protocol version 2026-07-28. It supports webhooks and callback verification, not polling, streaming or the draft gap/terminated notifications.
- Declare events through server/discover and expose events/list, events/subscribe and events/unsubscribe at the authenticated MCP endpoint. Filter discovery and subscriptions by the user's permissions.
- Verify the HTTPS callback before activating a subscription. Use Standard Webhooks signatures, a stable eventId and X-MCP-Subscription-Id. Handle repeated subscriptions, retries and out-of-order delivery idempotently.
- Plugin sidebars, panels and file viewers are interface extensions. MCP Events provides triggers. Existing Gmail/Slack/GitHub tasks are separate from implementing your own event server.
Plugin Extensions and MCP Events have different scopes
The DevDay 2026 official recap lists Plugin Extensions and MCP Events separately, both labeled for all plans. Extensions add sidebar homepages, interactive panels and file viewers. MCP Events lets users choose connected-app events and run ChatGPT automation according to their instructions when those events arrive. The recap calls the specification proposed; it is not evidence of a finalized standard.
The extensions docs still say Free and Go web experiences are coming soon and composer mentions are desktop-only. The all-plans label does not replace checking each client and account. This guide covers developing an event-enabled plugin, not enabling existing Gmail, Slack or GitHub tasks, whose plan and administrator requirements are covered in the event-triggered shared tasks guide.
Prepare MCP 2.0, durable subscriptions and outbound HTTPS
The implementation docs require MCP 2.0 version 2026-07-28, persistent subscriptions and outbound HTTPS to callback URLs. Current ChatGPT integration supports webhook delivery and callback verification; polling, streaming and draft gap/terminated control notifications are unsupported. Start with a low-impact event such as comment.created on a test document rather than all organization messages.
Define the owner, filters, minimum data and retention. Comment text is application data, not a system instruction to change agent behavior. Any later PR creation or app writeback must fit user authorization, least privilege and human review. A proxy affects safe callback connectivity, not protocol version, plugin eligibility or application permissions.
Step 1: publish the event catalog and filters
Declare events in server/discover capabilities and implement events/list, events/subscribe and events/unsubscribe at the same authenticated MCP endpoint as tools. events/list returns stable names, webhook delivery, subscription inputSchema and delivery payloadSchema. Provide filters such as document_id and actually enforce them server-side. Follow nextCursor/cursor for catalog pagination.
Expose only events the connected account may discover. Recheck event and object permissions before subscribing; guessing document_id must not grant monitoring. Later reads and writes still require the original app authorization. If events are absent from the plugin page, check discovery, listing, authentication and rescanning before changing DNS or proxies.
Step 2: create subscriptions and verify callbacks
events/subscribe supplies an event name, filters, webhook URL and whsec_ secret. Validate the event and parameters and confirm the secret's Base64 payload decodes to 24–64 bytes. Persist its owner, filters, callback, secret and expiry. Derive a stable subscription ID from identity, callback, event and normalized JSON parameters, so a retry refreshes the same subscription rather than creating another listener.
Before delivery, send a signed, short-lived one-time challenge to the HTTPS callback and require 2xx with the same challenge. On failure return the documented -32015 CallbackEndpointError. Resolve and validate target addresses, reject local/private addresses and do not follow redirects. Validate TLS against the original hostname. These controls prevent internal-network access and separate callback verification failures from event delivery failures.
Step 3: sign deliveries, acknowledge and unsubscribe
For matching filters, send an object with eventId, name, timezone-qualified ISO 8601 timestamp, data and cursor; business fields belong in data. Sign the exact body bytes with Standard Webhooks and include webhook-id, webhook-timestamp, webhook-signature and X-MCP-Subscription-Id. The maximum request body is 256 KiB. For large records send a summary and a tool for reading the original. Never put secrets or private user data in public logs.
Callback 2xx confirms receipt; ChatGPT processes asynchronously afterward. Retry transient failures with bounded backoff, preserving eventId and refreshing the signature timestamp and signature. Do not retry 410 or 413. Delivery may be out of order; write-capable tools need stable idempotency keys. On events/unsubscribe, verify ownership and stop delivery. Disconnecting an account or revoking object access must invalidate old subscriptions as well.
Step 4: verify the complete flow in a test conversation
Connect your development server according to the official connection guide and confirm events and tools are listed. In a new chat, request monitoring of a test object. Confirm events/subscribe arrives, the challenge passes and the subscription is saved. Create a matching app event, check webhook 2xx and the expected ChatGPT data. Create a nonmatching event and confirm no delivery, then cancel monitoring and confirm events/unsubscribe takes effect.
Also check repeated subscriptions, refresh after restart, lost object permissions, invalid signatures, duplicate eventId, event batches and writeback feedback loops. For verification errors inspect challenge, TLS, address validation and secret. If receipt produces no expected action, inspect filters, instructions, permissions and asynchronous state. Investigate networking only with DNS, TLS or timeout evidence; the connection troubleshooting guide explains the layers.
Launch criteria and unresolved availability
As of September 30, 2026 in Shanghai time, implementation and test docs were public and the recap listed all plans. This does not prove all accounts, regions, clients and workspaces expose the same entry points. The extensions docs retain Free/Go web coming soon and desktop-only mentions. Check release stage, any separate event review requirements and the specific account through its plugin page, submission feedback and later official updates.
Before launch, retain redacted evidence of the test account, plugin/MCP versions, schemas, filters, callback verification, signatures, retry logs and stopped delivery after revocation. Do not expand a deployment exposing unauthorized objects, unstable callback verification or duplicate writeback. A DevDay announcement does not waive these checks. The DevDay overview covers the broader announcements and preview stages.
Sources
Frequently Asked Questions
Is MCP Events a finalized standard?
No. The recap calls it a proposed specification. ChatGPT's current docs support webhooks and callback verification, but not draft polling, streaming, gap or terminated notifications.
Must I implement events/subscribe to use existing Gmail, Slack or GitHub tasks?
No. This guide is for your own plugin and MCP server. Existing event tasks come through ChatGPT Work and supported apps, with their own plan, administrator and connection requirements.
Why are my events missing from the plugin page?
Check MCP 2.0, the discovery events capability, authenticated events/list, permissions and rescanning, then the account and client entry point.
Why does a successful subscription not trigger automation?
Check filters, expiry, callback challenge, HTTPS/TLS, signatures, 2xx receipt and asynchronous execution. 2xx proves webhook receipt, not completion of the later action.
Can webhook retries cause duplicate processing?
Duplicates and out-of-order delivery are possible. Preserve eventId on retry and make external writes idempotent with stable keys. Do not retry 410 or 413.
Can every plan use extensions and events on the web now?
The recap labels both for all plans, but extensions docs still mark Free/Go web coming soon and mentions desktop-only. Verify the actual account, entry point and review state.