Hookpulse
Dead-man switch for cron and webhooks: ingest URL, miss detection, alerts and a status feed.
Connect it
Settings → Connectors → Add custom connector
URL: https://hookpulse.net/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://hookpulse.net/mcp{
"mcpServers": {
"hookpulse": {
"url": "https://hookpulse.net/mcp"
}
}
}claude mcp add --transport http hookpulse https://hookpulse.net/mcp{
"servers": {
"hookpulse": {
"type": "http",
"url": "https://hookpulse.net/mcp"
}
}
}24 tools, verified live
api_indexread-onlyFull index of the HookPulse API.
healthread-onlyLiveness.
create_guestCreates a guest token hp_… Keep the token: without it there is no way back to the monitors, unless you have already tied them to an e-mail.
list_endpointsread-onlyLists the guest's/session's endpoints.
create_endpointCreate a monitor for a routine. Use cron, tz and grace_sec for a schedule, or interval_sec for a fixed check-in interval. Set max_duration_sec to detect an open run that exceeds its time limit. With `check` the monitor is a site: HookPulse calls `check.url` every `interval_sec` (default 300) and alerts when it goes down — two failed checks in a row, one minute apart, from a server whose own connec
create_siteMonitor a website: HookPulse calls check.url every interval_sec (default 300) and alerts when it goes down and when it is back. With `check` the monitor is a site: HookPulse calls `check.url` every `interval_sec` (default 300) and alerts when it goes down — two failed checks in a row, one minute apart, from a server whose own connection is proven — and when it answers again. `{"check":{"url":"http
check_siteCheck a site monitor now. One call every 10 seconds per destination host. One call every 10 seconds per destination host, for everyone: the button cannot hammer a site. The first state of a new site comes from here, without an alert — you are looking at it. After that, the state and the alerts come from the check that runs every minute.
list_sitesread-onlyThe state of every site you monitor (up, down, waiting, paused), with the last check.
import_crontabReads a crontab and proposes one monitor per scheduled line. Without apply=1 nothing is written; the proposal says what was ignored and why. Passwords in the command are redacted. The body is the crontab itself, as `text/plain`. Without `?apply=1` **nothing is written**: you get the proposal — what would become a monitor, what was ignored and why, and what still fits in the free tier. With `apply=
get_endpointread-onlyStatus of one endpoint (use the endpoint token if you have it). The monitor token only reads: it lets you put the state on a third-party dashboard without handing over the owner's credential. With a schedule it is here that `next_expected_at` says when the next run is due.
delete_endpointcan modifyRemoves the owner's endpoint.
list_eventsread-onlyLatest ingest pings.
ping_ingestread-onlySimulates the cron: GET on /in/:id. No credential on purpose — the caller is a cron, and the ID is already the secret.
signal_startread-onlySays the run STARTED. Does not clear the dead-man clock: a routine that starts and hangs still becomes a miss. The next success records the duration. `start` is not proof of life: it does not move `last_event_at` and does not clear the miss counter, so a routine that starts and hangs still becomes a miss at the right time. The next success closes the run and records `last_duration_ms` — pass `?rid
signal_failread-onlyRecord a failed run. The next five-minute check sends the alert with reason fail. The monitor's alert_repeat_sec controls repeated alerts; the default is 24 hours. Failing is not proof of life either: the clock keeps running. The ingest never sends e-mail and never calls out — it records `alert_pending` and the cron turns it into an alert with `reason: "fail"` within 5 minutes, under the same one-
signal_exit_coderead-onlyThe shell exit status: 0 behaves like a ping, 1-255 record the code as a failure. `curl -fsS $ORIGIN/in/ID/$?` at the end of a script is the whole integration. `0` behaves exactly like a plain ping; 1 to 255 record the code and leave the failure for the cron.
ingest_keyread-onlyReturns (minting the first time) the key for /in/<key>/<slug>, where a ping creates its own monitor inside the free tier. Instruments a whole fleet with no setup call per job. One key per owner. The key survives signing in: the crontab you deployed keeps working.
ingest_key_rotatecan modifyRotates the ingest key; the previous one stops creating monitors. Existing ones keep working. Monitors already created keep working — rotating only revokes the power to create new ones.
ping_slugread-onlyCreate a monitor on its first check-in. The same slug uses the same monitor. A rejected creation writes no monitor or event. The slug becomes the monitor name and its identity: the same slug always means the same monitor, so a retry never creates a second one. Normalised to lowercase, `[a-z0-9-]`, 40 chars. Works by GET or POST.
signal_slugread-onlySend start, fail or an exit code by name, with the ingest key; the first signal of a new name creates its monitor. The same signals as `/in/:id/start`, `/in/:id/fail` and `/in/:id/:exit_code`, for a fleet that only knows the ingest key: the job sends its name, not the monitor id. The first signal of a new name creates the monitor, with the same rules and the same `cron`, `tz` and `grace_sec` as th
status_feed_urlread-onlyPublic URL (JSON and RSS) with the status of all the owner's endpoints. The feed token only reads status: it does not create, change or delete. Whoever has the link sees the dashboard — treat it as a secret.
status_feed_rotatecan modifyRotates the status feed token; the previous URL stops working.
list_templatesread-onlyIngest snippets and the JSON HookPulse POSTs on a miss. It exists so nobody guesses the alert format: `miss_json` and `recovery_json` here are the same bodies that arrive at your `alert_url`. Slack and Discord receive only the field they read.
contactWrite to the people behind the product: a question, or a sponsorship/partnership/advertising proposal. One route for a question and for a sponsorship, partnership or ad proposal (`tipo`, with the placements of `GET /api/partners`). One message every 10 seconds per network: one that arrives sooner waits its turn and then goes out — no error. The message reaches the team by e-mail, with `email` as t
Alternatives in Other
Compare →BBBikefuchs — Bike Parts Price ComparisonB
Price comparison & cart optimizer for bike parts across German & Austrian shops
UPUrantia PapersB
Free, open MCP server for The Urantia Papers. 197 papers, 14,500+ paragraphs, 4,400+ entities.
RORootlyB
Incident management, on-call scheduling, and intelligent analysis powered by Rootly.
SCScanMalware.com URL ScannerB
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.
AFAINumbers Fintech Intelligence SuiteB
744 MCP tools across 1207 fintech tools: ChainGraph AP2 decisions, execution_hash. Zero PII.
Intangible Asset Valuation MCP ServerB
Intangible asset valuation: 14 tools, 124+ formulas for IP, technology, goodwill, PPA, impairment.