MCP Events
MCP Events permette a un client MCP di sapere cosa succede in Bird senza polling. Il tuo client si iscrive a un evento, ad esempio un'email in arrivo in una casella di posta, e il server Bird MCP ospitato invia ogni evento corrispondente a un URL di callback di proprietà del client. Il client attiva il tuo agente con l'evento, e l'agente agisce con gli strumenti di Bird.
MCP Events implementa l'estensione MCP triggers and events con consegna via webhook. Il tuo client MCP gestisce il protocollo: lo colleghi a mcp.bird.com e gli chiedi di monitorare qualcosa. ChatGPT lo supporta.
Prima di iniziare
- Collega il tuo client al server ospitato su
https://mcp.bird.com/o al suo endpoint/dynamic. L'endpoint/publice il server localebird mcpnon servono MCP Events. - Accedi con un account che può gestire i webhook. Ogni iscrizione richiede lo scope
webhooks:writee lo scope di lettura del suo evento, che il client richiede al momento dell'accesso. - Usa un client che supporta l'estensione e la sua modalità di consegna via webhook.
Eventi a cui puoi iscriverti
| Evento | Scope di lettura | Filtri |
|---|---|---|
email_mailbox.message_received | mailbox:read | mailbox_id, thread_id |
email.delivered | emails:read | broadcast_id |
sms.received | sms:read | to, un tuo numero in formato E.164 |
whatsapp.received | whatsapp:read | nessuno |
amb.received | amb:read | nessuno |
events/list restituisce gli eventi a cui il tuo accesso può iscriversi, ciascuno con i propri filtri e lo schema del payload. Un filtro restringe la sottoscrizione a una singola risorsa: mailbox_id impostato su mbx_… consegna solo la posta che arriva in quella casella. Un evento senza filtri consegna ogni occorrenza nello spazio di lavoro.
Dopo aver creato una casella di posta tramite il server MCP, la risposta suggerisce di iscriversi alla sua posta, con l'evento e mailbox_id già compilati.
Come funziona una sottoscrizione
- Sottoscrizione. Il client chiama
events/subscribecon l'evento, i suoi filtri, un URL di callback e un signing secret proprio (whsec_…). - Verifica. Prima di creare qualsiasi cosa, inviamo un
{"type":"verification","challenge":"…"}firmato al callback. Il callback deve rispondere con un2xxil cui body JSON ripetechallenge, entro 4 secondi. - Ricezione. Ogni evento corrispondente arriva come
POSTal callback, firmato con il secret del client. - Rinnovo. Una sottoscrizione dura fino al suo tempo
refreshBefore, al massimo 24 ore e almeno 5 minuti rispetto alttlMssuggerito dal client. Chiamare di nuovoevents/subscribecon lo stesso evento, gli stessi filtri e lo stesso callback la rinnova sul posto. Un nuovo signing secret sostituisce il precedente una volta che il callback lo verifica, e il vecchio continua a firmare per 5 minuti. - Fine. Il client chiama
events/unsubscribe, oppure smette di rinnovare e la sottoscrizione scade.
Sottoscrivere di nuovo dallo stesso accesso con lo stesso evento, gli stessi filtri e lo stesso callback è idempotente: rinnova la sottoscrizione esistente anziché crearne un'altra.
Consegne
Ogni consegna è una richiesta Standard Webhooks:
webhook-idcontiene l'ID dell'evento, così il client può scartare un duplicato.webhook-timestampewebhook-signaturefirmano il body con il secret del client.X-MCP-Subscription-Ididentifica la sottoscrizione, così il client può selezionare il proprio secret prima di leggere il body.
Il body è {"eventId", "name", "timestamp", "data", "cursor": null}, dove data è il payload dell'evento come descritto da events/list. Non conserviamo uno storico riproducibile, quindi cursor è sempre null.
Un body è al massimo 256 KiB. Un evento amb.received che supererebbe questa dimensione ha il testo del messaggio troncato a un confine di carattere e include body_truncated: true; il client recupera il messaggio completo con amb_get. Qualsiasi altro evento che supererebbe il limite non viene inviato.
Una consegna non riuscita viene riprovata otto volte nell'arco di circa otto ore, quindi un evento su cui il tuo agente agisce non è obsoleto quando arriva. Se il callback risponde 410 Gone o 413 Content Too Large, scartiamo quel singolo evento e manteniamo la sottoscrizione. Le consegne non riuscite non mettono mai in pausa una sottoscrizione: termina quando scade il suo lease.
Quando una sottoscrizione termina
Una sottoscrizione termina quando il client annulla l'iscrizione, quando scade, o quando qualcuno la elimina in Bird, dalla lista Webhooks della dashboard o tramite le API. Eliminarla interrompe le consegne immediatamente, ma il client non viene avvisato: finché detiene ancora la sottoscrizione, la ricrea al rinnovo successivo, verificando di nuovo il proprio callback. Per interrompere una sottoscrizione definitivamente, rimuovila anche dal client.
Se l'accesso associato a una sottoscrizione viene revocato, o perde lo scope di lettura dell'evento, interrompiamo le consegne e la sottoscrizione scade entro il suo lease.
Visualizza le tue sottoscrizioni
Ogni sottoscrizione è un endpoint webhook nel tuo spazio di lavoro. La lista Webhooks nella dashboard mostra ciascuna con il logo del client, il suo evento e i suoi filtri, e puoi eliminarla da lì. Le sottoscrizioni concorrono al limite di endpoint webhook della tua organizzazione.
Risoluzione dei problemi
| Errore | Significato | Cosa fare |
|---|---|---|
-32015 CallbackEndpointError | La verifica del callback è fallita. data.reason è connection_refused, timeout, tls_error, http_4xx, http_5xx o challenge_failed. | Rendi il callback raggiungibile pubblicamente tramite HTTPS e fai in modo che restituisca challenge entro 4 secondi. |
-32013 con data.limit: "subscriptions" | L'organizzazione non ha più endpoint webhook disponibili. | Elimina un endpoint che non ti serve più, poi sottoscrivi di nuovo. |
-32013 con data.limit: "rate" | Troppe verifiche del callback in poco tempo. | Attendi, poi riprova con la stessa richiesta. |
-32012 | L'accesso non ha lo scope di lettura dell'evento o webhooks:write. data.required indica quello mancante. | Accedi di nuovo e concedilo. |
-32602 | Un filtro non previsto dall'evento, o un callback che non è HTTPS. | Usa i filtri restituiti da events/list. |
Passaggi successivi
- Instrada i messaggi al tuo agente AI invia i messaggi in entrata a Claude Managed Agents o Grok Bot tramite un connettore, senza MCP.
- Webhook ed eventi tratta la verifica della firma e il catalogo degli eventi.
- Il server MCP elenca gli strumenti con cui il tuo agente opera.
Risorse correlate
Continua con la documentazione, le guide e gli esempi per questo argomento.