hookshelf-mcp
Enables receiving and testing GitHub webhooks, including sending signed test events and inspecting deliveries.
Enables receiving and testing Paddle webhooks, including sending signed test events and inspecting deliveries.
Enables receiving and testing Shopify webhooks, including sending signed test events and inspecting deliveries.
Enables receiving and testing Slack webhooks, including sending signed test events and inspecting deliveries.
Enables receiving and testing Stripe webhooks, including sending signed test events and inspecting deliveries.
Enables receiving and testing Telegram webhooks, including sending signed test events and inspecting deliveries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hookshelf-mcpSet up a GitHub webhook, send a test event, and show the raw delivery."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hookshelf-mcp
Give your coding agent a real webhook endpoint. An MCP server that lets Claude Code, Cursor and any MCP client receive webhooks, inspect the exact bytes that arrived, send correctly signed test events for 7 providers, and replay any delivery — backed by a local hookshelf instance, so payloads never leave your machine.
The problem
Ask an agent to "integrate Stripe webhooks" and it writes the handler blind. It cannot receive a delivery, so it cannot see what Stripe actually sends, cannot check its signature verification against real bytes, and cannot find out whether its fix worked. The usual answer — a public tunnel and clicking around a provider dashboard — is exactly the part an agent cannot do.
With this server the agent closes the loop itself:
agent: create_endpoint(name: "stripe-dev", provider: "stripe", secret: "whsec_...")
→ http://127.0.0.1:3000/in/f4080sjvz3v6tfd5
agent: send_test_event(endpoint_id: "f4080...") # signed like the real thing
→ { received: true, delivery: "a698af65..." }
agent: get_delivery(delivery_id: "a698af65...")
→ headers as received, exact body, verification: "ok"
agent: send_test_event(endpoint_id: "f4080...", tamper: true)
→ { error: "invalid_signature", delivery: "eb7c9d8e..." } # failure path, also storedWrite handler → send signed event → read what arrived → fix → replay. No third-party service, no tunnel, no dashboard.
Related MCP server: hookray-mcp
Tools
Tool | What it does |
| New endpoint with its inbound URL. Optional provider+secret for signature verification, optional forward URL. |
| Sends a webhook with a valid signature for the endpoint's provider: |
| Blocks until a new delivery arrives — "trigger, wait, inspect" without a polling loop. |
| One delivery whole: headers as received, exact body (UTF-8 or base64), verification result, forwarding attempts. |
| What they say. |
| Queues a stored delivery again, byte for byte, pointing back at the original. |
Twilio is verify-only: it signs the public request URL rather than the body, so only the real provider can produce a valid signature.
Setup
Two pieces: hookshelf (holds the deliveries) and this server (gives the agent hands).
# 1. hookshelf
git clone https://github.com/vinkurov/hookshelf.git && cd hookshelf
docker compose up -d # dashboard on http://127.0.0.1:3000
# 2. this server
git clone https://github.com/vinkurov/hookshelf-mcp.git && cd hookshelf-mcp
npm install && npm run buildClaude Code — .mcp.json in your project (or claude mcp add):
{
"mcpServers": {
"hookshelf": {
"command": "node",
"args": ["/path/to/hookshelf-mcp/dist/main.js"],
"env": { "HOOKSHELF_URL": "http://127.0.0.1:3000" }
}
}
}Cursor and Claude Desktop take the same command/args/env block in their MCP settings. HOOKSHELF_URL defaults to http://127.0.0.1:3000.
Not on npm yet — npx hookshelf-mcp will work once it is published; this README will say so when it does, rather than before.
Notes worth knowing
Signatures are generated from the same specifications webhook-kit verifies against, and every one is round-trip tested through webhook-kit's actual verifier — generation and verification can only drift if the tests break.
Secrets are held in memory only. hookshelf stores secrets write-only, so
send_test_eventworks for endpoints created in the current session; for anything else the server says so instead of guessing.A rejected delivery is still stored. That is hookshelf's defining behaviour: you cannot debug a request you threw away. The tool returns the delivery id either way, and the agent can inspect exactly what failed.
Timestamped schemes sign with unix seconds, not milliseconds — a millisecond timestamp produces a "valid" signature that fails the freshness check, which is the kind of bug this package exists to catch.
No auth on hookshelf: keep it bound to loopback (its compose file already does).
Development
npm test # 37 tests: every signature round-trips through webhook-kit's verifier
npm run test:e2e # 11 checks against a real hookshelf instance
npm run lint && npm run typecheckThe unit tests drive the server through a real MCP client over an in-memory transport, against a fake hookshelf whose responses are copied from the real handlers — and the e2e run then checks the copies against reality. It has already caught one drift: the fake deduplicated deliveries on capture-only endpoints, the real hookshelf only deduplicates when forwarding (there is nothing downstream to protect otherwise).
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables generating webhook endpoints for testing, inspecting and comparing HTTP request payloads, replaying requests from history, and forwarding requests to localhost.2MIT
- AlicenseAqualityDmaintenanceEnables 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.513MIT
- FlicenseNot gradedqualityAmaintenanceWebhook management and debugging. Validate signatures, log events, replay, and analyze webhook traffic.

RequestBin MCP Serverofficial
AlicenseAqualityDmaintenanceEnables AI coding agents to create webhook bins, inspect and replay HTTP requests, and stand up mock API endpoints directly from the editor.1313MIT
Related MCP Connectors
A webhook inbox for agents: one call returns a live URL. Mock, verify, inspect and replay.
Fire-and-forget webhooks for agents with guaranteed, retried delivery and status polling. x402
Agent-first hosting: create apps, commit code, deploy, get HTTPS URLs. OAuth sign-in, no tokens.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vinkurov/hookshelf-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server