Skip to main content
Glama

Resume a heartbeat monitor

resume_heartbeat
Idempotent

Resume a paused heartbeat by returning it to PENDING with no deadline, preventing late reports until its next success ping restarts the clock.

Instructions

Resume one paused heartbeat: it goes back to PENDING with no deadline, so it is not reported late until its next success ping restarts the clock. Use it once the job runs again; to change its timing use update_heartbeat. There is no bulk resume for heartbeats. Requires a key with the write scope. Resuming one that is not paused resets it to PENDING the same way. Returns the heartbeat.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
heartbeat_idYesThe heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
nameYes
tagsNo
stateYesKnown values: PENDING, UP, DOWN, PAUSED.
ping_urlYes
is_activeYes
created_atYes
overdue_atYes
updated_atYes
channel_idsNo
last_ping_atYes
grace_secondsYes
last_start_atYes
period_secondsYes
last_success_atYes
last_duration_msYes
notification_cooldown_secondsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.6.1
    • addedInput schema / properties / heartbeat_id / description
      Added value: +"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "channel_ids": {
      +      "items": {
      +        "format": "uuid",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "created_at": {
      +      "type": "string"
      +    },
      +    "grace_seconds": {
      +      "type": "integer"
      +    },
      +    "id": {
      +      "format": "uuid",
      +      "type": "string"
      +    },
      +    "is_active": {
      +      "type": "boolean"
      +    },
      +    "last_duration_ms": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "last_ping_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "last_start_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "last_success_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "name": {
      +      "type": "string"
      +    },
      +    "notification_cooldown_seconds": {
      +      "type": "integer"
      +    },
      +    "overdue_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "period_seconds": {
      +      "type": "integer"
      +    },
      +    "ping_url": {
      +      "type": "string"
      +    },
      +    "state": {
      +      "description": "Known values: PENDING, UP, DOWN, PAUSED.",
      +      "type": "string"
      +    },
      +    "tags": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "updated_at": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "name",
      +    "state",
      +    "period_seconds",
      +    "grace_seconds",
      +    "ping_url",
      +    "last_ping_at",
      +    "last_success_at",
      +    "last_start_at",
      +    "last_duration_ms",
      +    "overdue_at",
      +    "notification_cooldown_seconds",
      +    "is_active",
      +    "created_at",
      +    "updated_at"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.5.4

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by describing the resulting state (back to PENDING with no deadline), the reporting consequence (not late until the next success ping restarts the clock), the auth requirement (write scope), and the return ("Returns the heartbeat"). The idempotentHint is corroborated by the note that resuming an already-active heartbeat behaves the same way.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, each carrying distinct information: state effect, timing rule, alternative tool, bulk limitation, auth requirement, edge case, return. Front-loaded with the action and its state consequence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state-changing tool with an output schema, the description covers everything an agent needs: what changes, what it requires, what it returns, and what happens in the non-obvious case. Return-value detail is correctly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single heartbeat_id already documents its uuid format and 404 conditions. The description adds no id-specific syntax or sourcing detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb + resource ("Resume one paused heartbeat") and immediately disambiguates from siblings by saying there is no bulk resume for heartbeats, distinguishing it from bulk_resume_monitors and resume_monitor. An agent can route to it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ("once the job runs again") and names the alternative for a different need ("to change its timing use update_heartbeat"). It also states the negative case (no bulk resume) and the surprising edge case (resuming a non-paused heartbeat still resets it to PENDING).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.