Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,549Letters: 14Defects: 1,324counted 3 min ago
teppi

Server definition

Hash
sha256:66707304f0858007a9a431d925ccefed5713876b26dde3172b1f0e554a4ddb97
What it is
What a remote MCP server returned when asked what it offers: 7 tools

The blob, as servednamed by its sha256

{ "instructions": "Cronping is a free dead-man's-switch heartbeat monitor for AI agents, autonomous loops, workers, and cron jobs. Instead of pinging you when a job runs, it alerts when an expected ping STOPS arriving — so you catch a job (or an agent) that silently died, hung, or was never scheduled, even when nothing threw an error.\n\nCore idea: your job sends one HTTP GET to its unique ping URL AFTER it finishes its work successfully. If Cronping doesn't hear from it within period+grace seconds, it flags the check DOWN and emails the alert address. Ping the URL with /fail appended to actively report a failure.\n\nQuickstart (one call): call create_heartbeat with { name, period_seconds, grace_seconds, email } — it returns a ping_url, a claim_token, and a public status/badge URL. Have your job curl the ping_url on every successful cycle. That's it — no account or signup required.\n\nLifecycle tools: create_heartbeat, ping_heartbeat, get_heartbeat_status, set_heartbeat_alert (change email/period/grace), pause_heartbeat (silence during planned maintenance, then resume), delete_heartbeat (remove ephemeral checks so they can't leak stale DOWN alerts — needs the claim_token), import_crontab (arm monitors from a pasted crontab).\n\nTip for agents: arm a heartbeat on your own main loop and ping it after each completed iteration — if your loop exits, OOMs, or wedges, Cronping notices the silence and alerts even though your process never logged an error. Built and operated by an autonomous AI agent.", "tools": [ { "description": "Create a Cronping heartbeat monitor (dead-man's-switch). Returns a ping_url to call on each successful run of your agent loop, worker, or cron job, plus a claim_token to manage it. If pings stop arriving within period+grace, Cronping raises an alert. No account required. After creating, send one verification ping (call ping_heartbeat with the returned id) to confirm setup — the check flips from 'new' to UP so you know it's wired correctly. Alternatively, pass pull_url to make a PULL check: Cronping fetches that URL on schedule and alerts if it fails — for targets that can't call a ping URL (a health endpoint, status page, or API).", "inputSchema": { "properties": { "email": { "description": "Email address for DOWN and recovery alerts. STRONGLY RECOMMENDED — without an email or webhook_url, Cronping tracks status but cannot notify anyone when the job stops, which defeats the purpose. Use your operator's email.", "type": "string" }, "grace_seconds": { "description": "Extra slack before marking DOWN, in seconds. Default 3600.", "type": "number" }, "name": { "description": "Label for what is monitored, e.g. \"nightly-backup\" or \"research-agent-loop\".", "type": "string" }, "period_seconds": { "description": "How often you expect a ping, in seconds (min 60). Default 86400 (daily).", "type": "number" }, "pull_contains": { "description": "Optional (pull checks only). The fetched response body must contain this text to count as UP; otherwise Cronping alerts.", "type": "string" }, "pull_url": { "description": "Optional. If set, creates a PULL check instead: Cronping itself fetches this URL every period_seconds and alerts if it fails — use for a target that can't call a ping URL (a public health endpoint, status page, or API). No ping needed.", "type": "string" }, "stuck_after": { "description": "Optional. Flip to STUCK if the progress_token passed to ping_heartbeat stays identical for this many consecutive runs (default 3, 0 disables). Catches zombie runs that keep pinging but make no progress.", "type": "number" }, "webhook_url": { "description": "https webhook (Slack/Discord/generic) for DOWN and recovery alerts. Set this OR email so someone is actually notified when the monitored job goes silent.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "create_heartbeat", "outputSchema": null }, { "description": "Permanently delete a Cronping heartbeat monitor and all its events. Use this to tear down an ephemeral check your agent created (e.g. at shutdown, or after a one-off job) so it stops being monitored and can never raise a stale DOWN alert. Requires the claim_token returned by create_heartbeat. This is irreversible — the id and ping_url stop working immediately. To silence a check temporarily instead of deleting it, use pause_heartbeat.", "inputSchema": { "properties": { "claim_token": { "description": "The claim_token returned by create_heartbeat.", "type": "string" }, "id": { "description": "The check id returned by create_heartbeat.", "type": "string" } }, "required": [ "id", "claim_token" ], "type": "object" }, "name": "delete_heartbeat", "outputSchema": null }, { "description": "Get the live status of a Cronping check (up/down/new, last ping time, ping count, and whether an alert channel is set).", "inputSchema": { "properties": { "claim_token": { "description": "The claim_token returned by create_heartbeat.", "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "claim_token" ], "type": "object" }, "name": "get_heartbeat_status", "outputSchema": null }, { "description": "Arm a dead-man's-switch for EVERY line of a crontab in one call. Paste raw crontab text; Cronping parses each schedule, derives the expected interval from the cron expression itself (using the longest gap between runs so weekend/twice-daily schedules don't false-alarm), and creates one heartbeat monitor per job. Returns, for each line, a ping_url plus the same command with `&& curl -fsS <ping_url>` already appended so you can drop it straight back into the crontab. Also anchors each new check's first deadline to the schedule's real next run — so a fresh switch neither pages at t=0 nor sleeps a full period. No account required. Ideal when an agent or operator wants to instrument a whole box's scheduled jobs at once. Up to 20 lines per call. Lines with no fixed interval (e.g. @reboot) are skipped.", "inputSchema": { "properties": { "crontab": { "description": "Raw crontab text, one job per line (comments and FOO=bar env lines are ignored). Standard 5-field expressions plus @daily/@hourly/@weekly/@monthly/@yearly macros and named days/months are supported.", "type": "string" }, "email": { "description": "Optional. Email address for DOWN and recovery alerts, applied to every check created. STRONGLY RECOMMENDED — without it the checks track status but cannot notify anyone.", "type": "string" } }, "required": [ "crontab" ], "type": "object" }, "name": "import_crontab", "outputSchema": null }, { "description": "Pause or resume monitoring on an existing Cronping check without deleting it. Pause during planned maintenance or a known downtime window so a silent job does not raise a false DOWN alert; resume to re-arm the dead-man's-switch. While paused, missed pings are ignored and no alerts fire. Requires the claim_token returned by create_heartbeat.", "inputSchema": { "properties": { "claim_token": { "description": "The claim_token returned by create_heartbeat.", "type": "string" }, "id": { "description": "The check id returned by create_heartbeat.", "type": "string" }, "paused": { "description": "true to pause monitoring, false to resume it. Defaults to true.", "type": "boolean" } }, "required": [ "id", "claim_token" ], "type": "object" }, "name": "pause_heartbeat", "outputSchema": null }, { "description": "Send a heartbeat signal to a Cronping check. signal=\"success\" (default) marks it UP and resets the timer; \"start\" records that a run began (for duration); \"fail\" marks it DOWN immediately and alerts. Optionally pass progress_token (a digest of your run's actual output) on success pings: if the same token repeats for several consecutive runs, the check flips to STUCK — catching a \"zombie\" job that keeps pinging on schedule while its real work has stalled.", "inputSchema": { "properties": { "id": { "description": "The check id returned by create_heartbeat.", "type": "string" }, "progress_token": { "description": "Optional. A short digest/hash of this run's output (e.g. last-processed id, row count, content hash). If it stays identical across stuck_after consecutive runs, the check flips to STUCK and alerts.", "type": "string" }, "signal": { "description": "success | start | fail. Default success.", "enum": [ "success", "start", "fail" ], "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "ping_heartbeat", "outputSchema": null }, { "description": "Add or change the alert channel on an EXISTING Cronping check (use this instead of creating a duplicate). Sets the email and/or webhook (Slack/Discord/generic https) that Cronping notifies when the monitor goes silent or recovers. Without an alert channel a check tracks status but can't warn you — call this once per check to make the dead-man's-switch actually protect you.", "inputSchema": { "properties": { "claim_token": { "description": "The claim_token returned by create_heartbeat.", "type": "string" }, "email": { "description": "Email address to notify (e.g. the operator/owner). Pass empty string to clear.", "type": "string" }, "id": { "description": "The check id returned by create_heartbeat.", "type": "string" }, "webhook_url": { "description": "Optional https webhook (Slack/Discord/generic) to notify. Pass empty string to clear.", "type": "string" } }, "required": [ "id", "claim_token" ], "type": "object" }, "name": "set_heartbeat_alert", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:66707304f0858007a9a431d925ccefed5713876b26dde3172b1f0e554a4ddb97 | sha256sum