Webhook URLs for AI agents: receive, wait for, replay, sign and verify webhooks (Stripe, GitHub…).
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: Bearer <webhook-toolkit.com API key>
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a public HTTPS URL that captures every request sent to it (any method, any sub-path). Use it when you need an endpoint to receive a webhook from a third-party service while building or debugging an integration. Returns the URL to configure in the service and a live inspector link for the human.
Label, e.g. 'stripe-test'
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Create a public HTTPS URL that captures every request sent to it (any method, any sub-path). Use it when you need an endpoint to receive a webhook from a third-party service while building or debugging an integration. Returns the URL to configure in the service and a live inspector link for the human.
| Argument | Type | Description |
|---|---|---|
| name | string | Label, e.g. 'stripe-test' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"maxLength": 60,
"description": "Label, e.g. 'stripe-test'"
}
}
}AI analysis of a captured request. mode=explain: who sent it, which event, key fields, how to verify the signature, pitfalls. mode=handler: complete receiving code that verifies the signature and handles this event. Included in paid plans; anonymous and free users get 3 trials.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| token* | string | |
| language | string | Handler language (mode=handler). Default node. |
| request_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token",
"request_id"
],
"properties": {
"mode": {
"enum": [
"explain",
"handler"
],
"type": "string"
},
"token": {
"type": "string"
},
"language": {
"enum": [
"node",
"nextjs",
"python",
"php",
"go",
"ruby"
],
"type": "string",
"description": "Handler language (mode=handler). Default node."
},
"request_id": {
"type": "string"
}
}
}Return one captured request in full (headers, raw body, detected provider/event).
| Argument | Type | Description |
|---|---|---|
| token* | string | |
| request_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token",
"request_id"
],
"properties": {
"token": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}List the most recent requests captured by a webhook URL, newest first (summaries; use get_webhook_request for one full request).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 10 |
| token* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10"
},
"token": {
"type": "string"
}
}
}List the webhook URLs of the account behind the API key (requires an API key).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Re-send a captured request (same method, headers and raw body) to a PUBLIC URL and return the target's response. Localhost and private IPs are refused here: for localhost use the CLI (`npx webhook-toolkit replay`) or the local MCP server (`npx webhook-toolkit mcp`).
| Argument | Type | Description |
|---|---|---|
| token* | string | |
| request_id* | string | |
| target_url* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token",
"request_id",
"target_url"
],
"properties": {
"token": {
"type": "string"
},
"request_id": {
"type": "string"
},
"target_url": {
"type": "string",
"format": "uri"
}
}
}Choose what the webhook URL answers to callers (status code, body, content type) — e.g. return 500 to test the sender's retries, or a specific JSON/XML body the service expects.
| Argument | Type | Description |
|---|---|---|
| body | string | |
| token* | string | |
| status | integer | |
| content_type | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token"
],
"properties": {
"body": {
"type": "string",
"maxLength": 10000
},
"token": {
"type": "string"
},
"status": {
"type": "integer",
"maximum": 599,
"minimum": 100
},
"content_type": {
"type": "string",
"maxLength": 120
}
}
}Build a webhook body with a VALID signature header for a provider, to test a handler's signature verification without triggering a real event. Providers: stripe, github, shopify, slack, twilio, mailgun. Returns the headers, the exact body to send and a ready-to-run curl command.
| Argument | Type | Description |
|---|---|---|
| secret* | string | The webhook signing secret configured in your handler (whsec_… for Stripe) |
| payload | string | JSON payload (or form fields as JSON for Twilio). Default: a realistic sample event. |
| provider* | string | |
| event_type | string | Sample event to use when no payload is given, e.g. checkout.session.completed |
| target_url | string | Handler URL (required for Twilio, whose signature covers the URL) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"provider",
"secret"
],
"properties": {
"secret": {
"type": "string",
"description": "The webhook signing secret configured in your handler (whsec_… for Stripe)"
},
"payload": {
"type": "string",
"description": "JSON payload (or form fields as JSON for Twilio). Default: a realistic sample event."
},
"provider": {
"enum": [
"stripe",
"github",
"shopify",
"slack",
"twilio",
"mailgun"
],
"type": "string"
},
"event_type": {
"type": "string",
"description": "Sample event to use when no payload is given, e.g. checkout.session.completed"
},
"target_url": {
"type": "string",
"description": "Handler URL (required for Twilio, whose signature covers the URL)"
}
}
}Check whether a webhook signature is valid for a raw body and a secret, and diagnose why it fails (wrong secret, whitespace, re-serialized JSON body, expired timestamp, wrong URL for Twilio). Providers: stripe, github, shopify, slack, twilio.
| Argument | Type | Description |
|---|---|---|
| url | string | Twilio only: the full URL Twilio called |
| secret* | string | |
| provider* | string | |
| raw_body* | string | The raw request body exactly as received |
| signature* | string | The signature header value (Stripe-Signature, X-Hub-Signature-256, X-Shopify-Hmac-Sha256, X-Slack-Signature, X-Twilio-Signature) |
| timestamp | string | Slack only: X-Slack-Request-Timestamp |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"provider",
"secret",
"raw_body",
"signature"
],
"properties": {
"url": {
"type": "string",
"description": "Twilio only: the full URL Twilio called"
},
"secret": {
"type": "string"
},
"provider": {
"enum": [
"stripe",
"github",
"shopify",
"slack",
"twilio"
],
"type": "string"
},
"raw_body": {
"type": "string",
"description": "The raw request body exactly as received"
},
"signature": {
"type": "string",
"description": "The signature header value (Stripe-Signature, X-Hub-Signature-256, X-Shopify-Hmac-Sha256, X-Slack-Signature, X-Twilio-Signature)"
},
"timestamp": {
"type": "string",
"description": "Slack only: X-Slack-Request-Timestamp"
}
}
}Block until the next request reaches a webhook URL (or the timeout elapses), then return it in full: method, path, headers, body, detected provider and event. Use right after triggering an action that should send a webhook. Call again with `after` set to the last request's createdAt to wait for the following one.
| Argument | Type | Description |
|---|---|---|
| after | string | ISO timestamp: only requests strictly newer than this. Default: now. |
| token* | string | Token of the webhook URL (the part after /r/) |
| timeout_seconds | integer | Default 30, max 50 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"token"
],
"properties": {
"after": {
"type": "string",
"description": "ISO timestamp: only requests strictly newer than this. Default: now."
},
"token": {
"type": "string",
"description": "Token of the webhook URL (the part after /r/)"
},
"timeout_seconds": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 30, max 50"
}
}
}