Skip to main content
Glama

Create check

create_check
Idempotent

Create a supported check. Requires an idempotency key. Assigning notification groups or dashboards needs their own permissions. Website and TCP checks run from the account's default probe location unless probe_locations lists region ids such as us-east-1. A plan limit returns quota_exceeded with the limit and, when available, a billing upgrade URL; nothing is created.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "check": "<check>",
      "idempotency_key": "<idempotency_key>"
    },
    "name": "create_check"
  }
}

Input Schema

NameRequiredDescriptionDefault
checkYesThe new check. name and kind are required; the other fields must be ones the kind accepts.
idempotency_keyYesUnique key for this create, such as a UUID. Repeating a request with the same key and arguments returns the first result instead of creating a duplicate.

Output Schema

NameRequiredDescriptionDefault
idYes
statusYes
expires_onYes
configurationYes
dashboard_idsYes
status_reasonYes
last_activity_atYes
notification_group_idsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • changedOutput schema / properties / configuration / properties / cron_expression / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "maxLength": 255,
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "description": "Five-field cron schedule, such as 0 3 * * *, read in timezone. Used when schedule_type is cron."
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / degraded_threshold / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "maximum": 2147483647,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "description": "How many of the check's locations must be up for it to be healthy; null means all of them. Can't be more than the check's location count."
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "type": "integer"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / dns_expected_values / anyOf
      Previous value: -[
      -  {
      -    "description": "Record values to compare with, such as IP addresses. Unused when dns_match_mode is resolves.",
      -    "items": {
      -      "maxLength": 4096,
      -      "type": "string"
      -    },
      -    "maxItems": 100,
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / dns_match_mode / anyOf
      Previous value: -[
      -  {
      -    "description": "resolves passes on any answer; exact needs the answers to equal dns_expected_values; includes needs every expected value among the answers.",
      -    "enum": [
      -      "resolves",
      -      "exact",
      -      "includes"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "resolves",
      +      "exact",
      +      "includes"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / dns_record_type / anyOf
      Previous value: -[
      -  {
      -    "description": "Record type to look up.",
      -    "enum": [
      -      "A",
      -      "AAAA",
      -      "CNAME",
      -      "MX",
      -      "TXT",
      -      "NS",
      -      "CAA"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "A",
      +      "AAAA",
      +      "CNAME",
      +      "MX",
      +      "TXT",
      +      "NS",
      +      "CAA"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / expected_status_code / anyOf
      Previous value: -[
      -  {
      -    "description": "HTTP status that counts as up, such as 200.",
      -    "maximum": 599,
      -    "minimum": 100,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / failing_threshold / anyOf
      Previous value: -[
      -  {
      -    "description": "How many of the check's locations must be up for it to avoid being down. A location count, not a number of failed runs. Can't be more than the check's location count.",
      -    "maximum": 2147483647,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / follow_redirects / anyOf
      Previous value: -[
      -  {
      -    "description": "Follow redirects and check the final response's status.",
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / grace_period_seconds / anyOf
      Previous value: -[
      -  {
      -    "description": "Seconds a heartbeat may run late before the check is marked late.",
      -    "maximum": 2147483647,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / hostname / anyOf
      Previous value: -[
      -  {
      -    "description": "Hostname to check, without a scheme or path, such as example.com.",
      -    "maxLength": 255,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / interval_seconds / anyOf
      Previous value: -[
      -  {
      -    "description": "Seconds between runs: how often a heartbeat is expected, or how often Pingstack runs the check. Can't be below the plan's min_interval_seconds.",
      -    "maximum": 2147483647,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / configuration / properties / kind / description
      Removed value: -"What the check monitors: ping (a heartbeat from a cron job or scheduled task), website (HTTP), dns, domain (registration expiry), ssl_certificate (certificate expiry) or tcp (an open port)."
    • changedOutput schema / properties / configuration / properties / kind / enum
      Previous value: -[
      -  "ping",
      -  "website",
      -  "dns",
      -  "domain",
      -  "ssl_certificate",
      -  "tcp"
      -]New value: +[
      +  "ping",
      +  "website",
      +  "domain",
      +  "ssl_certificate",
      +  "dns",
      +  "tcp"
      +]
    • changedOutput schema / properties / configuration / properties / port / anyOf
      Previous value: -[
      -  {
      -    "description": "TCP port that must accept a connection.",
      -    "maximum": 65535,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / probe_locations / anyOf
      Previous value: -[
      -  {
      -    "description": "Region ids the check runs from, such as us-east-1, from the account's probe_locations. Replaces the whole set, up to the plan's included_probe_locations.",
      -    "items": {
      -      "maxLength": 100,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "maxItems": 100,
      -    "minItems": 1,
      -    "type": "array",
      -    "uniqueItems": true
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / renewal_critical_days / anyOf
      Previous value: -[
      -  {
      -    "description": "Days before expiry when the check goes down. Lower than renewal_warning_days.",
      -    "maximum": 2147483647,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / renewal_warning_days / anyOf
      Previous value: -[
      -  {
      -    "description": "Days before expiry when the check becomes degraded.",
      -    "maximum": 2147483647,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / schedule_type / anyOf
      Previous value: -[
      -  {
      -    "description": "interval expects a heartbeat every interval_seconds; cron expects one on cron_expression's schedule.",
      -    "enum": [
      -      "interval",
      -      "cron"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "interval",
      +      "cron"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / timezone / anyOf
      Previous value: -[
      -  {
      -    "description": "IANA time zone for cron_expression, such as America/New_York.",
      -    "maxLength": 255,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / configuration / properties / url
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / configuration / properties / url_has_query
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / configuration / properties / value_critical_threshold / anyOf
      Previous value: -[
      -  {
      -    "description": "Reported value that makes the check go down. Past value_warning_threshold in value_direction.",
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / value_direction / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "enum": [
      -          "above",
      -          "below"
      -        ],
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "description": "For heartbeats that report a number: whether values at or above, or at or below, the thresholds are bad."
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "enum": [
      +          "above",
      +          "below"
      +        ],
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / configuration / properties / value_warning_threshold / anyOf
      Previous value: -[
      -  {
      -    "description": "Reported value that makes the check degraded. Set together with value_critical_threshold; both null turns value alerts off.",
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / status_reason
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "status",
      -  "last_activity_at",
      -  "expires_on",
      -  "configuration",
      -  "notification_group_ids",
      -  "dashboard_ids"
      -]New value: +[
      +  "id",
      +  "status",
      +  "status_reason",
      +  "last_activity_at",
      +  "expires_on",
      +  "configuration",
      +  "notification_group_ids",
      +  "dashboard_ids"
      +]
  2. Added

TDQS

A4/5.0
Behavior5/5

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

Beyond the annotations (write, idempotent, non-destructive), the description discloses real behavioral context: permission requirements for linking notification groups and dashboards, the default probe-location fallback, and a specific failure mode where a plan limit returns quota_exceeded with a billing URL and creates nothing. The failure semantics are especially valuable because they tell the agent the call is atomic on quota errors.

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

Conciseness4/5

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

Four short sentences, each carrying distinct information, with the operation and the idempotency requirement front-loaded. There is no filler, though the opening sentence is terse enough that "supported" carries little meaning on its own.

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

Completeness4/5

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

For a create tool with a large nested object schema, annotations, and an output schema, the description covers the gaps that structured fields can't: permissions, defaults, and quota-error behavior. Minor omissions remain (e.g., whether a newly created check starts active or paused), but nothing critical to correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the nested check fields are already fully documented and the baseline is 3. The description adds one genuinely new fact beyond the schema: that website and TCP checks fall back to the account's default probe location when probe_locations is omitted, plus the us-east-1 style region-id format.

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

Purpose4/5

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

The description opens with a specific verb and resource ("Create a supported check"), which is unambiguous about what operation is performed. It does not, however, contrast with sibling operations such as update_check or attach_check_to_dashboard, so the agent gets no explicit differentiation beyond the name itself.

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

Usage Guidelines3/5

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

It supplies invocation prerequisites (idempotency key required, extra permissions for notification groups/dashboards) and conditional behavior (default probe location), which helps the agent call it correctly. It never states when to prefer update_check or attach_check_to_dashboard over this tool, so the when-to-use-vs-alternatives guidance is implied rather than explicit.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources