Let your AI agent receive and debug webhooks
Webhook Toolkit speaks the Model Context Protocol. Plug it into Claude Code, Cursor, VS Code, Windsurf, Codex or ChatGPT and your agent can create a webhook URL, trigger the integration, wait for the delivery and read it — without you copy-pasting payloads.
https://webhook-toolkit.com/mcp
Install
Claude Code
claude mcp add --transport http webhook-toolkit https://webhook-toolkit.com/mcp # with your account (permanent URLs, AI quota): claude mcp add --transport http webhook-toolkit https://webhook-toolkit.com/mcp --header "Authorization: Bearer whk_…" # or local stdio (can reach localhost): claude mcp add webhook-toolkit -- npx -y webhook-toolkit mcp
Cursor
{
"mcpServers": {
"webhook-toolkit": {
"url": "https://webhook-toolkit.com/mcp",
"headers": { "Authorization": "Bearer whk_…" }
}
}
}VS Code (GitHub Copilot agent mode)
{
"servers": {
"webhook-toolkit": { "type": "http", "url": "https://webhook-toolkit.com/mcp" }
}
}Windsurf, Codex CLI and other stdio clients
{
"mcpServers": {
"webhook-toolkit": {
"command": "npx",
"args": ["-y", "webhook-toolkit", "mcp"],
"env": { "WEBHOOK_TOOLKIT_KEY": "whk_…" }
}
}
}ChatGPT and Claude.ai
Add a custom connector with the URL https://webhook-toolkit.com/mcp and no authentication. To use your account, append ?key=whk_… to the URL (keep that URL private).
Tools
| create_webhook_url | Create a public URL that captures any request (any method, any sub-path). |
| wait_for_webhook | Block until the next request arrives (up to 50 s per call), then return it in full. |
| list_webhook_requests / get_webhook_request | Read captured requests: headers, raw body, detected sender and event. |
| set_webhook_response | Choose what the URL answers (status, body, content type) — e.g. 500 to test retries. |
| replay_webhook_request | Re-send a captured request to a URL (the local npx server can target localhost). |
| sign_webhook_payload | Build a payload with a valid Stripe, GitHub, Shopify, Slack, Twilio or Mailgun signature. |
| verify_webhook_signature | Check a signature and explain why it fails (secret, re-serialized body, timestamp, URL). |
| explain_webhook_request | AI analysis of a request, or a complete handler in Node, Next.js, Python, PHP, Go or Ruby. |
| list_webhook_urls | List the URLs of your account (with an API key). |
Example session
Create a webhook URL and set it as the endpoint of my Stripe test webhook. Then run `stripe trigger checkout.session.completed`, wait for the webhook and check that src/app/api/stripe/route.ts verifies the signature correctly.
The agent calls create_webhook_url, updates the Stripe dashboard or CLI, calls wait_for_webhook, reads the Stripe-Signature header and the raw body, and runs verify_webhook_signature against your secret before touching your code.
Plans
All tools work anonymously. An API key from a free account makes URLs permanent. AI analyses beyond the 3 trials, 25 URLs and 30-day history come with the 7-day Pass (€5) or Pro (€9/month). Source of the npx server: GitHub.
Questions fréquentes
Remote server or npx: which one should I use?
Use the remote server (https://webhook-toolkit.com/mcp) for ChatGPT, Claude.ai and any client that supports Streamable HTTP — nothing runs on your machine. Use npx -y webhook-toolkit mcp (stdio) when the agent must reach localhost: replay_webhook_request and send_signed_webhook then run from your computer.
Do I need an API key?
No. Without a key, URLs are anonymous and expire after 7 days. With a key (free account, dashboard → API keys) the URLs are permanent and list_webhook_urls works. Paid plans add AI analyses and more URLs.
What can I ask my agent?
For example: “Create a webhook URL, configure it as the GitHub webhook of this repo, push a commit and show me the payload”, or “Why does my Stripe handler reject this event? Verify the signature with whsec_…”, or “Write a FastAPI handler for the last webhook we received”.
Is the data sent to the model?
Only what the agent reads through the tools. The captured request stays on webhook-toolkit.com; the agent sees it when it calls get_webhook_request or wait_for_webhook. Large bodies are truncated to 20 KB in tool results.