Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Webhook.site MCP Server

PYPI · WEBHOOK-MCP-SERVER

Capture HTTP, email, and DNS callbacks with webhook.site from MCP clients.

Available components

+1 this week 76 Trust /100

Last scanned (1 hour ago)

Scores higher than 73% of PyPI servers

Category Security

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 2 of 36 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to zebbern/webhook-mcp-server). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 49 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability62
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 4398 tokens (~141/item across 31 items; 31 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage75
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 11% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 19 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 18 Oct 26 −14
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.97 → pass security
  • 17 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 16 Oct 26 −14
    • Malware scan: pass → unverified ▼ security
  • 14 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Oct 26 −1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 80.

  • 7 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Analysed pypi/webhook-mcp-server@3.0.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo zebbern/webhook-mcp-server
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/zebbern/webhook-mcp-server/.github/workflows/publish.yml@refs/tags/v3.0.0
Rekor log index 2704780577
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:a883d904344ee0882f81e9961f9fc5158e6f07d260238cc4aa00fdf4d802b0bd

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 36 packages
Packages resolved 36
Stale 1
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 31 exposed · ~4,398 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
check_for_callbacks ~97

See if SSRF, XSS, or canary callbacks arrived in the last N minutes. Use after generate_oob_payloads. For a website verification email, use wait_for_email.

NameTypeReqDescription
identifier–––
since_minutesinteger––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

configure_webhook ~241

Create a webhook with custom settings, or update one (pass webhook_token). Use when the endpoint should pretend to be an API (status, body, content type, delay up to 30s, CORS), needs an alias, expiry (seconds), a request_limit (0 stores nothing), listen (seconds to wait for update_request response), actions on/off, clone_from another token, a group_id, or a description (label shown in the Control Panel). default_content can be a JSON array of DNS records ([{"type":"a","value":"..."}]) to answer DNSHook lookups. Updates keep every setting you do not mention; alias="" removes the alias. For a plain sign-up inbox use create_webhook.

NameTypeReqDescription
actions–––
alias–––
clone_from–––
cors–––
default_content–––
default_content_type–––
default_status–––
description–––
expiry–––
group_id–––
listen–––
request_limit–––
timeout–––
webhook_token–––

Structured output declared, but exposes no named fields.

No examples provided.

create_webhook ~144

Create a disposable inbox to sign up on a website: HTTP URL, temp email, DNS. Use this first when the user wants to sign up, receive a verification / magic-link / password-reset email, catch a webhook callback, or get a one-off URL. Returns token, url, email ({token}@emailhook.site), and dns. Next: give the email or URL to the site, then wait_for_email, then follow_email_link or use the OTP. With an API key the URL is permanent (premium) unless WEBHOOK_SITE_DEFAULT_EXPIRY is set; use configure_webhook for custom responses, alias, expiry or request_limit.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

delete_all_requests ~106

Clear captured events on a webhook, optionally by date or search query. Use to reset an inbox before a new sign-up or test run. date_to='now-7d' deletes everything older than a week.

NameTypeReqDescription
date_from–––
date_to–––
query–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

delete_request ~66

Delete one captured HTTP, email, or DNS event by request id.

NameTypeReqDescription
request_idstringyes–
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

delete_webhook ~72

Permanently delete a webhook and every captured request/email. Use when the user is done with a temp inbox or wants to clean up.

NameTypeReqDescription
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

download_request_file ~98

Download an uploaded file or email attachment (base64) by its file_id. file_id comes from the attachments list on a request or email.

NameTypeReqDescription
file_idstringyes–
max_bytesinteger––
request_idstringyes–
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

export_webhook_data ~147

Full dump of captured events with HTML and untruncated bodies, as JSON or CSV. Use when list/wait tools omitted HTML or truncated a body. json pages through up to limit events; csv returns the account's CSV export (paid plans, 3 calls per minute). Filters match search_requests.

NameTypeReqDescription
date_from–––
date_to–––
formatstring––
limitinteger––
query–––
sortingstring––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

extract_links_from_request ~119

Pull confirm, reset, magic-link, and other URLs from a captured email or HTTP body. Use after wait_for_email or get_webhook_requests when the user needs the verification / login / password-reset link or OTP. Defaults to the latest event. wait_for_email already extracts links and codes.

NameTypeReqDescription
filter_domain–––
request_id–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

follow_email_link ~185

Open the verify / magic-link / reset URL from a captured sign-up email. Use after wait_for_email. Opens the best-ranked auth link; pass request_id (the email's uuid) to pick a specific email, or url to open another link from that email. Only follows http(s) links already in the inbox, to public hosts unless the server's FOLLOW_EMAIL_LINK_ALLOW_HOSTS allows more. Returns status, final URL, page preview, the ranked auth_links, and blocked_redirect if a redirect was refused after the link itself succeeded. For OTP codes, read verification_codes from wait_for_email.

NameTypeReqDescription
request_id–––
url–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

generate_oob_payloads ~194

Build authorized out-of-band payloads that ping this webhook: SSRF URLs, XSS callbacks, or canary tokens. Use only on systems you are allowed to test — not for sign-up email. kind='ssrf' (include_dns/include_ip), 'xss' (include_cookies/include_dom), 'canary' (canary_type url|dns|email: a tripwire, not an inbox). Confirm hits with check_for_callbacks.

NameTypeReqDescription
canary_typestring––
identifier–––
include_cookiesboolean––
include_dnsboolean––
include_domboolean––
include_ipboolean––
kindstringyes–
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

get_request ~110

Return one captured event: the newest by default, or request_id. Set raw=true to also get the untouched body (raw_body). Use for a quick peek; prefer wait_for_email after a sign-up, or get_webhook_requests to see history.

NameTypeReqDescription
rawboolean––
request_id–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

get_webhook_email ~118

Return the temp inbox to sign up, verify, magic-link, or reset a password. Address is {token}@emailhook.site. Use when the user already has a token. If they do not, call create_webhook first — it also returns email. After the site sends mail, call wait_for_email.

NameTypeReqDescription
validateboolean––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

get_webhook_info ~135

Show a webhook's settings, expiry, request count and every address. Returns url, subdomain_url, force_status_url (append a status code to make the URL answer with it), api_url, email and dns for the token, plus premium / expires_at / alias / request_limit. Use when the user asks if a token is still valid, how it is configured, or needs its callback URL or DNSHook domain.

NameTypeReqDescription
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

get_webhook_requests ~185

List captured HTTP, email, or DNS events for a webhook, one page at a time. Use to inspect what already arrived. Bodies are truncated and HTML is omitted; use export_webhook_data for the full dump. For the newest item use get_request. To wait for something new use wait_for_request or wait_for_email. Filter emails with request_type='email'. Returns pagination (is_last_page, total) and next_since: pass it back as since to get only what arrived after that call (no paging, no duplicates).

NameTypeReqDescription
limitinteger––
pageinteger––
request_type–––
since–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

list_webhooks ~94

List the webhooks (URLs / inboxes) in the account. Needs WEBHOOK_SITE_API_KEY. Use to find an existing token, alias, request count or latest_request_at before creating a new one. Returns pagination.

NameTypeReqDescription
max_itemsinteger––
order_bystring––
order_directionstring––
pageinteger––
per_pageinteger––

Structured output declared, but exposes no named fields.

No examples provided.

manage_custom_actions ~318

Manage the Custom Actions webhook.site runs on every request or email a token receives. action: types (reference of all 63 action types; pass type= for one type's parameters, live-verified status and example) | variables ($request.*$ variables and modifiers) | script_reference (every WebhookScript function with its signature, for type=script) | list | create | update | delete | test | execute. create/update take type (modify_response, http, script, javascript, send_email, extract_jsonpath, conditions, rate_limit, log, set_variable, mock, ...) with parameters, order, and optionally name (label), queue/delay/ condition (id of a conditions action) and queue_id (a Queue Profile from manage_queues). test dry-runs the given action against request_id without changing saved actions; execute re-runs all saved actions on request_id. Actions also fire on incoming emails, so guard email-sending actions with a condition on $request.type$. Never point http/send_request at a webhook.site URL (recursion is disabled).

NameTypeReqDescription
actionstringyes–
action_id–––
condition–––
delay–––
disabled–––
error_notificationsboolean––
name–––
order–––
parameters–––
queue–––
queue_id–––
request_id–––
search–––
type–––
webhook_token–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_databases ~111

Manage webhook.site Databases and run SQL against them (needs API key). action: list | create | update | delete | query. create needs name and plan. query runs SQL with optional positional (?) or named (:name) params and returns up to 1000 rows.

NameTypeReqDescription
actionstringyes–
database_id–––
group_id–––
name–––
pageinteger––
params–––
plan–––
query–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_global_variables ~78

Manage Global Variables shared by all URLs, usable as $name$ in Custom Actions and Schedules. action: list | create | update | delete. Needs API key.

NameTypeReqDescription
actionstringyes–
name–––
pageinteger––
search–––
value–––
variable_id–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_groups ~73

Manage Groups that organise the account's webhooks (needs API key). action: list | create | update | delete. Assign a token to a group with configure_webhook(group_id=...).

NameTypeReqDescription
actionstringyes–
group_id–––
name–––
pageinteger––

Structured output declared, but exposes no named fields.

No examples provided.

manage_queues ~136

Manage Queue Profiles that throttle queued Custom Actions (needs API key). action: list | create | update | delete. A profile allows `amount` jobs every `duration` seconds, drops jobs not run within `expiry` seconds, and waits `delay` seconds before the first run. Attach it to an action with manage_custom_actions(queue=true, queue_id=...).

NameTypeReqDescription
actionstringyes–
amount–––
delay–––
duration–––
expiry–––
group_id–––
name–––
pageinteger––
queue_id–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_schedules ~255

Manage Schedules: webhook.site calls request_url on an interval (needs API key). action: list | get | create | update | delete | run | logs. interval is monthly, weekly, daily, hourly, 10-minute, 5-minute, 1-minute or cron (then set cron, e.g. '*/5 * * * *'). request_headers are newline separated. require_* raise an error notification when the response does not match; require_cert_expiry alerts when the HTTPS certificate expires in fewer than that many days. Use for uptime checks or periodic cleanup calls (e.g. DELETE .../token/{id}/request?date_to=now-7d with Api-Key).

NameTypeReqDescription
actionstringyes–
cron–––
interval–––
name–––
pageinteger––
request_body–––
request_headers–––
request_method–––
request_url–––
require_body–––
require_cert_expiry–––
require_status_max–––
require_status_min–––
schedule_id–––
sortingstring––
timeout–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_templates ~108

Manage Templates: reusable sets of Custom Actions plus predefined variables (needs API key). action: list | create | update | delete. actions is a list of action objects (type, order, parameters...); variables is a list of {name, value}. Include a template in a token with a 'template' action.

NameTypeReqDescription
actionstringyes–
actions–––
name–––
pageinteger––
template_id–––
variables–––

Structured output declared, but exposes no named fields.

No examples provided.

manage_users ~92

Manage team users on an Enterprise account (needs an administrator API key). action: list | invite | update | delete. user_type_id: 100 admin, 200 member, 300 viewer.

NameTypeReqDescription
actionstringyes–
email–––
name–––
pageinteger––
role_id–––
user_id–––
user_type_id–––

Structured output declared, but exposes no named fields.

No examples provided.

respond_to_next_request ~186

Hold the next request that hits the webhook and answer it with your own status, headers and body. Turns the URL into a live mock for one request: the caller waits (up to listen_seconds, max 10) while this tool sets the reply the moment the request arrives over the socket. Use to test a client's retry / error handling ("answer the next call with 500") or to fake an API response on demand; returns the captured request. For a fixed canned reply use configure_webhook instead.

NameTypeReqDescription
content–––
headers–––
listen_secondsinteger––
statusinteger––
timeout_secondsinteger––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

search_requests ~234

Search captured events by method, body text, headers, type, or date. Use when the user asks to find POSTs, a keyword, or only emails/DNS. query uses webhook.site search syntax: 'method:POST', 'content:verify', 'headers.user-agent:curl', 'type:web AND method:POST', '-method:GET' (exclude), '_exists_:custom_action_errors', 'note:todo*', 'country_code:DE', 'created_at:[now-1h TO now]'. Dates are 'yyyy-MM-dd HH:mm:ss' or expressions like now-7d. Returns pagination and next_since (pass back as since for only newer matches).

NameTypeReqDescription
date_from–––
date_to–––
limitinteger––
pageinteger––
query–––
request_type–––
since–––
sortingstring––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

send_requests ~136

Send one JSON body (data) or several (payloads) to the webhook URL to test capture. Use when the user wants to send sample payloads or load-test, not when they are waiting for a real site or email. Any HTTP method; delay_ms spaces out multiple payloads.

NameTypeReqDescription
data–––
delay_msinteger––
headers–––
methodstring––
payloads–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

server_status ~59

Check this server's setup: API key, account reachability, plan, real-time socket, env config. Call first when a tool fails unexpectedly or before relying on account features. Lists problems in plain words.

NameTypeReqDescription
check_socketboolean––

Structured output declared, but exposes no named fields.

No examples provided.

update_request ~149

Attach a note to a captured request, or set its dynamic response. response_* call the Set Response API; it only reaches the caller while the request is still held (token listen > 0 with a socket listener; see respond_to_next_request, which does the whole thing). For canned replies use configure_webhook or a modify_response custom action instead.

NameTypeReqDescription
note–––
request_idstringyes–
response_content–––
response_headers–––
response_status–––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

wait_for_email ~194

Wait for a sign-up, verify, magic-link, or password-reset email (1-120s). Call this after the user (or you) submitted {token}@emailhook.site on a website. Returns subject, sender, spam/DKIM checks, a truncated text preview, attachments, extracted confirm / reset / login URLs, and verification_codes (OTP). Next: follow_email_link, or type the code. HTML is omitted; use export_webhook_data for the full message. Set return_existing=true if the email already arrived. If there is no token yet, create_webhook first.

NameTypeReqDescription
extract_linksboolean––
return_existingboolean––
timeout_secondsinteger––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

wait_for_request ~158

Wait until a new HTTP (or DNS) callback hits the webhook (1-120s). Use after giving a site the webhook URL. Listens on webhook.site's socket and falls back to polling. Bodies are truncated and HTML is omitted; use export_webhook_data for the full dump. For verification / magic-link / password-reset mail, use wait_for_email instead. Set return_existing=true if the request may already be there.

NameTypeReqDescription
request_type–––
return_existingboolean––
timeout_secondsinteger––
webhook_tokenstringyesWebhook UUID or alias from create_webhook / configure_webhook; a webhook.site URL or {token}@emailhook.site address works too

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the Webhook.site MCP Server server?

Webhook.site MCP Server runs locally as a PyPI package, launched with uvx webhook-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · webhook-mcp-server

# add to Claude Code
claude mcp add zebbern-webhook-mcp-server -- uvx webhook-mcp-server
Common questions

What is the Webhook.site MCP Server server?

Webhook.site MCP Server is listed in the public MCP registry as io.github.zebbern/webhook-mcp-server. Capture HTTP, email, and DNS callbacks with webhook.site from MCP clients. This page covers its PyPI package (webhook-mcp-server).

Is the Webhook.site MCP Server server safe to use?

Webhook.site MCP Server scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Webhook.site MCP Server server expose?

Webhook.site MCP Server exposes 31 tools: server_status, create_webhook, configure_webhook, get_webhook_info, get_webhook_email, and 26 more. Their descriptions and schemas cost roughly 4,398 tokens of context every time the server is loaded.

Is the Webhook.site MCP Server server still maintained?

Webhook.site MCP Server is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Webhook.site MCP Server server under?

Webhook.site MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.