Webhook MCP Server (@webhooks-cc/mcp)
Test webhooks and inbound email from Claude Code, Cursor, Codex, claude.ai and ChatGPT. 48 MCP tools, a remote server at webhooks.cc/mcp with one-click OAuth, a zero-key sandbox, and a Claude Code plugin.
Updated Nov 2026
There are two ways to connect an agent. Start with the remote server at https://webhooks.cc/mcp: any client that takes remote MCP servers can use it, coding agents such as Claude Code, Cursor, VS Code and Codex as well as claude.ai and ChatGPT, and you approve it once in the browser, with no key to paste and no code to type. The local server, @webhooks-cc/mcp, runs on your machine. Use it when the agent must send to localhost, for its prompts and resources, without an account (leave the key out and it starts in the agent sandbox), or in CI.
Remote server
https://webhooks.cc/mcp is the recommended way in. It serves the same tools over streamable HTTP. There is nothing to install and no key to paste: you approve the connection once in your browser. It speaks the MCP 2026-07-28 revision (stateless, with server/discover and a cached tool list), and the stateless fallback for clients still on the 2025 revisions.
Add it to your client
Client menus change, so treat these paths as a guide.
Claude Code:
claude mcp add -s user --transport http webhooks-cc https://webhooks.cc/mcpThen run /mcp in Claude Code and pick webhooks-cc to sign in. -s user adds the server for every project; leave it out to add it to the current one only.
Codex:
codex mcp add webhooks-cc --url https://webhooks.cc/mcpCodex opens your browser to sign in. If it does not, run codex mcp login webhooks-cc.
Cursor (.cursor/mcp.json):
{ "mcpServers": { "webhooks-cc": { "url": "https://webhooks.cc/mcp" } } }VS Code (.vscode/mcp.json):
{ "servers": { "webhooks-cc": { "type": "http", "url": "https://webhooks.cc/mcp" } } }claude.ai and Claude Desktop: in Settings, Connectors, add a custom connector with the URL https://webhooks.cc/mcp.
ChatGPT: add https://webhooks.cc/mcp as a custom connector (in developer mode).
Tools from a server you add during a session appear once the client reconnects to it or restarts.
Connecting
The first time the client connects to the server, it opens webhooks.cc in your browser. Sign in, or sign up, check which app asks and where it will send you back to, and click Connect. There is no code to type. The app can then use your endpoints and what they capture, but never your API keys, billing or account settings. Its tokens renew themselves and stop working after 90 days unused; Apps connected with OAuth has the details.
To disconnect, open Account, Connected agents. The app is listed there as an app connected with OAuth, and its access stops as soon as you disconnect it. An account can connect up to 10 agents and apps.
A client that can send headers can skip the browser and use an API key from your API keys page instead:
claude mcp add -s user --transport http webhooks-cc https://webhooks.cc/mcp --header "Authorization: Bearer whcc_..."What differs from the local server
- 46 tools.
send_toandreplay_requestare left out: they post to a URL you name, and a hosted server cannot reach your machine. For the same reasonrender_emailandtest_webhook_flowrefusetargetUrl. To send to localhost, use the local server orwhk tunnel. - Waits are capped at 50 seconds.
wait_for_request,wait_for_emailand the other tools with atimeoutreturn by then; call them again to keep waiting. - Tools only. The prompts and resources below come with the local server.
- An account is required. There is no sandbox on the remote server, and a sandbox token is refused.
Local server
The local server, @webhooks-cc/mcp, runs on your machine over stdio. Use it when the agent must send to localhost (send_to, replay_request, targetUrl), for the prompts and resources, without an account (it starts in the agent sandbox), or in CI with an API key.
Your API key
Paste your API key to fill it into every command below. It stays in your browser only. Nothing is sent or stored.
Get your key from your API keys page.
Claude Code plugin
Installs the MCP server together with the webhook testing skill, which tells Claude when to reach for it: payload types from real captures, signed test sends to your local handler, and email codes in tests. It runs the local server: Claude Code asks for your API key when you enable it; leave it empty to start in the keyless sandbox.
/plugin install webhooks-cc --marketplace kroqdotdev/webhooks-cc
Agent skill for Cursor, Codex, Copilot and others
The same skill for every agent that reads SKILL.md. Add the MCP server as well: the remote server above, or a local one below.
npx skills add kroqdotdev/webhooks-cc
More on what the skill does: Agent skill docs.
One-click install
Paste your key above first. It gets baked into the install link.
VS Code prompts you for your key during install.
Claude Code
claude mcp add -s user webhooks-cc -e WHK_API_KEY=whcc_... -- npx -y @webhooks-cc/mcp
Cursor (CLI)
npx @webhooks-cc/mcp setup cursor --api-key whcc_...
VS Code (CLI)
npx @webhooks-cc/mcp setup vscode --api-key whcc_...
OpenAI Codex
codex mcp add webhooks-cc -e WHK_API_KEY=whcc_... -- npx -y @webhooks-cc/mcp
Devin Desktop (formerly Windsurf)
npx @webhooks-cc/mcp setup devin --api-key whcc_...
Claude Desktop
npx @webhooks-cc/mcp setup claude-desktop --api-key whcc_...
Manual config
For any tool that reads an MCP config JSON file:
{
"mcpServers": {
"webhooks-cc": {
"command": "npx",
"args": ["-y", "@webhooks-cc/mcp"],
"env": {
"WHK_API_KEY": "whcc_..."
}
}
}
}Without an API key: the agent sandbox
Started without WHK_API_KEY, the local server still works. If you connected the agent to your account before, in an earlier session or from the CLI or an SDK, it starts with the full tools for your account. Otherwise it offers create_endpoint, list_endpoints, get_endpoint, delete_endpoint, list_requests, get_request, wait_for_request and generate_payload_schema with the same names and arguments as the full tools, backed by the agent sandbox: up to 3 temporary endpoints, 25 captured requests each and 100 in all, for 24 hours. The first create_endpoint registers the sandbox, which takes a few seconds of proof of work.
To get everything else, the agent connects to your account: connect_account with the email you sign in to webhooks.cc with returns a link and a 6-digit code, you sign in (or sign up) and enter the code, and wait_for_connection then swaps in the full tool set for your account, sandbox endpoints included. about_sandbox explains the limits without a network call.
The sandbox and the connection are saved in the agent credential file (~/.config/whk/agent.json on Linux; WHK_AGENT_FILE moves it), which the server shares with the CLI and the SDKs. A new session starts where the last one stopped, so you approve the agent once. The connection lasts 90 days; when you disconnect the agent under Account, Connected agents, the sandbox tools come back. Sandbox endpoints from an earlier session cannot move into your account, because only the process that registered holds the claim token: connect_account then connects through a new registration and says so, and those endpoints stay in the sandbox until they expire.
Setup works without a key too. npx @webhooks-cc/mcp setup cursor (or claude-code, vscode, codex, devin for Devin Desktop, formerly Windsurf, claude-desktop) writes the config without WHK_API_KEY; add --api-key whcc_... to start with your account's tools.
Registry and client support
@webhooks-cc/mcp is published on npm and indexed in the Model Context Protocol ecosystem so AI coding agents can discover and install it directly:
- npm package:
@webhooks-cc/mcp(npx -y @webhooks-cc/mcp) - Remote server:
https://webhooks.cc/mcp(streamable HTTP, OAuth), listed in the same registry entry - Official MCP Registry:
io.github.kroqdotdev/webhooks-cc, published with each release fromserver.json - Claude Code plugin: the server bundled with the webhook testing skill, installed with
/plugin install webhooks-cc --marketplace kroqdotdev/webhooks-cc - Glama: ships with
glama.jsonmetadata - Supported MCP clients: Claude Code, Cursor, VS Code (GitHub Copilot), OpenAI Codex, claude.ai, Claude Desktop, ChatGPT, and any client that takes remote MCP servers connect to the remote one; Claude Code (
claude mcp add webhooks-cc -- npx -y @webhooks-cc/mcp), Cursor, VS Code, OpenAI Codex, Devin Desktop (formerly Windsurf), and Claude Desktop also run the local server
Available tools
The local server exposes 48 tools your AI agent can call, and the remote server 46 of them. Without an API key or a saved connection, 11 sandbox tools are available (see above). The agent skill tells your agent when to use them, and the tool reference lists every argument.
Endpoint management
| Tool | Description |
|---|---|
create_endpoint | Create a new webhook endpoint |
list_endpoints | List all your endpoints |
get_endpoint | Get details for an endpoint by slug |
favorite_endpoint | Mark or unmark an endpoint as a favourite |
update_endpoint | Update an endpoint's name, mock response, signing, email fields or layouts |
preview_layouts | Dry-run the endpoint's layouts on a captured email |
preview_response | Show what a request would get back, unsent |
delete_endpoint | Delete an endpoint and its requests |
create_endpoints | Create multiple endpoints in one call (1-20) |
delete_endpoints | Delete multiple endpoints in one call (1-100) |
Sending and testing
| Tool | Description |
|---|---|
send_webhook | Send a test webhook (manual or provider template) to an endpoint |
send_to | Send a signed webhook directly to any URL (localhost, staging, etc.) |
preview_webhook | Preview a webhook request without sending it |
test_webhook_flow | Run a full test flow: create, mock, send, wait, verify, replay, cleanup |
Request management
| Tool | Description |
|---|---|
list_requests | List captured requests for an endpoint |
get_request | Get full details of a captured request |
wait_for_request | Wait for an incoming request (polling) |
wait_for_requests | Wait for multiple incoming requests |
search_requests | Search requests across endpoints with full-text search |
count_requests | Count requests matching filters |
clear_requests | Delete requests for an endpoint without deleting the endpoint |
Request analysis
| Tool | Description |
|---|---|
replay_request | Replay a captured request to a target URL |
compare_requests | Compare two requests and show structured differences |
generate_payload_schema | TypeScript, Zod, Pydantic, or JSON Schema from captured bodies |
extract_from_request | Extract specific JSON fields from a request body |
verify_signature | Verify the webhook signature on a captured request |
Emails
Every endpoint receives email at {slug}@mailhooks.cc, and at {slug}+{tag}@mailhooks.cc for any tag.
| Tool | Description |
|---|---|
list_emails | List an endpoint's emails with subject, sender, tag, code and link |
get_email | Get one email by ID, or the newest at an endpoint, with its code and link |
wait_for_email | Wait for an email to arrive (for example after a signup), then return it |
send_test_email | Deliver a sample email with a code and a link, optionally to a +tag |
render_email | An email in Postmark, SendGrid, Mailgun or CloudMailin shape, optionally posted to your local handler |
Forwarding
| Tool | Description |
|---|---|
list_destinations | List an endpoint's forwarding destinations |
add_destination | Add a destination (up to 10 per endpoint) with its kinds, filter, format, throttle and delay |
update_destination | Change a destination |
remove_destination | Remove a destination |
preview_destination | Dry run: whether the filter lets a request through, and the exact request it would send |
configure_forwarding | Set where and how captured requests and emails are forwarded, and turn it on or off |
get_forwarding_secret | Read or rotate the signing secret for forwarded deliveries |
test_forwarding | Send the newest request (or a sample) to the forwarding URL once and report the answer |
list_deliveries | The delivery log and its counts for an endpoint, or every try of one request |
redeliver | Forward one request again, or every failed one |
Teams
| Tool | Description |
|---|---|
list_teams | List the teams you own or belong to, with their pooled quota |
list_team_members | List a team's members and pending invites |
share_endpoint | Share an endpoint you own with a team |
unshare_endpoint | Stop sharing an endpoint you own with a team |
Utilities
| Tool | Description |
|---|---|
list_provider_templates | List supported providers, templates, and signing metadata |
get_usage | Check current request usage, quota, and plan |
describe | Describe all available SDK operations |
Provider-aware testing
Agents can inspect provider metadata, send realistic templates, then read the captured request with the provider and event visible in the dashboard.
You: "List the Typeform webhook templates and send a form_response to my endpoint"
Agent: [calls list_provider_templates with provider: "typeform"]
Agent: [calls send_webhook with provider: "typeform", template: "form_response", secret: "..."]
Agent: Captured POST request detected as Typeform / form_responseThe same flow works for Stripe, GitHub, Shopify, Twilio, Slack, Paddle, Linear, SendGrid templates, Clerk, Discord templates, Vercel, GitLab, Typeform, Standard Webhooks, DocuSign, Adyen, PayPal templates, and Plaid templates.
For provider templates in send_webhook, secret is required for every signed provider (only sendgrid, discord, and plaid templates are unsigned and need no secret). The MCP server does not inject a default secret.
Prompts
The local MCP server provides 3 prompt templates for common workflows:
- debug_webhook_delivery: diagnose why webhook delivery is failing or missing
- setup_provider_testing: set up webhook testing for a specific provider
- compare_webhook_attempts: compare two webhook deliveries or retries
Resources
With an API key, three resources provide read-only access to your webhook data:
- endpoints-overview (
webhooks://endpoints): all endpoints with recent activity - endpoint-recent-requests (
webhooks://endpoint/{slug}/recent): last 10 requests at an endpoint - request-details (
webhooks://request/{id}): full details of a specific request
Resources return emails without the raw message or the HTML part, like the request tools.
Example conversation
With the MCP server connected, you can talk to your AI agent naturally:
You: "Create a webhook endpoint for testing Stripe"
Agent: Created endpoint "stripe-test" at https://go.webhooks.cc/w/abc123
You: "Set it to return 201 with {"received": true}"
Agent: Updated mock response for stripe-test
You: "Send a Stripe checkout.session.completed template webhook to stripe-test"
Agent: Sent signed Stripe template to stripe-test
You: "Show me what was captured"
Agent: 1 request captured:
POST /w/abc123 - stripe-signature + checkout.session.completed payload
You: "Replay that to my local server"
Agent: Replayed to http://localhost:3000/webhooks - got 200 OKLearn more
AI agents
The sandbox, connecting an agent, OAuth apps, and the credential file.
SDK Overview
The TypeScript SDK that powers the MCP server.
API Reference
All methods, matchers, and types.
Testing patterns
CI/CD integration examples.