Capture, inspect, replay and deliver webhooks. Open source, with a free permanent signed URL, signature verification, and one-command replay to localhost.
claude mcp add webhook -- npx -y @webhook-co/cli{
"mcpServers": {
"webhook": {
"command": "npx",
"args": ["-y", "@webhook-co/cli"]
}
}
}MCP Servers overview
<p align="center">
<a href="https://www.webhook.co"><img src="https://www.webhook.co/logo.png" alt="webhook.co" width="120" height="120" /></a>
</p>
<h1 align="center">webhook.co</h1>
<p align="center">
<strong>A free, permanent, signed webhook URL you can inspect and replay to localhost — from the CLI, API, dashboard, or MCP.</strong>
</p>
<p align="center">
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="License: Apache-2.0" /></a>
<a href="https://www.npmjs.com/package/@webhook-co/cli"><img src="https://img.shields.io/npm/v/%40webhook-co%2Fcli?label=cli&logo=npm" alt="CLI on npm" /></a>
<a href="https://github.com/webhook-co/webhook/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/webhook-co/webhook/ci.yml?branch=main&label=ci" alt="CI" /></a>
<a href="https://docs.webhook.co"><img src="https://img.shields.io/badge/docs-docs.webhook.co-informational" alt="Docs" /></a>
</p>
`webhook.co` captures the webhooks other services send you, so you can see exactly what arrived,
check the signature, and replay it to your local dev server without redeploying. The same operations
run from the CLI, the REST API, the web dashboard, and an MCP server.
- **Receive** — a stable, signed URL on a dedicated apex (`https://wbhk.my/<token>`). No expiring
tunnels.
- **Inspect** — every request, headers and body, with a clear signature result.
- **Replay to localhost** — forward any captured event to `http://localhost:3000` with one command.
- **Deliver** — send events on to your own destinations, in order, with retries.
**Want to see it work first?** Open **[webhook.co/play](https://webhook.co/play)** — send a webhook,
watch it land. No signup, nothing to install.
Open source · Apache-2.0 · private by default.
## Try it in 60 seconds
Sign in, create an endpoint, forward its webhooks to your machine, and send it a test request. No
install needed — this uses `npx` (Node 22+):
```sh
# 1. sign in — opens your browser (GitHub or Google) and creates your free account
npx @webhook-co/cli login
# 2. create an endpoint — it prints an id and your permanent, signed ingest URL:
npx @webhook-co/cli endpoints create orders
# id d7e4f8a1-3b60-4c2e-9f15-0a8c6b2e1d94
# ingest url https://wbhk.my/whep_8QmZ4tN1p…
# 3. forward that endpoint's events to your local server (leave this running)
npx @webhook-co/cli listen d7e4f8a1-3b60-4c2e-9f15-0a8c6b2e1d94 --forward http://localhost:3000
# 4. in another terminal, send it a test request — or point Stripe, GitHub, Shopify, … at the URL
curl -X POST https://wbhk.my/whep_8QmZ4tN1p… -d '{"hello":"webhook.co"}'
```
With `--forward`, each captured event prints one line as it lands on your local server — the event
id, the target, the status it returned, and how long it took:
```text
caught up — now tailing live events
forwarded 019f8b88-55f0-7534-9ae9-f9fcfd07758c → http://localhost:3000 · 200 · 8ms
forwarded 019f8b88-6121-72e7-b640-56ecb2b2ffb2 → http://localhost:3000 · 200 · 3ms
forwarded 019f8b88-6c40-7bdf-a81f-7290b2752992 → http://localhost:3000 · 200 · 2ms
```
Drop `--forward` and `wbhk listen` opens a live view of what's arriving instead — one row per event,
with the provider it came from and whether its signature checked out:
<p align="center">
<img src=".github/assets/listen-demo.gif" alt="wbhk listen streaming captured webhooks, each row showing the provider and whether its signature verified" width="820" />
</p>
`--forward` targets must be a full loopback URL (`http://localhost:3000`,
`http://127.0.0.1:8080/webhooks`). Replay a past event with
`wbhk replay <event-id> --forward http://localhost:3000`.
Prefer a permanent install? Pick one:
```sh
brew install webhook-co/tap/wbhk # Homebrew (macOS / Linux)
npm install -g @webhook-co/cli # npm — installs the wbhk command
curl -fsSL https://get.webhook.co | sh # standalone binary, no Node required
```
Full walkthrough: **[docs.webhook.co/quickstart](https://docs.webhook.co/quickstart)**.
## What you get
**A permanent, signed URL that captures first.** Every request is written to durable storage the
instant it lands — before verification or dedup run — so a bad signature, an unknown provider, or a
downstream outage only changes what happens *next*, never whether you have the event. The ingest URL
is a sealed credential you can re-read on demand and rotate in place, not a secret shown once.
**Verification for 141 providers, built in.** One open registry
([`packages/webhooks-spec`](packages/webhooks-spec)) covers Stripe, GitHub, Shopify, Slack, Twilio,
Square, PayPal, Discord, Clerk, Supabase, and [many more](https://docs.webhook.co/providers/directory).
Every event is sorted into one of four states — **verified** (a cryptographic signature checked),
**authenticated** (source proven by a shared secret, no payload signature), **failed** (a signature
was checked and rejected), or **unattempted** — and a failure names the likely cause instead of
stopping at "no signatures found." Signing and verification follow the
[Standard Webhooks](https://www.standardwebhooks.com/) spec, for both receive and send.
**Reliable outbound delivery.** Forward captured events to your own destinations with strict FIFO
ordering (one Durable Object per destination), at-least-once delivery, retries on exponential backoff,
and dead-lettering once a destination exhausts its retries. Deliveries carry a fresh signature only
for events `webhook.co` verified or authenticated; anything it couldn't vouch for is relayed unsigned.
Optional per-endpoint deduplication collapses repeats by Standard-Webhooks id, provider event id, a
content hash, or JSON fields you choose.
**Replay on demand.** Re-send any captured event still within your retention window — to localhost or
to a registered destination — to fix a handler or recover from an outage, without asking the provider
to send it again.
**Private by default, with the controls built in.** Nothing is public unless you make it so. Tenant
isolation is enforced by Postgres row-level security; secrets are envelope-encrypted under a KMS;
traffic is encrypted in transit and at rest; and privileged actions land in an append-only,
hash-chained audit log with a verifier (`wbhk audit verify`) that proves the chain hasn't been
altered.
**One capability contract, four surfaces.** Every capability is defined once and bound identically to
the CLI, the REST API, the web dashboard, and the MCP server. A parity gate fails the build if a
surface forgets one — so the surfaces don't drift.
## Built for agents
An inbound webhook can wake an agent that's waiting on it. The
[MCP server](https://docs.webhook.co/mcp/overview) at `mcp.webhook.co` is a first-class surface
(remote HTTP on Cloudflare Workers, OAuth-authorized), and `triggers.wait` is the primitive: an agent
registers a trigger on an endpoint and drains new events since its last cursor — at-least-once, in
capture order per endpoint, held durably while the agent is offline, with the verified payload inline
(up to 64 KiB). MCP itself has no native inbound trigger yet.
Egress-configuring capabilities (registering replay destinations and subscriptions) are deliberately
kept off MCP, and localhost replay stays CLI-only — a confused-deputy and SSRF precaution, not a
missing feature.
## SDKs and CLI
Three official client SDKs, generated from the same OpenAPI contract as the API, plus the `wbhk` CLI.
Each SDK ships bearer auth, bounded retries with jitter, cursor pagination, idempotency, and secret
redaction.
| Language | Install | Import |
| --- | --- | --- |
| **TypeScript** | `npm install @webhook-co/sdk` | `import { WebhookClient } from "@webhook-co/sdk"` |
| **Python** | `pip install webhook-co` | `from webhook_co import WebhookClient` |
| **Go** | `go get github.com/webhook-co/webhook-go` | `import webhook "github.com/webhook-co/webhook-go"` |
| **CLI** | `brew install webhook-co/tap/wbhk` | the `wbhk` command |
The TypeScript SDK runs anywhere `fetch` does (Node 18+, browsers, Deno, Bun, Workers). The Python
SDK needs Python 3.10+. The Go SDK needs Go 1.22+ and has zero third-party dependencies — standard
library only — and lives in its own repository,
[`webhook-co/webhook-go`](https://github.com/webhook-co/webhook-go).
The REST API lives at `https://api.webhook.co/v1`, authenticated with a `whk_` bearer key, and is
described by a machine-readable OpenAPI 3.1 document at
[`api.webhook.co/openapi.json`](https://api.webhook.co/openapi.json) — the one source that also
generates the SDKs and the docs.
Distribution is independently verifiable: npm packages are published with provenance
(`npm audit signatures`), and the standalone CLI binaries carry sigstore-signed SLSA build provenance
(`gh attestation verify wbhk-<os>-<arch> --repo webhook-co/webhook`).
## Pricing
`webhook.co` is free to start: a permanent signed URL, inspect, and replay, with **5,000 events to
spend once** — a real trial allowance that never resets. Paid plans (Pro, Scale, Enterprise) price on
a **single dimension — events** — with a soft cap that **pauses capture rather than surprising you
with a bill**. The whole receive → verify → deliver → replay pipeline, outbound delivery included, is
on every plan; plans differ by event volume and retention window. Full numbers:
**[webhook.co/pricing](https://webhook.co/pricing)**.
## How it's built
`webhook.co` is a Turborepo + pnpm-workspaces monorepo. The core engine is TypeScript on Cloudflare
Workers; ordering and isolation come from one Durable Object per destination, with Durable Object
Alarms driving retry scheduling; metadata and dedup live in Neon Postgres via Hyperdrive; and payloads
are stored content-addressed in R2. Ingestion runs on a **separate registrable apex, `wbhk.my`** —
cookieless, no CORS, path-token routed, with a `404` for unknown tokens — deliberately isolated from
the primary application domain.
What people ask about webhook
What is webhook-co/webhook?
+
webhook-co/webhook is mcp servers for the Claude AI ecosystem. Capture, inspect, replay and deliver webhooks. Open source, with a free permanent signed URL, signature verification, and one-command replay to localhost. It has 0 GitHub stars and was last updated today.
How do I install webhook?
+
You can install webhook by cloning the repository (https://github.com/webhook-co/webhook) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is webhook-co/webhook safe to use?
+
webhook-co/webhook has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains webhook-co/webhook?
+
webhook-co/webhook is maintained by webhook-co. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to webhook?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy webhook to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/webhook-co-webhook)<a href="https://claudewave.com/repo/webhook-co-webhook"><img src="https://claudewave.com/api/badge/webhook-co-webhook" alt="Featured on ClaudeWave: webhook-co/webhook" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!