webhook-verify
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., "@webhook-verifyCheck if the Stripe webhook signature is valid for this raw body and header."
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.
webhook-verify
Timing-safe, replay-resistant webhook signature verification for Stripe, GitHub, Slack, Shopify and Twilio.
29 passedStandard library only. No dependencies, no network, no telemetry.
Why
Webhook verification is the one piece of security code almost every backend writes itself, and it goes wrong in four predictable ways:
Mistake | Consequence |
| Byte-by-byte comparison leaks the position of the first wrong byte through timing. Forgeable given enough attempts. |
No timestamp check | A captured valid request stays valid forever. Replay it tomorrow and it still passes. |
Verifying the parsed body | You re-serialise, a key order or whitespace changes, and the HMAC no longer matches — so people "fix" it by skipping verification. |
Returning | A caller writes |
This library does the opposite of each: hmac.compare_digest everywhere, replay windows on every
provider that signs a timestamp, verification against the raw body, and a specific exception on
every failure so nothing can be accidentally treated as success.
Use
from webhookverify import verify_stripe, SignatureMismatch, TimestampOutOfRange
try:
verify_stripe(secret, raw_body, request.headers["Stripe-Signature"])
except TimestampOutOfRange:
return 400, "replayed or clock-skewed"
except SignatureMismatch:
return 401, "not from Stripe"
# only now is it safe to parse raw_bodySupported: verify_stripe, verify_github, verify_slack, verify_shopify, verify_twilio,
and verify_hmac for anything else.
Stripe secret rotation is handled: a header carrying several v1= signatures passes if any one matches.
MCP server
mcp/server.py exposes one tool, verify_webhook, over JSON-RPC 2.0 stdio (protocol 2024-11-05).
It returns valid:true, or valid:false with a precise reason (signature_mismatch,
timestamp_out_of_range, malformed_signature) and the instruction not to parse the payload.
{ "mcpServers": { "webhook-verify": { "command": "python3", "args": ["/path/to/webhook-verify/mcp/server.py"] } } }Tested behaviour
Valid signatures pass for all five providers
Tampered bodies, wrong secrets and truncated signatures raise
SignatureMismatchReplayed and future-dated timestamps raise
TimestampOutOfRange(the window is symmetric)Malformed headers raise
MalformedSignature— missing prefix, bad base64, non-hex, non-numeric timestampStripe multi-
v1rotation passes when any signature matchesA source-level guard asserts the module never regresses to
==on digests and always length-checks beforecompare_digest
python -m pytest tests -qLicense
MIT
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 Connectors
A webhook inbox for agents: one call returns a live URL. Mock, verify, inspect and replay.
Verify PyPI and npm packages, symbols, and version diffs against real artifacts. Free, no account.
Turn inbound email into a webhook — verify, parse, route, and store incoming messages.
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/Larslllllll/webhook-verify'
If you have feedback or need assistance with the MCP directory API, please join our Discord server