{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_4qzbkd7jg3qm","handle":"webhook-studio","url":"https://wellknown.network/agents/webhook-studio","links":{"self":"https://wellknown.network/agents/webhook-studio/record.json","html":"https://wellknown.network/agents/webhook-studio","markdown":"https://wellknown.network/agents/webhook-studio/record.md","api":"https://wellknown.network/api/v1/agents/webhook-studio","status":"https://wellknown.network/api/v1/agents/webhook-studio/status","claim":"https://wellknown.network/agents/webhook-studio/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/webhook-studio/claim.json","badge":"https://wellknown.network/agents/webhook-studio/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/webhook-studio/history","tools":"https://wellknown.network/api/v1/agents/webhook-studio/tools"},"ard":{"identifier":"urn:air:webhook-studio.com:server:webhook-studio","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Webhook Studio","summary":"Keyless webhook endpoints: capture, wait, replay, forward, and generate types from real traffic.","description":"Keyless webhook endpoints: capture, wait, replay, forward, and generate types from real traffic.","publisher":{"name":"com.webhook-studio","url":null},"homepage":"https://webhook-studio.com/mcp/setup","repository":"https://github.com/lestertww/webhookstudio","version":"0.1.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://webhook-studio.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-21T13:56:18.389195Z","publishedAt":"2026-08-21T13:56:18.389195Z","registryName":"com.webhook-studio/webhooks"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.notifications","name":"Notifications","confidence":1,"provenance":"derived"},{"slug":"productivity.hr","name":"HR & Recruiting","confidence":0.554,"provenance":"derived"}],"categories":["communication","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 40m ago.","lastOkAt":"2026-10-10T01:24:55.665Z","lastProbedAt":"2026-10-10T01:24:55.665Z","statusComputedAt":"2026-10-10T01:26:08.001Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":112,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":110,"ok":110,"authBoundaryOk":0,"serviceOk":110,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T01:24:55.665Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":180,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T18:26:26.399Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":104,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T12:28:39.679Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":106,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T05:26:56.690Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T23:23:30.103Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":103,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T17:27:26.101Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":102,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T10:24:59.009Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":94,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T04:26:17.688Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":96,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T22:23:38.750Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":96,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T15:31:10.142Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"toolCount":17,"toolsHash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","serverName":"webhook-studio","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}}],"tools":[{"name":"create_bucket","description":"Provision a new webhook endpoint (a \"bucket\") that captures incoming HTTP requests. Returns its id, public ingest url to point a provider at, inbox_url (the liv"},{"name":"list_buckets","description":"List your webhook endpoints. Pass external_ref to fetch the specific bucket you created earlier under that name — this is how you re-anchor after losing the con"},{"name":"get_bucket","description":"Fetch one webhook endpoint by id, including its url and inbox_url."},{"name":"delete_bucket","description":"Permanently delete a webhook endpoint and its captured events."},{"name":"latest_event","description":"Get the single most recent event captured by a bucket, optionally filtered by provider and event type. Returns one event with its headers, body and delivery res"},{"name":"list_events","description":"List events captured by a bucket, newest first, with composable filters: since/until (ISO 8601 or YYYY-MM-DD), provider, type, method, signature_valid, and q (c"},{"name":"get_event","description":"Fetch one captured event by id with its full headers, body, signature verification result (and failure reason), and every outbound delivery attempt. This is how"},{"name":"wait_for_event","description":"Block until the next matching event arrives on a bucket, or until the timeout. Use this to turn \"go click Send test webhook in Stripe\" into a synchronous step: "},{"name":"replay_event","description":"Re-send a captured event to any URL — the test runner for a handler you just wrote. preserve_headers defaults to true so the original signature header (e.g. Str"},{"name":"forward_bucket","description":"Set up standing forwarding from a bucket to a URL. Pass forward_all:true to forward every event, or condition_tree to forward only matching events (same AND/OR "},{"name":"list_deliveries","description":"List outbound delivery attempts for a bucket, newest first, with the full request and response of each. Pass success:false to see only failures — the direct ans"},{"name":"configure_verification","description":"Turn on HMAC signature verification for a bucket using the provider's own signing secret (e.g. Stripe's whsec_). This is how you finish a \"verified webhook\" int"},{"name":"list_schemas","description":"List the payload schemas Webhook Studio has learned from this account's real traffic, optionally filtered by provider and event_type. These outlive the payloads"},{"name":"get_schema","description":"Fetch one learned schema with every field, its type, whether it is optional, and how often it actually appears — the real shape of the payload, derived from wha"},{"name":"diff_schema","description":"Compare two versions of a learned schema and get exactly which fields were added, removed or changed type, each flagged as breaking or not. This is the \"why did"},{"name":"generate_types","description":"Generate types, a runtime validator, or a full handler from a learned schema — the payoff of the knowledge layer. Everything is derived from the payloads this a"},{"name":"find_correlation_keys","description":"List the correlation-key candidates for a learned schema — the fields that look like identifiers (e.g. data.object.id), ranked by how consistently they appear. "}],"package":null,"toolSurface":{"id":"ts_3cx4bdxdh58v","endpointId":"ep_qc7spd68gcc4","hash":"37ee129d99fa982885900019947228c508dae72abbfd2e7cc6dd380b8e5251c1","toolCount":17,"serverName":"webhook-studio","serverVersion":"0.1.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T12:26:36.463Z","lastSeenAt":"2026-10-10T01:24:55.674Z","observations":102,"toolNames":["create_bucket","list_buckets","get_bucket","delete_bucket","latest_event","list_events","get_event","wait_for_event","replay_event","forward_bucket","list_deliveries","configure_verification","list_schemas","get_schema","diff_schema","generate_types","find_correlation_keys"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_qc7spd68gcc4","url":"https://webhook-studio.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-06T12:27:35.279Z","auth":{"observedAt":"2026-10-06T12:27:35.413Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-06T12:27:35.430Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"webhook-studio.com","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-14T12:02:43.000Z","validTo":"2026-12-13T12:02:42.000Z","daysToExpiry":64,"sanCount":1,"fingerprint256":"4C:01:A1:DA:A5:1D:05:89:EE:C8:20:27:1A:95:24:B0:EA:A1:4E:83:DB:1A:62:00:93:A7:5C:B3:6A:6A:43:15"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.webhook-studio/webhooks","url":"https://registry.modelcontextprotocol.io/v0/servers/com.webhook-studio%2Fwebhooks","firstSeenAt":"2026-09-05T22:18:28.034Z","fetchedAt":"2026-10-09T12:22:17.891Z","normalizedAt":"2026-10-09T12:22:17.891Z"}]},"firstSeenAt":"2026-09-05T22:18:28.034Z","updatedAt":"2026-10-10T01:27:03.069Z"}