{"name":"net.hookpulse/hookpulse","slug":"hookpulse","title":null,"description":"Dead-man switch for cron and webhooks: ingest URL, miss detection, alerts and a status feed.","url":"https://mcp.market/server/hookpulse","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T06:20:59.866Z","last_ok_at":"2026-09-21T06:20:59.866Z","latency_ms":65},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://hookpulse.net","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://hookpulse.net/mcp"}],"packages":[],"tools":[{"name":"api_index","description":"Full index of the HookPulse API.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"billing","description":"Free plan, x402 prices and the trial offer: sign-up with a confirmed e-mail = 90 days without the usage paywall (`trial` field; with a session it shows the state).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"contact","description":"Support. Agent without captcha → 402 $0.10 x402. After the 1st message: 429 + Retry-After (backoff).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"What to call the person writing."},"email":{"type":"string","description":"Where to reply."},"message":{"type":"string","description":"What you want to say."},"tipo":{"type":"string","enum":["patrocinio","parceria","anuncio"],"description":"Proposal: `patrocinio`, `parceria` or `anuncio`. Turns on the fields below."},"empresa":{"type":"string","description":"Who is proposing, when it is a company."},"site":{"type":"string","description":"Website of who is proposing."},"orcamento":{"type":"string","enum":["ate_100","100_500","500_2000","2000_mais","a_combinar"],"description":"`ate_100`, `100_500`, `500_2000`, `2000_mais` or `a_combinar`."},"espaco":{"type":"array","items":{"type":"string"},"description":"Placement ids from `GET /api/partners`, up to 6."},"duracao":{"type":"string","enum":["30","90","365"],"description":"Exposure in days: `30`, `90` or `365`."},"pagamento":{"type":"string","enum":["usdc","deposito","a_combinar"],"description":"`usdc`, `deposito` or `a_combinar`."}},"required":["name","email","message"]}},{"name":"create_endpoint","description":"Creates a dead-man endpoint. Use cron+tz+grace_sec for a real schedule (mutually exclusive with interval_sec) or interval_sec for plain silence detection. max_duration_sec alerts when a run opened by /in/:id/start hangs. May return 402 x402 when it leaves the free tier.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"},"name":{"type":"string","description":"how you will recognise the routine in an alert; required, trimmed, max 80 chars, punctuation alone is rejected"},"interval_sec":{"type":"number","description":"Tolerated silence, in seconds. Below the free minimum, it costs."},"cron":{"type":"string","description":"five-field cron, e.g. 0 3 * * *"},"paused_until":{"type":"string","description":"maintenance window end (UTC ISO), max 30 days ahead"},"tz":{"type":"string","description":"IANA time zone for cron, default UTC"},"grace_sec":{"type":"number","description":"tolerance after the scheduled time, default 90, min 30"},"max_duration_sec":{"type":"number","description":"ceiling for an open run in seconds, 60..86400; null or 0 turns it off"},"alert_repeat_sec":{"type":"number","description":"gap before the same incident alerts again, 3600..2592000; null keeps the 86400 default"},"tags":{"type":"array","items":{"type":"string"},"description":"up to 8 tags to group the monitor; lower-cased, [a-z0-9._-], max 32 chars each"},"alert_to":{"type":"string","description":"E-mail to alert on a miss; without it, the account is alerted."},"alert_url":{"type":"string","description":"Public HTTPS URL that receives a POST on a miss (Slack Incoming, Discord, n8n)."}},"required":["guest_token","name"]}},{"name":"create_guest","description":"Creates a guest token hp_…","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"delete_endpoint","description":"Removes the owner's endpoint.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"},"id":{"type":"string","description":"ID of the monitor to deactivate."}},"required":["guest_token","id"]}},{"name":"get_endpoint","description":"Status of one endpoint (use the endpoint token if you have it).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Monitor ID, from `Monitor.id`."},"token":{"type":"string","description":"endpoint token (query)"},"guest_token":{"type":"string"}},"required":["id"]}},{"name":"health","description":"Liveness.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"import_crontab","description":"Reads 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"},"crontab":{"type":"string","description":"the crontab text"},"apply":{"type":"string","description":"\"1\" to create the monitors"}},"required":["guest_token","crontab"]}},{"name":"ingest_key","description":"Returns (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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"}}}},{"name":"ingest_key_rotate","description":"Rotates the ingest key; the previous one stops creating monitors. Existing ones keep working.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"}}}},{"name":"list_endpoints","description":"Lists the guest's/session's endpoints.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"}},"required":["guest_token"]}},{"name":"list_events","description":"Latest ingest pings.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the monitor."},"token":{"type":"string","description":"Monitor token, alternative to the `X-Hook-Token` header."},"guest_token":{"type":"string"}},"required":["id"]}},{"name":"list_templates","description":"Ingest snippets and the JSON HookPulse POSTs on a miss.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"ping_ingest","description":"Simulates the cron: GET on /in/:id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Monitor ID, from `Monitor.ingest_url`."}},"required":["id"]}},{"name":"ping_slug","description":"Ping that creates its own monitor on the first hit. Same slug = same monitor; 402 when the free tier is full, and then nothing is written.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ingestKey":{"type":"string","description":"Ingest key, from `GET /api/ingest-key`.","enum":["hpk_exemplo"]},"slug":{"type":"string","description":"Name of the job; it becomes the monitor name."}},"required":["ingestKey","slug"]}},{"name":"pricing","description":"Current public prices and free allowances; no charge.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"signal_exit_code","description":"The shell exit status: 0 behaves like a ping, 1-255 record the code as a failure.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Monitor ID, from `Monitor.ingest_url`."},"exit_code":{"type":"number","description":"Exit status, 0 to 255. Outside that range it is a 400."}},"required":["id","exit_code"]}},{"name":"signal_fail","description":"Says the run FAILED. The ingest never sends e-mail: the 5-minute cron turns it into an alert with reason `fail`, under the same one-per-24h cap.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Monitor ID, from `Monitor.ingest_url`."}},"required":["id"]}},{"name":"signal_start","description":"Says 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Monitor ID, from `Monitor.ingest_url`."}},"required":["id"]}},{"name":"status_feed_rotate","description":"Rotates the status feed token; the previous URL stops working.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"}}}},{"name":"status_feed_url","description":"Public URL (JSON and RSS) with the status of all the owner's endpoints.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guest_token":{"type":"string"}}}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-20T11:39:26.572Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:39:26.503Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 265ms"]},"poisoning":{"score":15,"max":15,"notes":["22 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://hookpulse.net/mcp","reachable":true,"authRequired":false,"latencyMs":265,"serverInfo":{"name":"HookPulse","version":"edeb64b6"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://hookpulse.net/icon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}