Manage cron/heartbeat checks, read pings and flips, pause/resume/delete on Healthchecks.io.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
CREATES a new check — this MODIFIES live monitoring config. Provide a `timeout` (simple period-based check) OR a `schedule` + `tz` (cron-based check); the two are mutually exclusive. Use `unique` to avoid creating duplicates. Assign notifications via `channels`. Healthchecks: POST /checks/. Returns the created check (201) or the existing match (200).
Server's timezone for the cron `schedule`, e.g. "Europe/Riga".
Free-form description of the check.
Human-readable name for the check.
URL slug (used for slug-based ping URLs).
Space-separated list of tags, e.g. "prod db backups".
Grace time in seconds after the deadline before the check goes down.
Dedupe fields — if a check already matches on these (e.g. ["name"]), it is returned instead of created.
Allowed ping HTTP methods: "" (any) or "POST" (POST-only).
Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`.
Integrations to assign: "*" for all, or a comma-separated list of integration ids.
Cron expression for the expected ping schedule (e.g. "15 5 * * *"). Mutually exclusive with `timeout`; requires `tz`.
If true, a paused check does not auto-resume on the next ping (resume manually).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
CREATES a new check — this MODIFIES live monitoring config. Provide a `timeout` (simple period-based check) OR a `schedule` + `tz` (cron-based check); the two are mutually exclusive. Use `unique` to avoid creating duplicates. Assign notifications via `channels`. Healthchecks: POST /checks/. Returns the created check (201) or the existing match (200).
| Argument | Type | Description |
|---|---|---|
| tz | string | Server's timezone for the cron `schedule`, e.g. "Europe/Riga". |
| desc | string | Free-form description of the check. |
| name | string | Human-readable name for the check. |
| slug | string | URL slug (used for slug-based ping URLs). |
| tags | string | Space-separated list of tags, e.g. "prod db backups". |
| grace | integer | Grace time in seconds after the deadline before the check goes down. |
| unique | array | Dedupe fields — if a check already matches on these (e.g. ["name"]), it is returned instead of created. |
| methods | string | Allowed ping HTTP methods: "" (any) or "POST" (POST-only). |
| timeout | integer | Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`. |
| channels | string | Integrations to assign: "*" for all, or a comma-separated list of integration ids. |
| schedule | string | Cron expression for the expected ping schedule (e.g. "15 5 * * *"). Mutually exclusive with `timeout`; requires `tz`. |
| manual_resume | boolean | If true, a paused check does not auto-resume on the next ping (resume manually). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tz": {
"type": "string",
"description": "Server's timezone for the cron `schedule`, e.g. \"Europe/Riga\"."
},
"desc": {
"type": "string",
"description": "Free-form description of the check."
},
"name": {
"type": "string",
"description": "Human-readable name for the check."
},
"slug": {
"type": "string",
"description": "URL slug (used for slug-based ping URLs)."
},
"tags": {
"type": "string",
"description": "Space-separated list of tags, e.g. \"prod db backups\"."
},
"grace": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Grace time in seconds after the deadline before the check goes down."
},
"unique": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dedupe fields — if a check already matches on these (e.g. [\"name\"]), it is returned instead of created."
},
"methods": {
"type": "string",
"description": "Allowed ping HTTP methods: \"\" (any) or \"POST\" (POST-only)."
},
"timeout": {
"type": "integer",
"maximum": 31536000,
"minimum": 60,
"description": "Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`."
},
"channels": {
"type": "string",
"description": "Integrations to assign: \"*\" for all, or a comma-separated list of integration ids."
},
"schedule": {
"type": "string",
"description": "Cron expression for the expected ping schedule (e.g. \"15 5 * * *\"). Mutually exclusive with `timeout`; requires `tz`."
},
"manual_resume": {
"type": "boolean",
"description": "If true, a paused check does not auto-resume on the next ping (resume manually)."
}
}
}PERMANENTLY DELETES a check by UUID — this MODIFIES live monitoring config and cannot be undone. Healthchecks: DELETE /checks/{uuid}. Returns the deleted check's last known state.
| Argument | Type | Description |
|---|---|---|
| uuid* | string | The check's UUID to delete. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"uuid": {
"type": "string",
"description": "The check's UUID to delete."
}
}
}Get a single check by its UUID (or its unique read-only key). Returns the check's full state — status, timeout/schedule, grace, tags, last ping. Healthchecks: GET /checks/{uuid}.
| Argument | Type | Description |
|---|---|---|
| uuid* | string | The check's UUID, or its unique read-only key. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"uuid": {
"type": "string",
"description": "The check's UUID, or its unique read-only key."
}
}
}Get the logged request body of a single ping, returned as PLAIN TEXT (verbatim, not JSON). Healthchecks: GET /checks/{uuid}/pings/{n}/body.
| Argument | Type | Description |
|---|---|---|
| n* | integer | The ping's sequence number (the `n` field from list_pings). |
| uuid* | string | The check's UUID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid",
"n"
],
"properties": {
"n": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The ping's sequence number (the `n` field from list_pings)."
},
"uuid": {
"type": "string",
"description": "The check's UUID."
}
}
}List the project's status-badge URLs per tag (plus "*" for the overall status) — {badges:{...}}. Healthchecks: GET /badges/.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List all checks in the project, optionally filtered by slug and/or tags. Returns {checks:[...]} — each check's status, schedule, last ping, and ping URL. Healthchecks: GET /checks/.
| Argument | Type | Description |
|---|---|---|
| tag | array | Filter to checks carrying ALL of these tags (each is sent as a separate `tag` query param). |
| slug | string | Filter to checks with this exact slug. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tag": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to checks carrying ALL of these tags (each is sent as a separate `tag` query param)."
},
"slug": {
"type": "string",
"description": "Filter to checks with this exact slug."
}
}
}List a check's status changes ("flips") over time — [{timestamp, up}]. Optionally scope by a lookback window or an explicit start/end range. Healthchecks: GET /checks/{uuid}/flips/.
| Argument | Type | Description |
|---|---|---|
| end | integer | Return only flips at/before this Unix timestamp. |
| uuid* | string | The check's UUID. |
| start | integer | Return only flips at/after this Unix timestamp. |
| seconds | integer | Return only flips from the last N seconds. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Return only flips at/before this Unix timestamp."
},
"uuid": {
"type": "string",
"description": "The check's UUID."
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Return only flips at/after this Unix timestamp."
},
"seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Return only flips from the last N seconds."
}
}
}List the project's notification integrations ("channels") — {channels:[{id, name, kind}]}. The ids are what you assign to a check's `channels` field. Healthchecks: GET /channels/.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List a check's logged pings (100 on the free plan, 1000 on paid), most recent first. Each ping: type, date, n, scheme, remote_addr, method, ua, rid, duration, body_url. Healthchecks: GET /checks/{uuid}/pings/.
| Argument | Type | Description |
|---|---|---|
| uuid* | string | The check's UUID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"uuid": {
"type": "string",
"description": "The check's UUID."
}
}
}PAUSES a check — disables monitoring without deleting it (it stops going down for missed pings until it next receives a ping or is resumed). This MODIFIES live monitoring config. Healthchecks: POST /checks/{uuid}/pause (empty body).
| Argument | Type | Description |
|---|---|---|
| uuid* | string | The check's UUID to pause. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"uuid": {
"type": "string",
"description": "The check's UUID to pause."
}
}
}RESUMES a paused check — re-enables monitoring. This MODIFIES live monitoring config. Returns HTTP 409 (surfaced cleanly) if the check is not currently paused. Healthchecks: POST /checks/{uuid}/resume (empty body).
| Argument | Type | Description |
|---|---|---|
| uuid* | string | The check's UUID to resume. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"uuid": {
"type": "string",
"description": "The check's UUID to resume."
}
}
}UPDATES an existing check by UUID — this MODIFIES live monitoring config. Send only the fields you want to change (timeout and schedule remain mutually exclusive). Healthchecks: POST /checks/{uuid}. Returns the updated check.
| Argument | Type | Description |
|---|---|---|
| tz | string | Server's timezone for the cron `schedule`, e.g. "Europe/Riga". |
| desc | string | Free-form description of the check. |
| name | string | Human-readable name for the check. |
| slug | string | URL slug (used for slug-based ping URLs). |
| tags | string | Space-separated list of tags, e.g. "prod db backups". |
| uuid* | string | The check's UUID to update. |
| grace | integer | Grace time in seconds after the deadline before the check goes down. |
| unique | array | Dedupe fields — if a check already matches on these (e.g. ["name"]), it is returned instead of created. |
| methods |
| string |
| Allowed ping HTTP methods: "" (any) or "POST" (POST-only). |
| timeout | integer | Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`. |
| channels | string | Integrations to assign: "*" for all, or a comma-separated list of integration ids. |
| schedule | string | Cron expression for the expected ping schedule (e.g. "15 5 * * *"). Mutually exclusive with `timeout`; requires `tz`. |
| manual_resume | boolean | If true, a paused check does not auto-resume on the next ping (resume manually). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uuid"
],
"properties": {
"tz": {
"type": "string",
"description": "Server's timezone for the cron `schedule`, e.g. \"Europe/Riga\"."
},
"desc": {
"type": "string",
"description": "Free-form description of the check."
},
"name": {
"type": "string",
"description": "Human-readable name for the check."
},
"slug": {
"type": "string",
"description": "URL slug (used for slug-based ping URLs)."
},
"tags": {
"type": "string",
"description": "Space-separated list of tags, e.g. \"prod db backups\"."
},
"uuid": {
"type": "string",
"description": "The check's UUID to update."
},
"grace": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Grace time in seconds after the deadline before the check goes down."
},
"unique": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dedupe fields — if a check already matches on these (e.g. [\"name\"]), it is returned instead of created."
},
"methods": {
"type": "string",
"description": "Allowed ping HTTP methods: \"\" (any) or \"POST\" (POST-only)."
},
"timeout": {
"type": "integer",
"maximum": 31536000,
"minimum": 60,
"description": "Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`."
},
"channels": {
"type": "string",
"description": "Integrations to assign: \"*\" for all, or a comma-separated list of integration ids."
},
"schedule": {
"type": "string",
"description": "Cron expression for the expected ping schedule (e.g. \"15 5 * * *\"). Mutually exclusive with `timeout`; requires `tz`."
},
"manual_resume": {
"type": "boolean",
"description": "If true, a paused check does not auto-resume on the next ping (resume manually)."
}
}
}