Skip to content

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/mcp

Then 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/mcp

Codex 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_to and replay_request are left out: they post to a URL you name, and a hosted server cannot reach your machine. For the same reason render_email and test_webhook_flow refuse targetUrl. To send to localhost, use the local server or whk tunnel.
  • Waits are capped at 50 seconds. wait_for_request, wait_for_email and the other tools with a timeout return 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

Add to Cursor

Paste your key above first. It gets baked into the install link.

Add to VS Code

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 from server.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.json metadata
  • 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

ToolDescription
create_endpointCreate a new webhook endpoint
list_endpointsList all your endpoints
get_endpointGet details for an endpoint by slug
favorite_endpointMark or unmark an endpoint as a favourite
update_endpointUpdate an endpoint's name, mock response, signing, email fields or layouts
preview_layoutsDry-run the endpoint's layouts on a captured email
preview_responseShow what a request would get back, unsent
delete_endpointDelete an endpoint and its requests
create_endpointsCreate multiple endpoints in one call (1-20)
delete_endpointsDelete multiple endpoints in one call (1-100)

Sending and testing

ToolDescription
send_webhookSend a test webhook (manual or provider template) to an endpoint
send_toSend a signed webhook directly to any URL (localhost, staging, etc.)
preview_webhookPreview a webhook request without sending it
test_webhook_flowRun a full test flow: create, mock, send, wait, verify, replay, cleanup

Request management

ToolDescription
list_requestsList captured requests for an endpoint
get_requestGet full details of a captured request
wait_for_requestWait for an incoming request (polling)
wait_for_requestsWait for multiple incoming requests
search_requestsSearch requests across endpoints with full-text search
count_requestsCount requests matching filters
clear_requestsDelete requests for an endpoint without deleting the endpoint

Request analysis

ToolDescription
replay_requestReplay a captured request to a target URL
compare_requestsCompare two requests and show structured differences
generate_payload_schemaTypeScript, Zod, Pydantic, or JSON Schema from captured bodies
extract_from_requestExtract specific JSON fields from a request body
verify_signatureVerify 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.

ToolDescription
list_emailsList an endpoint's emails with subject, sender, tag, code and link
get_emailGet one email by ID, or the newest at an endpoint, with its code and link
wait_for_emailWait for an email to arrive (for example after a signup), then return it
send_test_emailDeliver a sample email with a code and a link, optionally to a +tag
render_emailAn email in Postmark, SendGrid, Mailgun or CloudMailin shape, optionally posted to your local handler

Forwarding

ToolDescription
list_destinationsList an endpoint's forwarding destinations
add_destinationAdd a destination (up to 10 per endpoint) with its kinds, filter, format, throttle and delay
update_destinationChange a destination
remove_destinationRemove a destination
preview_destinationDry run: whether the filter lets a request through, and the exact request it would send
configure_forwardingSet where and how captured requests and emails are forwarded, and turn it on or off
get_forwarding_secretRead or rotate the signing secret for forwarded deliveries
test_forwardingSend the newest request (or a sample) to the forwarding URL once and report the answer
list_deliveriesThe delivery log and its counts for an endpoint, or every try of one request
redeliverForward one request again, or every failed one

Teams

ToolDescription
list_teamsList the teams you own or belong to, with their pooled quota
list_team_membersList a team's members and pending invites
share_endpointShare an endpoint you own with a team
unshare_endpointStop sharing an endpoint you own with a team

Utilities

ToolDescription
list_provider_templatesList supported providers, templates, and signing metadata
get_usageCheck current request usage, quota, and plan
describeDescribe 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_response

The 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 OK

Learn 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.