{
  "name": "HookPulse",
  "description": "Monitor backups, automations and scheduled tasks. Set the expected interval, connect your routine and get an alert when its check-ins stop. Ten monitors are free.",
  "url": "https://hookpulse.net",
  "provider": {
    "organization": "HookPulse",
    "url": "https://hookpulse.net",
    "email": "contato@hookpulse.net"
  },
  "documentationUrl": "https://hookpulse.net/llms.txt",
  "protocol": "mcp",
  "protocolUrl": "https://modelcontextprotocol.io",
  "interfaces": [
    {
      "transport": "streamable-http",
      "url": "https://hookpulse.net/mcp"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "authentication": "none"
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/markdown"
  ],
  "skills": [
    {
      "id": "api_index",
      "name": "api_index",
      "description": "Full index of the HookPulse API.",
      "endpoint": "GET /api/"
    },
    {
      "id": "health",
      "name": "health",
      "description": "Liveness.",
      "endpoint": "GET /api/health"
    },
    {
      "id": "create_guest",
      "name": "create_guest",
      "description": "Creates a guest token hp_…",
      "endpoint": "POST /api/guest"
    },
    {
      "id": "list_endpoints",
      "name": "list_endpoints",
      "description": "Lists the guest's/session's endpoints.",
      "endpoint": "GET /api/endpoints"
    },
    {
      "id": "create_endpoint",
      "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.",
      "endpoint": "POST /api/endpoints"
    },
    {
      "id": "import_crontab",
      "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.",
      "endpoint": "POST /api/import/crontab"
    },
    {
      "id": "get_endpoint",
      "name": "get_endpoint",
      "description": "Status of one endpoint (use the endpoint token if you have it).",
      "endpoint": "GET /api/endpoints/:id"
    },
    {
      "id": "delete_endpoint",
      "name": "delete_endpoint",
      "description": "Removes the owner's endpoint.",
      "endpoint": "DELETE /api/endpoints/:id"
    },
    {
      "id": "list_events",
      "name": "list_events",
      "description": "Latest ingest pings.",
      "endpoint": "GET /api/endpoints/:id/events"
    },
    {
      "id": "ping_ingest",
      "name": "ping_ingest",
      "description": "Simulates the cron: GET on /in/:id.",
      "endpoint": "GET /in/:id"
    },
    {
      "id": "signal_start",
      "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.",
      "endpoint": "GET /in/:id/start"
    },
    {
      "id": "signal_fail",
      "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.",
      "endpoint": "GET /in/:id/fail"
    },
    {
      "id": "signal_exit_code",
      "name": "signal_exit_code",
      "description": "The shell exit status: 0 behaves like a ping, 1-255 record the code as a failure.",
      "endpoint": "GET /in/:id/:exit_code"
    },
    {
      "id": "ingest_key",
      "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.",
      "endpoint": "GET /api/ingest-key"
    },
    {
      "id": "ingest_key_rotate",
      "name": "ingest_key_rotate",
      "description": "Rotates the ingest key; the previous one stops creating monitors. Existing ones keep working.",
      "endpoint": "DELETE /api/ingest-key"
    },
    {
      "id": "ping_slug",
      "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.",
      "endpoint": "GET /in/:ingestKey/:slug"
    },
    {
      "id": "billing",
      "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).",
      "endpoint": "GET /api/billing"
    },
    {
      "id": "status_feed_url",
      "name": "status_feed_url",
      "description": "Public URL (JSON and RSS) with the status of all the owner's endpoints.",
      "endpoint": "GET /api/status-feed"
    },
    {
      "id": "status_feed_rotate",
      "name": "status_feed_rotate",
      "description": "Rotates the status feed token; the previous URL stops working.",
      "endpoint": "DELETE /api/status-feed"
    },
    {
      "id": "list_templates",
      "name": "list_templates",
      "description": "Ingest snippets and the JSON HookPulse POSTs on a miss.",
      "endpoint": "GET /api/templates"
    },
    {
      "id": "contact",
      "name": "contact",
      "description": "Support. Agent without captcha → 402 $0.10 x402. After the 1st message: 429 + Retry-After (backoff).",
      "endpoint": "POST /api/contact"
    }
  ],
  "discovery": {
    "openapi": "https://hookpulse.net/openapi.json",
    "llms": "https://hookpulse.net/llms.txt",
    "okf": "https://hookpulse.net/okf/index.md",
    "numbers": "https://hookpulse.net/api/vitrine",
    "partnerships": "https://hookpulse.net/api/partners",
    "api_catalog": "https://hookpulse.net/.well-known/api-catalog",
    "x402": "https://hookpulse.net/.well-known/x402",
    "pricing": "https://hookpulse.net/pricing",
    "docs": "https://hookpulse.net/docs"
  },
  "updated": "2026-09-10"
}