loading…
Search for a command to run...
loading…
Enables AI agents to create disposable webhook URLs, capture incoming HTTP requests, inspect headers and bodies, and replay them against local or remote endpoin
Enables AI agents to create disposable webhook URLs, capture incoming HTTP requests, inspect headers and bodies, and replay them against local or remote endpoints, streamlining the webhook handler development loop.
Webhook testing for AI agents — capture, inspect, replay HTTP requests from Claude Code, Cursor, Claude Desktop, or any MCP-compatible client.
hookray-mcp is the Model Context Protocol server for HookRay. Drop it into your AI agent's config and the agent can spin up disposable webhook URLs, watch incoming requests live, and replay captured payloads against your local handler — without leaving the chat.
AI coding agents increasingly write webhook handlers (Stripe, GitHub, Shopify, Twilio, …). The agent loop today is:
With hookray-mcp installed, the agent does steps 2–4 itself:
You: "Build me a Stripe webhook handler at /api/stripe."
Agent: [writes code, then calls hookray-mcp tools]
→ create_webhook_inbox
→ wait_for_request (you trigger an event in Stripe)
→ inspect_request
→ replay_request to localhost:3000/api/stripe
→ "Returned 500. The bug is in the signature check at line 14."
# Anywhere npx works
npx -y hookray-mcp@latest
# Or globally
npm install -g hookray-mcp
Node.js 20+ required.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"hookray": {
"command": "npx",
"args": ["-y", "hookray-mcp@latest"]
}
}
}
claude mcp add hookray -- npx -y hookray-mcp@latest
Add to .cursor/mcp.json in your project (or the global Cursor MCP config):
{
"mcpServers": {
"hookray": {
"command": "npx",
"args": ["-y", "hookray-mcp@latest"]
}
}
}
If you have a HookRay account and want persistent inboxes, pass HOOKRAY_API_KEY:
{
"mcpServers": {
"hookray": {
"command": "npx",
"args": ["-y", "hookray-mcp@latest"],
"env": {
"HOOKRAY_API_KEY": "hkr_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
Get a key at hookray.com/app/settings/api-keys.
| Tool | Description | Auth |
|---|---|---|
create_webhook_inbox |
Generate a fresh https://hookray.com/api/hook/xxxx URL that captures any HTTP request. Returns the URL + inbox id. |
Anonymous OK. persistent: true needs Pro. |
list_requests |
List recent requests captured by an inbox (with filters: method, since, search, limit). | Anonymous OK. |
inspect_request |
Get the full method + headers + body + query params of a single captured request. | Anonymous OK. |
wait_for_request |
Block (up to 60 s) until a new request arrives. Critical for AI agent dev loops. | Anonymous OK. |
replay_request |
Forward a captured request to any URL — including localhost. Runs client-side from this package so private IPs work. |
Anonymous OK. |
| Variable | Default | Notes |
|---|---|---|
HOOKRAY_BASE_URL |
https://hookray.com |
Override for self-hosting or local dev. |
HOOKRAY_API_KEY |
(unset) | Required for persistent inboxes. Get one at hookray.com/app/settings/api-keys. |
> "Add a Stripe webhook handler at /api/stripe/webhook in this Next.js app."
[agent writes app/api/stripe/webhook/route.ts]
> "Now test it."
[agent calls hookray-mcp]
→ create_webhook_inbox → https://hookray.com/api/hook/abc12345
→ "Paste this URL into Stripe → Add endpoint, then trigger an event."
[you trigger a test event from Stripe dashboard]
→ wait_for_request(inbox_id) → {method: POST, content_type: application/json, ...}
→ inspect_request(...) → full headers (incl. stripe-signature) + body
→ replay_request(destination_url=http://localhost:3000/api/stripe/webhook)
→ {status_code: 400, body: "No signatures..."}
→ "Your handler is reading req.json() before constructEvent. Switch to
req.text() — Stripe's signature check needs the raw body."
[agent edits the handler]
→ replay_request(...) → {status_code: 200}
| Capability | Free | HookRay Pro |
|---|---|---|
| Anonymous inboxes | ✅ | ✅ |
| Capture, list, inspect, wait | ✅ | ✅ |
| Replay to any URL (incl. localhost) | ✅ | ✅ |
| Inbox lifetime | 7 days | 10 years |
| Multiple inboxes | 1 active | up to 10 |
| Request history | 100 / month | 10,000 / month |
Pro is $9 / month at hookray.com/pricing.
wait_for_request long-polls (1 s tick, 60 s max). Good enough for dev loops; not designed for production traffic.replay_request is your responsibility (the package runs on your machine, in your network).send_stripe_test_event, send_github_test_event, …)HOOKRAY_BASE_URL)git clone https://github.com/ShotaTanikawa/hookray-mcp.git
cd hookray-mcp
pnpm install
pnpm build
pnpm test
MIT © 2026 Shota Tanikawa. See LICENSE.
Made by @ShotaTanikawa · HookRay · Feedback welcome — open an issue.
Run in your terminal:
claude mcp add hookray-mcp -- npx