Healthchecks.io MCP by usefulapi

Manage cron/heartbeat checks, read pings and flips, pause/resume/delete on Healthchecks.io.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
87%
Naming quality
78%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'healthchecksio_list_integrations' name length outside 3-30 rangein healthchecksio_list_integrations

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,320Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.81% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "healthchecksio": {
      "url": "https://healthchecksio.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://healthchecksio.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢healthchecksio_list_checks(slug, tag)

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/.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "description": "Filter to checks with this exact slug.",
      "type": "string"
    },
    "tag": {
      "description": "Filter to checks carrying ALL of these tags (each is sent as a separate `tag` query param).",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_get_check(uuid)

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}.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID, or its unique read-only key."
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_list_pings(uuid)

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/.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID."
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_get_ping_body(uuid, n)

Get the logged request body of a single ping, returned as PLAIN TEXT (verbatim, not JSON). Healthchecks: GET /checks/{uuid}/pings/{n}/body.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID."
    },
    "n": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "The ping's sequence number (the `n` field from list_pings)."
    }
  },
  "required": [
    "uuid",
    "n"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_list_flips(uuid, seconds, start, end)

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/.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID."
    },
    "seconds": {
      "description": "Return only flips from the last N seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "start": {
      "description": "Return only flips at/after this Unix timestamp.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "end": {
      "description": "Return only flips at/before this Unix timestamp.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_list_integrations

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/.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢healthchecksio_list_badges

List the project's status-badge URLs per tag (plus "*" for the overall status) — {badges:{...}}. Healthchecks: GET /badges/.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴healthchecksio_create_check(name, slug, tags, desc, timeout, ...)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Human-readable name for the check.",
      "type": "string"
    },
    "slug": {
      "description": "URL slug (used for slug-based ping URLs).",
      "type": "string"
    },
    "tags": {
      "description": "Space-separated list of tags, e.g. \"prod db backups\".",
      "type": "string"
    },
    "desc": {
      "description": "Free-form description of the check.",
      "type": "string"
    },
    "timeout": {
      "description": "Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`.",
      "type": "integer",
      "minimum": 60,
      "maximum": 31536000
    },
    "grace": {
      "description": "Grace time in seconds after the deadline before the check goes down.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "schedule": {
      "description": "Cron expression for the expected ping schedule (e.g. \"15 5 * * *\"). Mutually exclusive with `timeout`; requires `tz`.",
      "type": "string"
    },
    "tz": {
      "description": "Server's timezone for the cron `schedule`, e.g. \"Europe/Riga\".",
      "type": "string"
    },
    "manual_resume": {
      "description": "If true, a paused check does not auto-resume on the next ping (resume manually).",
      "type": "boolean"
    },
    "methods": {
      "description": "Allowed ping HTTP methods: \"\" (any) or \"POST\" (POST-only).",
      "type": "string"
    },
    "channels": {
      "description": "Integrations to assign: \"*\" for all, or a comma-separated list of integration ids.",
      "type": "string"
    },
    "unique": {
      "description": "Dedupe fields — if a check already matches on these (e.g. [\"name\"]), it is returned instead of created.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴healthchecksio_update_check(uuid, name, slug, tags, desc, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID to update."
    },
    "name": {
      "description": "Human-readable name for the check.",
      "type": "string"
    },
    "slug": {
      "description": "URL slug (used for slug-based ping URLs).",
      "type": "string"
    },
    "tags": {
      "description": "Space-separated list of tags, e.g. \"prod db backups\".",
      "type": "string"
    },
    "desc": {
      "description": "Free-form description of the check.",
      "type": "string"
    },
    "timeout": {
      "description": "Expected period between pings, in seconds (60..31536000). Mutually exclusive with `schedule`.",
      "type": "integer",
      "minimum": 60,
      "maximum": 31536000
    },
    "grace": {
      "description": "Grace time in seconds after the deadline before the check goes down.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "schedule": {
      "description": "Cron expression for the expected ping schedule (e.g. \"15 5 * * *\"). Mutually exclusive with `timeout`; requires `tz`.",
      "type": "string"
    },
    "tz": {
      "description": "Server's timezone for the cron `schedule`, e.g. \"Europe/Riga\".",
      "type": "string"
    },
    "manual_resume": {
      "description": "If true, a paused check does not auto-resume on the next ping (resume manually).",
      "type": "boolean"
    },
    "methods": {
      "description": "Allowed ping HTTP methods: \"\" (any) or \"POST\" (POST-only).",
      "type": "string"
    },
    "channels": {
      "description": "Integrations to assign: \"*\" for all, or a comma-separated list of integration ids.",
      "type": "string"
    },
    "unique": {
      "description": "Dedupe fields — if a check already matches on these (e.g. [\"name\"]), it is returned instead of created.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴healthchecksio_pause_check(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).

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID to pause."
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴healthchecksio_resume_check(uuid)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID to resume."
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴healthchecksio_delete_check(uuid)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "description": "The check's UUID to delete."
    }
  },
  "required": [
    "uuid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
failed observationversion not recorded—
failed observationversion not recorded—