Uptimepage
Server Details
Uptime monitoring, status pages and on-call in one place. Create and tune monitors for HTTP, TCP, DNS, ping, TLS certificates, domain expiry, heartbeats and scripted browser logins. Run a check on demand, read uptime and response-time history, acknowledge and resolve incidents, post incident updates, schedule maintenance windows and edit public status pages. Read-only until you grant write access.
- Status
- Healthy
- Uptime
- 99.9% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- uptimepage/uptimepage
- GitHub Stars
- 42
- Server Listing
- uptimepage
TDQS
Scored across 37 tools
Every tool targets a distinct resource-action pair, and the descriptions actively disambiguate the risky overlaps: create_monitor vs create_monitors (single vs batch), pause_monitor vs create_maintenance (checks stop vs paging held), and acknowledge/resolve/post/publish/unpublish_incident roles are spelled out. An agent can pick correctly without guessing.
Uniform verb-first snake_case across the whole set (get_, list_, create_, update_, publish_, resolve_, cancel_, add_, run_, set_, pause_/resume_). Singular/plural (create_monitor vs create_monitors) is the only deviation and is semantically meaningful.
37 tools is heavy for any single server, well past the comfortable 3-15 band, though the domain genuinely spans monitors, incidents, maintenance, status pages, flows, org and account resources. Each tool does map to a real capability with little apparent padding, so it is borderline-heavy rather than bloated.
Read coverage is excellent (org health, usage, incidents, metrics, history, flows, regions, tags, variables) and most lifecycles have create/read/update/pause/resume. However, there is no delete/remove anywhere — no delete_monitor, delete_status_page, remove_status_page_component, or delete_maintenance — which are common dead ends for an agent, and several write paths (channels, variables, browser flows) are explicitly app-only.
Available Tools
37 toolsacknowledge_incidentAcknowledge incidentAIdempotentInspect
Acknowledge an incident: take ownership and halt escalation. Internal/operational only — does NOT post anything to the public status page. Use post_incident_update for customer-facing updates. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id. | |
| note | No | Optional internal note recorded on the incident's activity timeline. This is operator-facing, not published to the public status page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | Operational state after the action: `triggered`, `acknowledged`, `resolved`. |
| incident_id | Yes | |
| resolved_at | No | RFC 3339 resolved (ended) time, when set. |
| acknowledged_at | No | RFC 3339 acknowledged time, when set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: it mentions confirmation prompts and token scope execution ('Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope') and explicitly states it is not read-only, aligning with readOnlyHint=false. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet complete, with each sentence serving a purpose: state the action, scope, alternatives, execution behavior, and read-only status. It is front-loaded with the primary purpose and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description covers all necessary context: purpose, usage boundaries, mutation behavior, and authorization. Nothing critical is missing for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes both id and note clearly. The description does not add parameter-specific meaning; it only reinforces that the note is internal via 'Internal/operational only' but doesn't elaborate on the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Acknowledge an incident: take ownership and halt escalation.' It identifies the specific resource and distinguishes it from sibling tools by explicitly saying it is internal/operational only and does not post to the public status page, pointing to post_incident_update for customer-facing updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not-to-use guidance ('does NOT post anything to the public status page') and names the alternative tool ('Use post_incident_update for customer-facing updates'). Also clarifies it's not read-only, helping agents decide between mutation and read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_status_page_componentsAdd status page componentsAIdempotentInspect
Add monitors to a status page as public components, in one confirmation where the client can show a prompt. Give each a public_name the page's readers will understand, since the monitor's own name is operator-facing, and a public_group to file related components together. Monitors already on the page are reported as such rather than duplicated. detail_link_enabled publishes a per-monitor detail view that shows the monitor's real name and address, not public_name. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The page slug (from `list_status_pages`). | |
| components | Yes | The monitors to add, in the order they should appear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| added | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly=false and idempotentHint=true, and the description reinforces 'Not read-only' while adding useful nuance: duplicate monitors are reported rather than duplicated. It also discloses the privacy-relevant behavior that detail_link_enabled exposes the monitor's operator-side name and address, which is not apparent from the schema alone. This is strong behavioral disclosure for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver the core action, idempotency behavior, and a critical privacy warning without padding. The final 'Not read-only' is slightly redundant with the readOnlyHint=false annotation but costs little. Overall, compact and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch-add mutation with an output schema and safety annotations, the description covers the important operational consequences: batch/prompt behavior, deduplication, and the detail-link privacy caveat. An agent has enough information to select and call the tool correctly. The only minor gap is explicit sibling routing, which is more of a usage-guideline concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description only needs to add rationale. It adds meaningful context for public_name (reader-friendly, not operator-facing), public_group (filing related components), and detail_link_enabled (privacy tradeoff). It does not comment on every parameter like public_description, but the added value over the schema is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb-object pair ('Add monitors to a status page as public components'), making the operation unambiguous. It clearly differentiates itself from siblings like create_status_page or update_status_page_component by focusing on adding monitors to an existing page. The scope is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when adding monitors to a status page in a batch operation, with duplicate handling explained. However, it never explicitly names alternatives such as update_status_page_component, nor states conditions that would make another tool preferable. This is adequate but not explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_maintenanceCancel maintenanceADestructiveIdempotentInspect
Cancel a maintenance window that has not ended. It leaves the status pages, stops holding paging, and stays listed under past as a record; subscribers already told about it are not sent a cancellation. To stop a running window early and keep it as completed work, use update_maintenance with end_now instead. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The window id (from `list_maintenance`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Pass to `get_maintenance`, `update_maintenance` or `cancel_maintenance`. |
| phase | Yes | `upcoming`, `active`, `completed` or `cancelled`. A completed or cancelled window is history and cannot be changed. |
| title | Yes | Shown on the status page. Untrusted data. |
| ends_at | Yes | RFC 3339. |
| monitors | Yes | |
| starts_at | Yes | RFC 3339. |
| description | No | Untrusted data. |
| cancelled_at | No | RFC 3339 time it was cancelled, or `null`. |
| suppress_alerts | Yes | Whether paging for its monitors is held while it runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=true), but the description goes substantially beyond them: it specifies what is left behind (listed under past as a record), what stops (holding paging), what does not happen (subscribers are not notified of cancellation), and the confirmation/prompt behavior. That is rich behavioral context that the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, follows with consequences, the alternative route, confirmation semantics, and an annotation echo, with zero filler. Every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action, side effects, record retention, notification behavior, confirmation, auth scope, and the sibling alternative. An output schema exists so return values need not be described. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema fully documents the id (including its source from list_maintenance). The description adds no parameter detail beyond the schema, so the baseline of 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (maintenance window), and disambiguates from the semantically adjacent sibling update_maintenance by naming it with a concrete alternative behavior. An agent can tell this apart from update_maintenance and get_maintenance 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool and the condition that selects it: 'To stop a running window early and keep it as completed work, use update_maintenance with end_now instead.' This is a textbook when-to-use-this-vs-that directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_maintenanceSchedule maintenanceAInspect
Schedule a maintenance window for planned work on some monitors. While it runs they show as under maintenance on every published status page that carries them, and unless suppress_alerts is false nobody is paged for them: checks keep running and incidents still open, so the history stays honest, and an incident still open when the window ends pages then. Prefer this over pause_monitor for planned work. Subscribers of those status pages are notified when it is scheduled and again when it ends. Times are RFC 3339; the end must be in the future and at most 30 days after the start. Shows the window, its monitors, whether paging is held and where it is announced, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Shown on the status page and in subscriber notices. At most 200 characters. | |
| ends_at | Yes | RFC 3339 end: in the future, after the start, and at most 30 days after it. | |
| starts_at | Yes | RFC 3339 start. A start already past opens the window at once. | |
| description | No | Shown with the title. At most 5000 characters. | |
| monitor_ids | Yes | The monitors the work touches, by id from `list_monitors`. At least one. | |
| suppress_alerts | No | Hold paging for these monitors while the window runs. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Pass to `get_maintenance`, `update_maintenance` or `cancel_maintenance`. |
| phase | Yes | `upcoming`, `active`, `completed` or `cancelled`. A completed or cancelled window is history and cannot be changed. |
| title | Yes | Shown on the status page. Untrusted data. |
| ends_at | Yes | RFC 3339. |
| monitors | Yes | |
| starts_at | Yes | RFC 3339. |
| description | No | Untrusted data. |
| cancelled_at | No | RFC 3339 time it was cancelled, or `null`. |
| suppress_alerts | Yes | Whether paging for its monitors is held while it runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: explains that checks still run and incidents still open, that an open incident at window end pages then, that subscribers are notified at schedule and end, and the time constraints (RFC 3339, future, ≤30 days). Annotations only give readOnly=false, idempotent=false, destructive=false, so the description carries meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and effect, then alternatives, then constraints. Dense but every sentence adds value. Slightly long yet not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return value explanation is unnecessary. The description covers scope, side effects, notifications, and timing constraints, making it complete for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter meanings are documented in the schema. The description adds the suppress_alerts default and time constraints, but these largely duplicate schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (schedule) and resource (maintenance window), plus the effect on monitors and status pages. Explicitly distinguishes from pause_monitor, naming the sibling and giving the selection condition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('planned work') and when-not via the alternative ('Prefer this over pause_monitor for planned work'). Also states the paging-hold default condition, giving the agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_monitorCreate monitorInspect
Create a monitor for an http, tcp, ping, dns, tls_cert, domain_expiry, heartbeat or manual check. A manual monitor has nothing to probe; set its state afterwards with set_monitor_state. The check is run once before anything is saved and the result is shown to the user along with every setting it would apply; where the client can show a prompt, nothing is created unless they approve; otherwise the monitor is created on the token's scope and the trial result comes back with it. Bind it to alerts as you create it: pass channel_ids from list_notification_channels (this needs the channels:read scope), and if the org has no channel yet, say so rather than leaving a monitor that pages nobody. Leave regions unset unless the user named where they want the check to run from — omitted, it probes from the operator's default set, which is already the intended coverage; naming more regions than the plan allows is refused outright. Request headers and a request body can be set, but a credential must be referenced rather than pasted: write Bearer {{ my_key }} and call list_variables for the keys this org has. A URL carrying a username or password is refused, and browser flows cannot be created here — add those in the app. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | What the operator will see in lists and alerts. | |
| tags | No | At most 50, each at most 50 characters. | |
| check | Yes | ||
| regions | No | Probe regions to run the check from, as ids from `list_regions`. Omit unless the user named the places they want covered: omitting takes the regions `list_regions` flags `default_selected`, which is the coverage the operator chose, capped at the plan's region cap and falling back to the control plane's own region when nothing is flagged. A vantage point can be offered without being on by default, so the full catalog is not the thorough answer. Rejected for a heartbeat, which is pinged rather than probed, and a set larger than a `max_regions` `list_regions` reports is refused outright, not trimmed to fit. | |
| group_name | No | Operator-side grouping label. | |
| channel_ids | No | Channel ids from `list_notification_channels` to alert. Omitting them creates a monitor that pages nobody, which is worth saying out loud rather than leaving for an outage to reveal. The channels themselves are set up in the app, since they hold the tokens and addresses. | |
| interval_secs | No | Seconds between checks, held to the plan's floor and the check kind's own floor. Omit it to get the cadence the app's own picker opens this kind at, which is well above the hard minimum for the slow-moving kinds: a certificate is checked twice a day, a domain registration daily. | |
| region_policy | No | Detection quorum across probe regions. | |
| notify_recovery | No | Whether recovery is announced. Defaults to true. | |
| alert_confirmations | No | Consecutive failing checks before the monitor alerts. Minimum 1, defaults to 2. | |
| recovery_period_secs | No | Seconds a recovered monitor must stay healthy before its incident closes; a failure confirmed inside the window keeps the incident open, so a flapping service reads as one outage. 0 to 1800; 0 closes on the confirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or flow monitor and 0 on the rest. Not for a manual monitor. | |
| renotify_interval_secs | No | Seconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 turns reminders off; otherwise at least 60. Defaults to 3600. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| probe | No | The trial run's outcome, which the operator saw before approving. Absent for a heartbeat, which has nothing to probe. |
| alerts | Yes | The channels this monitor will alert, by name, or `nobody` when nothing reaches it. One covered by a channel's tag rule rather than a binding is marked `by tag`. A channel that cannot deliver says so here. |
| address | Yes | What the check watches, as stored. |
| regions | Yes | Probe regions the monitor was assigned, which is the operator's default set when `regions` was omitted. Empty for a heartbeat. |
| interval_secs | Yes |
create_monitorsCreate monitorsInspect
Create several monitors at once, with one confirmation covering the batch where the client can show a prompt. Every check is run once first and all the results are shown together, so a misconfigured endpoint is visible before anything is saved. An item that fails validation or its trial run is reported in the results and the rest are still created. Prefer this over repeated create_monitor calls whenever the user names more than one thing to watch: it costs them one prompt instead of many. Same per-monitor fields and same limits as create_monitor. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| monitors | Yes | The monitors to create. Each is validated and probed before the single confirmation covering the batch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| created | Yes | |
| results | Yes |
create_status_pageCreate status pageAInspect
Create a status page. It is created unpublished unless you pass enabled, so its components can be curated before anyone can read it. The slug is the page's public address: it is first-come across the platform and moving it later breaks every existing link, so confirm it with the user rather than inventing one. Add monitors to it with add_status_page_components. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Page display name, at most 80 characters. | |
| slug | Yes | URL slug, lowercase. This is the page's public address and cannot be guessed back later, so pick it deliberately. | |
| enabled | No | Defaults to false: a page is created dark so components can be curated before anyone can read it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| slug | Yes | |
| enabled | Yes | |
| public_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, and the description reinforces this with 'Not read-only.' More importantly, it discloses that the page is created unpublished unless enabled, that the slug is first-come across the platform and moving it later breaks links, and that the slug should be confirmed with the user. These are critical behavioral details that go beyond the annotations and significantly inform the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying essential information. The core purpose is front-loaded, followed by the default state, slug warning, and a pointer to the sibling tool. No wasted words and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with an output schema, the description covers the key aspects: what it does, default behavior, important caveats about the slug, and the next step for adding monitors. The output schema handles return values, and the annotations cover idempotency and read-only status. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so baseline is 3. The description adds valuable context for slug (public address, first-come, breaking links) and enabled (curation before publication), which enhances understanding beyond the schema. Name doesn't get extra treatment, but the schema already describes it adequately. Overall, it adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a status page.' It also distinguishes itself from siblings by noting that monitors are added via add_status_page_components, so an agent knows exactly what this tool does and what it doesn't.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly instructs to use add_status_page_components for adding monitors, which is a key follow-up step. It also advises confirming the slug with the user before creating. It doesn't explicitly mention alternatives like update_status_page, but the create/update distinction is implicit in the tool name and the guidance provided is sufficient for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_runsBrowser flow runsARead-onlyInspect
A browser flow monitor's recent runs over a window (1h/24h/7d/30d): every declared step with its outcome and duration, the step a failure stopped on, and the page the browser saw. Use this to answer why a login check failed. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`), of a `flow` monitor. | |
| window | Yes | Time window: `1h`, `24h`, `7d`, or `30d`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces it with 'Read-only.' The description adds behavioral context by specifying the time window options (1h/24h/7d/30d) and the type of data returned (every declared step, failure step, page). This adds value beyond the schema and annotation without contradicting them. No hidden side effects are mentioned, but the bar is met given the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the first packing all essential facts about the resource, data, and scope, and the second giving a practical use case. There is no redundant or filler language; every phrase contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return formats. It explains what the tool returns conceptually, the windows, the monitor type, and a motivating use case. For a two-parameter read-only tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters with 100% coverage. The description only restates the window choices and confirms the id must be a flow monitor (already in the schema). No additional parameter semantics are added, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific noun phrase ('A browser flow monitor's recent runs') and details the contents (steps, outcomes, durations, failure step, page). It clearly specifies the resource (flow monitor runs) and the action (get). It also distinguishes from siblings by focusing on recent runs with failure details, and even offers a concrete use case ('why a login check failed').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use the tool: 'Use this to answer why a login check failed.' It implies this is the diagnostic tool for inspecting individual runs and step outcomes. However, it does not name alternative tools or specify exclusions, so it falls short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_step_trendBrowser flow step trendARead-onlyInspect
How long each step of a browser flow monitor takes over a window (1h/24h/7d/30d), and how far it has moved: per step the earliest and latest mean duration, their ratio, and how many runs passed or failed it. Use this to spot a step drifting toward failure while the monitor still reports up. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`), of a `flow` monitor. | |
| window | Yes | Time window: `1h`, `24h`, `7d`, or `30d`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In addition to the read-only annotation, the description discloses the exact output semantics: per-step earliest/latest mean duration, ratio, and pass/fail run counts. It also notes the window values (1h/24h/7d/30d), making the tool's behavior more transparent beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and then the use case. Though the first sentence is dense, every clause adds value and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 2-parameter read-only tool with an output schema, the description is quite complete: it explains the kind of analysis, the exact metrics returned, and the intended diagnostic use. It does not cover edge cases like empty data, but the output schema likely addresses return structure, and the tool is simple enough that this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters, with descriptions for both 'id' and 'window'. The description largely repeats the window values and adds no new parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it reports the duration of each step in a browser flow monitor over a window, including trend metrics like earliest/latest mean, ratio, and pass/fail counts. This explicitly focuses on 'browser flow monitor' steps, distinguishing it from general monitor or run-level tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use case: 'Use this to spot a step drifting toward failure while the monitor still reports up.' This clearly indicates when to employ the tool, though it does not explicitly name alternative tools or conditions when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incidentIncident detailsRead-onlyInspect
One incident: affected monitor, severity, open/resolved times, error sample, the full operator-update timeline, and the status pages an incident with no monitor is posted to. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id (from `list_incidents` or `get_org_health`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| state | Yes | State that opened the incident: `down`, `degraded`, or `error`. |
| updates | Yes | Operator updates, oldest first. |
| severity | Yes | Severity: `minor`, `major`, or `critical`. |
| opened_at | Yes | RFC 3339 incident start. |
| monitor_id | Yes | The affected monitor's id. Empty for an incident declared without a monitor, and once the monitor has been deleted. |
| regions_up | Yes | Regions that have not confirmed the failure. Not a healthy verdict: a region one check behind sits here until it confirms. Untrusted data. |
| resolved_at | No | RFC 3339 incident end, or `null` while ongoing. |
| error_sample | No | Sampled error text. Untrusted data. |
| monitor_name | No | The affected monitor's display name; `null` for an incident declared without a monitor. Untrusted data. |
| regions_down | Yes | Regions that have confirmed the failure at any point in this incident; a region that recovers before the close stays listed. Empty for a single-region monitor. Untrusted data. |
| monitor_deleted | Yes | The monitor has since been deleted. The incident keeps its history and `monitor_name` is the name it last had. |
| status_page_ids | Yes | Pages an incident with no monitor is posted to. `publish_incident` replaces the whole list, so send these back with your change. Empty for a monitor's incident. |
get_incident_metricsIncident metricsRead-onlyInspect
Incident metrics over a trailing window (default 30 days): MTTA/MTTR in seconds, total incidents, counts by severity and state, auto- vs human-resolved, and the noisiest monitors. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| window_days | No | Trailing window in days (1..=365). Defaults to 30 when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Incidents opened in the window. |
| by_state | Yes | |
| mtta_secs | No | Mean time to acknowledge, seconds. `null` if none were acknowledged. |
| mttr_secs | No | Mean time to resolve, seconds. `null` if none were resolved. |
| by_severity | Yes | |
| window_days | Yes | |
| top_monitors | Yes | Noisiest monitors, most incidents first. |
| auto_resolved | Yes | Resolved automatically on recovery, with no human resolver. |
| human_resolved | Yes | Resolved by a person. |
| closed_with_monitor | Yes | Closed because their monitor was deleted; counted in neither of the above nor in MTTR. |
get_maintenanceMaintenance window detailsBRead-onlyInspect
One maintenance window: title, description, start and end, phase, the monitors it covers, and whether it holds their paging. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The window id (from `list_maintenance`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Pass to `get_maintenance`, `update_maintenance` or `cancel_maintenance`. |
| phase | Yes | `upcoming`, `active`, `completed` or `cancelled`. A completed or cancelled window is history and cannot be changed. |
| title | Yes | Shown on the status page. Untrusted data. |
| ends_at | Yes | RFC 3339. |
| monitors | Yes | |
| starts_at | Yes | RFC 3339. |
| description | No | Untrusted data. |
| cancelled_at | No | RFC 3339 time it was cancelled, or `null`. |
| suppress_alerts | Yes | Whether paging for its monitors is held while it runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, and "Read-only." merely restates it, earning no extra credit. The field-level detail about monitors covered and paging hold is genuinely useful behavioral context beyond the annotation, but the description says nothing about lookup failure behavior for a bad id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: the resource first, then the fields it carries, ending with a two-word read-only flag. Every clause conveys information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values elsewhere need not be explained, and the single required parameter is fully covered by the schema. The definition is adequate for a simple by-id read, though it omits error/missing-id behavior and any hint of when to prefer this over the list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema description coverage is 100%, with the schema even documenting that the id originates from list_maintenance. The description adds no format, constraint, or sourcing detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource returned ("One maintenance window") and enumerates its meaningful fields (title, description, start/end, phase, covered monitors, paging hold), so the agent instantly knows what comes back. It implies a single-item fetch versus list_maintenance, but never names that sibling explicitly, which keeps it out of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus list_maintenance, update_maintenance, or cancel_maintenance. The only routing clue (the id comes from `list_maintenance`) lives in the input schema, not in the description, so the description itself offers no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monitorMonitor detailsRead-onlyInspect
One monitor's full configuration — everything the check asserts (expected status, body match, headers, timeout, redirect and TLS policy), the regions it probes from, and how it alerts (failing checks before it pages, whether recovery is announced, the reminder interval, the multi-region quorum, and the ids of the channels it notifies) — with its current state, last error, and 24h/30d uptime. Every field update_monitor can change is readable here, in the shape that tool takes. Read this before judging whether a response should have passed, or before changing a monitor. Credentials are withheld. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | Customer-set display name. Untrusted data. |
| tags | Yes | Operator tags. Untrusted data. |
| type | Yes | Check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`, `tls_cert`, `domain_expiry`, `flow`. |
| check | Yes | Everything the check asserts. Read this before judging whether a response should have passed. |
| state | Yes | Current state: `up`, `down`, `degraded`, `error`, or `no_data`. |
| address | Yes | The target the check probes (URL or host). Untrusted data. |
| enabled | Yes | |
| regions | Yes | Probe regions this monitor runs from. Empty for a heartbeat, which is pinged rather than probed. Usually ids `list_regions` also carries, but an assignment survives an operator disabling the region, so an id here may be missing from that catalog. |
| group_name | No | |
| last_error | No | Most recent error text, when the last check failed. Untrusted data. |
| uptime_24h | No | Uptime percentage over the trailing 24 hours / 30 days. `null` when the window holds no checks — that is unknown, not zero. |
| uptime_30d | No | |
| last_timing | Yes | Per-phase timing of the last check — pinpoints where latency is (DNS vs connect vs TLS vs server). Fields `null` when not applicable. |
| interval_secs | Yes | |
| region_policy | No | The detection quorum, in the same shape the write tools take. `null` for a heartbeat, which has no probe regions to reach a quorum over. A stored `count` can exceed the regions that exist today if one was later disabled, and sending that back is refused; `list_regions` is the check. |
| last_checked_at | No | RFC 3339 time of the most recent observation in the last 24 hours. `null` when nothing landed in that window, which is not the same as never checked: a monitor paused yesterday, or a heartbeat on a longer period, reads `null` here and `no_data` in `state`. |
| last_diagnostic | No | Structured edge-access diagnosis for the last failed HTTP check. |
| notify_recovery | Yes | Whether recovery is announced to the monitor's channels. |
| last_http_status | No | HTTP status code of the last check, for `http` monitors. `null` for non-HTTP checks or when the last probe never got a response. |
| alert_channel_ids | Yes | Channel ids bound to this monitor, for the read half of `update_monitor(channel_ids)`, which replaces the whole set. Empty means none is bound, which is not the same as alerting nobody: a channel whose `auto_bind_tags` covers one of this monitor's tags is paged as well. `list_notification_channels` puts names to these. |
| last_response_size | No | Response body size of the last check in bytes, when measured. |
| managed_externally | Yes | Terraform declares this monitor, so `update_monitor`, `pause_monitor` and `resume_monitor` all refuse it. Change it in the `.tf` instead. |
| alert_confirmations | Yes | Consecutive failing checks before the monitor alerts. |
| recovery_period_secs | Yes | Seconds a recovered monitor must stay healthy before its incident closes. 0 closes on the confirming checks alone. |
| renotify_interval_secs | Yes | Seconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 means reminders are off. |
get_monitor_historyMonitor historyRead-onlyInspect
One monitor's history over a window (1h/24h/7d/30d): uptime, latency series, a per-region split of the same window, failures with error text, and incident windows. Pass region to narrow it to one probe region and tell a partial outage from a total one. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). | |
| region | No | Narrow uptime, the latency series, and the region breakdown to one probe region (an id the monitor is assigned to, from `get_monitor.regions`). Omit for every region together. | |
| window | Yes | Time window: `1h`, `24h`, `7d`, or `30d`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| region | No | The region this answer was narrowed to, or `null` for all of them. |
| uptime | No | Uptime percentage over the window. `null` when the window holds no checks — that is unknown, not zero. Unfiltered it counts confirmed incidents; under a `region` filter it is that region's raw check rate, so the two are not comparable. |
| regions | Yes | Per-region split of the same window, so a partial outage is visible. Always every region the monitor runs in, including under a `region` filter, and empty when it runs in only one. Regions that ran no checks in the window are omitted; this reads per-minute data, which is kept for 30 days, so at the far edge of a `30d` window a region can be short of samples or absent while the headline numbers still cover it. |
| failures | Yes | Confirmed failures on the monitor as a whole. A `region` filter does not narrow these: an incident is raised for the monitor, not per region. |
| incidents | Yes | Incident windows on the monitor as a whole, unnarrowed by `region` for the same reason as `failures`. |
| latency_series | Yes |
get_org_healthOrg healthARead-onlyInspect
Org health summary: per-state monitor totals and the worst currently-failing monitors. The one-shot answer to 'what is broken right now?'. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| org | Yes | The org slug this connector is bound to. |
| worst | Yes | Non-up monitors, newest failure first, capped. |
| totals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates this is a safe read operation. The description adds value by explaining the output content (per-state totals and worst failing monitors) and the 'current' snapshot nature, which goes beyond the annotation. The explicit 'Read-only' statement is consistent with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the key summary and immediately followed by the use case. Every word earns its place, and the redundant 'Read-only' is minimal and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool with an output schema present, the description is complete: it states what the tool does, what data it returns, and when to use it. There are no significant gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. The empty schema is fully covered, and the description correctly omits unnecessary parameter details. Baseline 4 is appropriate for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing an org health summary with per-state monitor totals and the worst currently-failing monitors. This is specific and distinguishes it from sibling tools like list_monitors and get_incident, and the 'one-shot answer' phrase further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the use case: 'The one-shot answer to what is broken right now?'. It does not mention alternative tools or exclusions, but the positioning as a summary tool is clear enough to guide appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_org_usageUsage against planARead-onlyInspect
Which org this connector is bound to, and the account's resource usage against plan limits: monitors, status pages, members, components, and key policy values. Caps are pooled across every org the account owns, so the counts can exceed what this one org holds. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| org | Yes | The org slug this connector is bound to. |
| plan | Yes | Plan id (e.g. `free`, `pro`). |
| members | Yes | |
| targets | Yes | |
| org_name | Yes | The org's display name. |
| status_pages | Yes | |
| retention_days | Yes | History retention, days. |
| public_components | Yes | |
| maintenance_windows | Yes | Counts windows that have not ended (upcoming and active). Completed windows do not count. |
| notification_channels | Yes | |
| min_check_interval_secs | Yes | Minimum allowed check interval, seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the trailing 'Read-only' adds nothing. However, the description contributes a genuinely non-obvious behavioral fact: caps are pooled across every org the account owns, so counts can exceed what this org holds. That caveat prevents a wrong interpretation of the numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the identity-plus-metrics content is front-loaded ahead of the pooling caveat. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value structure needn't be restated, and with zero parameters there is no input contract to cover. The description supplies the data semantics (pooling) and safety profile needed to use the result correctly, leaving nothing material missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. There is no parameter semantics to add beyond the schema, and the description correctly spends no space on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource pair — the org a connector is bound to plus the account's resource usage against plan limits — and enumerates the exact metrics returned (monitors, status pages, members, components, policy values). That level of specificity clearly separates it from the nearest sibling, get_org_health, without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content (call it when you need org binding or plan-limit consumption), but the description never states when to prefer it over get_org_health or list_monitors. No exclusions or alternatives are named, so the agent must infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_status_pageStatus page detailsARead-onlyInspect
One status page: name, public URL, enabled, and its components with each linked monitor's current state. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The page slug (from `list_status_pages`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Page display name. Untrusted data. |
| slug | Yes | |
| enabled | Yes | |
| components | Yes | |
| public_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description redundantly says 'Read-only.' It adds a small behavioral nuance by noting the inclusion of 'linked monitor's current state,' implying a live/snapshot view, and clarifies the nested structure of the response. No side effects or additional behavioral traits beyond the read-only annotation are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately identifies the resource ('One status page') and then lists the return fields in a compact, readable enumeration. No filler or repetition beyond the redundant 'Read-only' phrase, which is minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, a single well-documented parameter, and a read-only annotation, the description provides sufficient context for an AI agent to understand the tool's purpose and output. It does not need to explain return values because the output schema covers that, and the parameter description already provides the prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter, and the `slug` description already explains where it comes from (`list_status_pages`) and what it identifies. The main description adds no further parameter-level detail, so the schema carries the full semantic weight, establishing a baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single status page and enumerates exactly what it returns: name, public URL, enabled status, components, and linked monitor states. It distinguishes itself from sibling tools like `list_status_pages` by specifying 'One status page' and detailing the nested component/monitor data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need detailed information about one specific status page. The parameter description also references `list_status_pages` as the source of the slug, giving a contextual prerequisite. However, it does not explicitly state when to avoid this tool or mention alternatives beyond the implied list-then-get pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_incidentsList incidentsRead-onlyInspect
List the org's incidents: incident id, affected monitor, severity, open/resolved times, and latest update phase. Defaults to currently-open ones; pass state="all" with an optional from/to window (default: last 30 days) for resolved history, and monitor_id to narrow to one monitor. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | RFC 3339 end of the window. Defaults to now. Incidents that opened after it are excluded, running or not. | |
| from | No | RFC 3339 start of the window. Defaults to 30 days ago. An incident that is still running is listed however long ago it opened. | |
| state | No | Which incidents to return: `open` (default) for the ones still running, or `all` to include resolved ones inside the window. | |
| cursor | No | Opaque pagination cursor from a previous call's `next_cursor`. It carries the whole query, so send it on its own: any other filter passed alongside it is ignored rather than silently changing the page. | |
| monitor_id | No | Restrict to one monitor (id from `list_monitors`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | RFC 3339 window actually read, after the defaults and the one-year cap. It bounds the *resolved* incidents only: one that is still running is listed however long ago it opened, so it can be older than `from`. Describe spans from these, never from what was asked for. |
| items | Yes | |
| next_cursor | No |
list_maintenanceList maintenance windowsARead-onlyInspect
List maintenance windows: title, start and end, phase (upcoming, active, completed or cancelled), the monitors each covers, and whether it holds their paging. status narrows to active, upcoming or past (ended or cancelled); the default is all, latest start first. Cursor-paginated. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous call's `next_cursor`. It carries the whole query, so send it on its own. | |
| status | No | Defaults to `all`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description restates 'Read-only', which earns no extra credit. It does add value beyond annotations by disclosing pagination behavior ('Cursor-paginated') and result ordering ('latest start first', 'ended or cancelled'), which an agent needs to interpret multi-page output correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
There is no preamble or filler; the core purpose is front-loaded in the first clause and the rest is dense with useful detail. It is slightly run-on with stacked parentheticals, which costs a point but not readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description still enumerates them — harmless but partly redundant. Combined with the pagination note, default, and ordering rules, an agent has enough to call this correctly; only guidance on alternatives is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents cursor semantics (carries the whole query, send alone) and each status constant. The description mostly echoes the enum meanings and repeats the default ('the default is all'), adding little beyond what structured fields provide; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List maintenance windows') and enumerates the fields returned (title, start/end, phase, covered monitors, paging hold), so the agent knows exactly what this returns. It does not explicitly contrast itself with siblings like get_maintenance (single window) or cancel_maintenance, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how the status filter narrows results ('narrows to active, upcoming or past') and what the default is, which implies usage context. However, no alternative tools are named and there are no when-not-to-use conditions or prerequisites (e.g., 'use get_maintenance for a single window'), leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_monitorsList monitorsARead-onlyInspect
List monitors with optional state/type/tag filters and cursor pagination. Each item carries its current state and last-checked time. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter to monitors carrying this exact tag. | |
| type | No | Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`, `tls_cert`, `domain_expiry`, `flow`. | |
| state | No | Filter by current state: `up`, `down`, `degraded`, `error`, `no_data`. | |
| cursor | No | Opaque pagination cursor from a previous call's `next_cursor`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safety profile, and 'Read-only' merely restates it. It adds moderate value by noting cursor pagination and that each item carries state and last-checked time, but the output schema already covers the return shape, so the added context is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler, front-loading the operation and filters before pagination and read-only status. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the readOnlyHint carries the safety profile. The description covers filters, pagination, and item contents adequately, though it omits default behavior when all filters are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (tag, type, state, cursor) are fully documented in the schema itself. The description only names the filters, adding no syntax, enum values, or format detail beyond what the schema provides — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (monitors) plus the available filters and pagination model. Distinguishes from get_monitor by plurality and listing semantics, though it never explicitly names the singular sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers this is the bulk-listing tool versus get_monitor for one monitor. There is no explicit when-to-use, when-not, or alternative routing, and no note on default scope when filters are omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notification_channelsList notification channelsARead-onlyInspect
The org's notification channels: id, operator-set name, kind (email, slack, telegram, webhook, and so on), and whether the channel is enabled. Two flags say a channel is not working even where it reads as ready: awaiting_verification for an email address nobody confirmed, and not_delivering for an enabled channel whose recent alerts all failed to arrive. auto_bind_tags is the channel's tag rule: it also pages any monitor carrying one of those tags, so a monitor with no binding can still be covered. Channel settings are withheld, since they hold webhook URLs and bot tokens. Channels are created in the Uptimepage app, not here. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only assert readOnlyHint=true, but the description adds substantial behavioral context: the meaning of awaiting_verification and not_delivering (a channel can read as ready yet be broken), how auto_bind_tags extends coverage to tagged monitors, and that channel settings are withheld because they contain webhook URLs and bot tokens. This is real disclosure beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its fields, then layers the two health flags, the auto_bind_tags rule, and the security caveat. Dense but every clause carries information; only mildly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not explain return values, yet it usefully annotates the non-obvious flags (awaiting_verification, not_delivering, auto_bind_tags) that a raw schema would not interpret. Combined with the creation-boundary note and withheld-settings warning, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the baseline is 4; there is nothing for the description to add or compensate for on the input side. It correctly spends no words pretending there are parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('The org's notification channels') and enumerates the fields returned (id, name, kind, enabled), so the agent knows exactly what it will get. No sibling tool covers notification channels, making it trivially distinguishable from the rest of the catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clarifies the boundary that channels are created in the Uptimepage app, not via this tool, implicitly steering the agent away from looking for a create sibling. However, it does not state explicit when-to-use/when-not conditions or name an alternative read path, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regionsList probe regionsARead-onlyInspect
The fleet's probe regions: id, display name, city, country, continent, and whether each is on by default for a new monitor. Reports max_regions only when the plan reaches fewer regions than the catalog lists, so a set too large to be accepted is visible before it is sent. Use it to pass a valid region to get_monitor_history, and to read where a check would run from. This is a catalog, not a menu to fill: leave create_monitor.regions unset unless the user named the places they want covered. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| max_regions | No | How many of these regions one monitor may probe from, when the plan allows fewer than the catalog holds. A `create_monitor` naming more is refused outright, not trimmed to fit. Null when the plan reaches every region listed, which is not licence to name them all: what a monitor takes by default is `default_selected`, not this ceiling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, and the description reinforces it with 'Read-only.' It adds valuable behavioral detail about `max_regions` appearing only when the plan limit is lower than catalog count, which is beyond annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the catalog contents, the max_regions behavior, and usage guidance. The most critical usage warning is placed last but clearly marked, and the text is front-loaded with the resource description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description doesn't need to detail return values. It covers the fields, the edge case of max_regions, and proper usage, making it fully complete for an agent to call correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description carries no parameter burden. The description focuses on output and usage, which is appropriate for a parameterless tool; a 4 reflects the baseline for 0-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists probe regions and specifies the exact fields returned: id, display name, city, country, continent, and default status. It also explains its role in supplying valid `region` values for other tools, distinguishing it from sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs when to use it: to pass a valid `region` to get_monitor_history and to read where a check runs. It also gives a clear exclusion: not to use it as a menu to fill create_monitor.regions unless the user named specific places.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_status_pagesList status pagesARead-onlyInspect
List the org's status pages: slug, name, public URL, enabled. Cursor-paginated. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous call's `next_cursor`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the readOnlyHint annotation by disclosing cursor-based pagination and the specific fields returned. While 'read-only' repeats the annotation, the pagination behavior is valuable and not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loaded with the action and resource. Every phrase contributes to the tool's understanding, with no filler or redundant clauses beyond the optional 'Read-only' which is also in annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with a single optional cursor parameter and an existing output schema, the description sufficiently conveys purpose, pagination, and output fields. It lacks explicit default page size or contrast with get_status_page, but these are not critical given the schema and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a complete description of the cursor parameter (opaque cursor from next_cursor), achieving 100% schema coverage. The description merely mentions cursor-paginated, which aligns with the schema but adds no new syntax or semantics beyond what the schema documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'List', identifies the resource 'status pages', specifies scope 'org's', and enumerates the fields returned (slug, name, public URL, enabled). This clearly distinguishes it from sibling tools that list incidents, monitors, regions, etc., and from get_status_page which retrieves a single page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates the tool's function for listing all status pages and notes cursor-based pagination, which implies its use case for enumerating status pages. It does not explicitly contrast with get_status_page or provide exclusionary guidance, but the purpose is self-evident among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList tagsARead-onlyInspect
Every tag in use across the org's monitors, most-used first, with how many monitors carry each. Pass one back as the tag filter to list_monitors. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| truncated | Yes | The org has more tags than the cap returned here, so a tag missing from `items` is not proof it does not exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description redundantly states 'Read-only.' However, it adds behavioral details beyond annotations: it lists tags sorted by usage ('most-used first') and includes per-tag monitor counts, plus the scope covers 'every tag in use across the org's monitors.' This enriches the agent's understanding of output formatting and data scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the essential output description, immediately followed by a usage hint and read-only note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is fully sufficient. It explains the ordering, counting, and how to use the results with list_monitors. No gaps for a simple read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers parameter semantics. The description adds no parameter-specific detail, but none is needed. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists tags in use across the org's monitors, ordered by usage frequency, and includes monitor counts. It also distinguishes itself by explaining how the output feeds into list_monitors, which is its primary use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: pass a returned tag as the `tag` filter to list_monitors. It implies the tool is a precursor to filtering monitors, but does not explicitly state exclusions or alternatives beyond that. The context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_variablesList variablesARead-onlyInspect
The org's reusable variables: key, and whether it is a secret. Values are never returned, and a secret's value is never even read. Write a variable into a monitor's header or body as {{ key }}, which is resolved when the check runs: this is how an authenticated check is built here, since pasting the credential itself is refused. Variables are created and edited in the app, not here. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that values are never returned and that secret values are never even read. It also explains the security context around credential pasting being refused. This gives the agent an accurate mental model of the tool's safety and behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. Each sentence contributes meaningful context: the resource, the privacy behavior, the usage pattern, and the mutation boundary. There is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and an output schema, so the description only needs to convey what is listed and any important behavioral caveats. It does both thoroughly, including the critical guarantee that secret values are never read or returned. Nothing an agent needs to safely call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so there are no parameter semantics to document. The baseline for a zero-parameter tool is 4, and the description appropriately signals that the tool simply lists all variables without requiring input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the org's reusable variables with their keys and secret status. It is distinct from every sibling list_* tool because no other sibling targets variables, and it names the exact resource being operated on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains why and how variables are used: they go into a monitor's header or body as {{ key }} and are resolved at check time to build authenticated checks. It also explicitly says variables are created and edited in the app, not here, which prevents an agent from attempting mutations. It does not name sibling alternatives, but none are direct alternatives for this resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_monitorPause monitorADestructiveIdempotentInspect
Pause a monitor (stop its checks until resumed). For planned work, create_maintenance holds paging instead while the checks keep running. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| enabled | Yes | The monitor's enabled state after the change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=true, so the closing 'Not read-only; idempotent' is largely a restatement. The genuinely additive content is the confirmation behavior ('Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope'), which tells the agent about interactive and auth-fallback behavior not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each carrying distinct information: the core action, the sibling alternative for planned work, and the confirmation/scope behavior. The core action is front-loaded and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. For a single-param mutation the description covers the effect, the alternative tool, the confirmation prompt, and the token-scope fallback — enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, and the schema already tells the agent the id comes from list_monitors. The description adds no format or sourcing detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Pause a monitor') and immediately clarifies the scope of the effect ('stop its checks until resumed'), which an agent can distinguish from sibling operations like resume_monitor or create_monitor without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'For planned work, create_maintenance holds paging instead while the checks keep running' names the alternative and the condition that selects it. It also implies the resume_monitor counterpart ('until resumed').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_incident_updatePost incident updateAInspect
Post a public, customer-facing update to an incident's status-page timeline (phase + message). This is what your subscribers and status-page visitors see. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id. | |
| phase | No | Optional phase: `investigating`, `identified`, `monitoring`, `resolved`, `postmortem`. Defaults to `investigating`. | |
| message | Yes | Public message shown on the status page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posted_at | Yes | RFC 3339 time the update was posted. |
| incident_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false), it discloses a confirmation-prompt behavior and that the action otherwise runs on the token's scope. It also states 'Not read-only.' No contradiction with annotations; it adds useful behavioral context for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, audience, and behavioral caveat. No filler or repetition; front-loaded with the core operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, 100% param coverage, and annotations, the description covers purpose, audience, confirmation behavior, and token scope. It is slightly vague about when confirmation is possible, but overall enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, phase, and message fully. The description only mentions phase + message at a high level and does not add semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: posting a public, customer-facing update to an incident's status-page timeline. It also clarifies the content (phase + message) and differentiates from siblings like publish_incident or update_status_page by emphasizing the status-page timeline and subscriber visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: this is what subscribers and status-page visitors see, so an agent can infer it is the tool for public incident timeline communication. It does not explicitly name alternatives or when-not-to-use conditions, but the context is strong enough for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_incidentPublish incidentAIdempotentInspect
Publish an incident so it appears on every status page carrying the affected monitor, optionally seeding the public title and description. An incident with no monitor needs status_page_ids naming the pages to show it on; the list replaces its pages, so start from get_incident's status_page_ids. Status-page subscribers may be notified. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id. | |
| public_title | No | Public headline shown on the status page. | |
| status_page_ids | No | Status page ids (from `list_status_pages`) for an incident with no monitor; replaces its pages, so start from `get_incident`'s `status_page_ids` to add or drop one. Leave unset for a monitor's incident, which shows on the pages carrying that monitor. | |
| public_description | No | Public summary shown under the headline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| visibility | Yes | Visibility after the change: `public` or `internal`. |
| incident_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, idempotentHint=true), the description discloses that subscribers may be notified, that confirmation may be requested, and that the status_page_ids list replaces existing pages—behavioral details not captured in annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the main action. Each sentence adds necessary context (monitor vs no monitor, replacement behavior, notification, confirmation, idempotency). Slightly long but no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all critical aspects: the publishing behavior, the conditional use of status_page_ids, replacement semantics, notification side effects, confirmation behavior, and idempotency. The output schema exists, so return values are covered. No missing information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all parameters, including the replacement semantics for status_page_ids. The tool description adds only a general 'optionally seeding' phrase, which adds little beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'publish' and the resource 'incident', and explains the effect (appears on status pages). It differentiates from siblings like unpublish_incident and post_incident_update by focusing on the publishing action and its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to set status_page_ids (incidents with no monitor) and when not to (monitor incidents). Mentions starting from get_incident's status_page_ids. While it doesn't name alternative tools, it gives clear when/when-not conditions for parameter usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_incidentResolve incidentADestructiveIdempotentInspect
Resolve an incident (mark the operational state resolved). Internal only — does not post to the public status page. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id. | |
| note | No | Optional internal note recorded on the incident's activity timeline. This is operator-facing, not published to the public status page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | Operational state after the action: `triggered`, `acknowledged`, `resolved`. |
| incident_id | Yes | |
| resolved_at | No | RFC 3339 resolved (ended) time, when set. |
| acknowledged_at | No | RFC 3339 acknowledged time, when set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: it states the operation is not read-only, confirms the internal-only status page behavior, and explains the confirmation/authorization behavior ('Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope'). This is valuable context that annotations alone do not provide, and it does not contradict the destructiveHint or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no filler. It front-loads the core purpose, then adds behavioral caveats and a scope clarification. Every sentence contributes useful information for tool selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the 100% schema coverage, and the annotations describing read-only, idempotency, and destructiveness, the description adds the remaining essential context: internal scope, public status page exclusion, and confirmation behavior. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats the internal-only nature of the note, which is already documented in the schema, and does not add new parameter-level meaning beyond what the schema provides. The required 'id' parameter is also already described adequately in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Resolve an incident') and clarifies the exact meaning with 'mark the operational state resolved.' It also distinguishes itself from sibling tools by explicitly noting 'Internal only — does not post to the public status page,' which differentiates it from publish_incident and related public-facing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: resolving an incident internally without public status page impact. It does not explicitly name alternative tools, but the 'Internal only' and 'does not post to the public status page' exclusions effectively guide tool selection among siblings like publish_incident and post_incident_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_monitorResume monitorAIdempotentInspect
Resume a paused monitor (restart its checks). Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| enabled | Yes | The monitor's enabled state after the change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as not read-only and idempotent, and the description restates those facts. It also adds meaningful behavioral context beyond annotations: the confirmation prompt behavior and the fallback to the token's scope when a prompt cannot be shown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the primary action, and uses only three sentences. The 'Not read-only; idempotent' sentence partially duplicates annotations, but it is brief and does not bloat the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and annotations covering safety/idempotency, the description gives enough context to call it correctly. It explains the effect, the confirmation behavior, and token scope, and the output schema covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that `id` is the monitor id from `list_monitors`. The tool description does not add extra parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Resume a paused monitor (restart its checks).' This clearly separates it from pause_monitor and run_check_now, making the tool's purpose immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Resume a paused monitor' implies when to use it, but it does not explicitly name alternatives or state when not to use it. It gives some contextual guidance about confirmation and token scope, but no direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_check_nowRun check nowAInspect
Run a check on a monitor immediately and record the result. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. A down result may fire the org's normal alerts. Heartbeat monitors cannot be probed (they wait for your systems to ping them). Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| error | No | Error text when the probe failed. Untrusted data. |
| state | Yes | Observed state: `up`, `down`, `degraded`, `error`. |
| timing | Yes | Per-phase timing of the probe (DNS / connect / TLS / first byte). |
| checked_at | Yes | RFC 3339 time of the probe. |
| diagnostic | No | Structured edge-access diagnosis, when a supported signature matched. |
| duration_ms | Yes | |
| http_status | No | HTTP status code, for `http` monitors. `null` for non-HTTP checks or when no response was received. |
| response_size | No | Response body size in bytes, when measured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing confirmation-prompt behavior, token-scope fallback, potential alert firing on a down result, and the heartbeat limitation. The explicit 'Not read-only' reinforces the readOnlyHint=false annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All four sentences carry meaningful information: the core action, confirmation behavior, alert side effect, and heartbeat exception. Nothing is redundant or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description covers the essential behavioral and safety context: side effects, confirmation, scope, and a major exception. No critical information needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single `id` parameter is already documented as 'The monitor id (from `list_monitors`).' The description adds no further parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Run a check on a monitor immediately and record the result.' This clearly distinguishes run_check_now from read-oriented or state-changing siblings like get_monitor, pause_monitor, and resume_monitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool and explicitly notes that heartbeat monitors cannot be probed, which is a valuable exclusion. It does not explicitly name an alternative tool for reading monitor status, but the intended use is still inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_monitor_stateSet manual monitor stateADestructiveIdempotentInspect
Set the state of a manual monitor: up, degraded or down. A manual monitor has no probe; its state is whatever an operator last set, for a service only people can judge, such as a SIP trunk, a carrier link or a partner's back office. Down or degraded opens an incident within about 30 seconds, which pages the monitor's channels unless a maintenance window holds it, and shows on its status pages as a major outage or degraded performance; up closes the incident. A paused monitor, or one the plan no longer covers, keeps the state and acts on it once it runs again. The note becomes the incident's cause, so make it a reason a responder can act on. Refused for any other kind of monitor. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The id of a `manual` monitor (from `list_monitors`). | |
| note | No | Why, in one line of at most 200 characters. It becomes the incident's cause and reaches whoever is paged. Omit for none; it replaces the previous note. | |
| state | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| note | No | Untrusted data. |
| state | Yes | `up`, `degraded` or `down`. |
| set_at | Yes | RFC 3339 time the state was set. |
| changed | Yes | `false` when the monitor already had this state and note. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=true) by disclosing the ~30-second incident-open latency, that channels are paged unless a maintenance window holds it, the status-page presentation per state, that up closes the incident, that the note becomes the incident cause, and the confirmation/token-scope behavior. This is exactly the mutation side-effect detail an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and legal values in the first sentence, then layers consequences. Dense and mostly waste-free, though the note guidance ('make it a reason a responder can act on') partially duplicates the schema's own note description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the remaining risk surface for a mutating tool: incident lifecycle, paging, maintenance suppression, paused-plan edge case, refusal conditions, and confirmation/auth behavior. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage the schema already documents id, state and note, but the description adds intent-level guidance the schema lacks: why the state matters (outage vs degraded on status pages), that the note must be actionable for a responder, and the monitor-kind constraint on id. It adds real semantic value over the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact verb and resource (set the state of a manual monitor) plus the three legal values, and immediately scopes it to manual monitors with no probe, distinguishing it from every update_monitor/pause_monitor sibling. An agent knows precisely what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a strong when-to-use rationale ('a service only people can judge, such as a SIP trunk, a carrier link or a partner's back office') and an explicit when-not ('Refused for any other kind of monitor'), plus the paused/no-longer-covered caveat. It stops short of naming sibling alternatives such as pause_monitor or update_monitor for adjacent operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_incidentUnpublish incidentADestructiveIdempotentInspect
Hide a published incident from the public status pages again. Its operator timeline is untouched. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The incident id (from `list_incidents` or `get_org_health`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| visibility | Yes | Visibility after the change: `public` or `internal`. |
| incident_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds genuinely useful behavioral context: the operator timeline is untouched, and it 'asks for confirmation where the client can show a prompt; otherwise runs on the token's scope,' covering both interactive and non-interactive paths. The final sentence ('Not read-only; idempotent') restates the annotations rather than adding value, but the other disclosures lift this above baseline. No contradiction with readOnlyHint=false, idempotentHint=true, or destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, with behavioral caveats following in short, separate sentences. The only waste is the final 'Not read-only; idempotent,' which duplicates the annotations — a minor redundancy in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a full output schema and safety annotations, the description covers the essential added context: the reversible nature of the action, the unaffected operator timeline, and the confirmation/token-scope behavior. No critical call-blocking information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single id parameter at 100% coverage, including a provenance hint ('from list_incidents or get_org_health'), so the schema carries the full load. The description adds no parameter-specific meaning, which per the baseline rule for high schema coverage warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource — 'Hide a published incident from the public status pages again' — clearly identifying what the tool does. The 'again' phrasing and the unpublish/publish pairing with sibling publish_incident make the action unambiguous, though it doesn't explicitly name the sibling it inverts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: call this when an incident is currently published and you want to remove it from public status pages, and 'again' signals it reverses a prior publish action. However, it doesn't explicitly name alternatives such as publish_incident or state conditions for when not to use it, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_maintenanceEdit maintenanceADestructiveIdempotentInspect
Edit an upcoming or running maintenance window: its title, description, start, end, the monitors it covers (monitor_ids replaces the whole set) or whether it holds their paging. end_now ends a running window at once and keeps it as completed work. A completed or cancelled window is history and is refused. Shows the old and new value of every field before it runs, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The window id (from `list_maintenance`). | |
| title | No | At most 200 characters. | |
| end_now | No | End a running window now. Cannot be combined with `starts_at` or `ends_at`. | |
| ends_at | No | RFC 3339, in the future. To stop a running window now, send `end_now` instead. | |
| starts_at | No | RFC 3339. | |
| description | No | At most 5000 characters. An empty string clears it. | |
| monitor_ids | No | Replaces the whole set, by id from `list_monitors`. Read the window first: a monitor left out stops being covered. | |
| suppress_alerts | No | Hold paging for its monitors while it runs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| window | Yes | |
| changes | Yes | What moved. Empty when every value sent already matched, in which case nothing was written and no confirmation was asked for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: monitor_ids is a wholesale replacement, end_now terminates a live window and marks it completed, and the tool previews old/new values before running when the client can prompt (otherwise it acts on the token's scope). The closing 'Not read-only' is largely redundant with readOnlyHint=false, but the confirmation and set-replacement semantics earn their keep.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation and the field list, then adds the state restrictions. Dense but every sentence carries information; only the trailing 'Not read-only.' is filler given the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and rich annotations, the description supplies the pieces they lack: refusal conditions, set-replacement warning, and the confirmation/preview flow. An agent could invoke this correctly from the description plus schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents id, end_now, ends_at, description, monitor_ids, and suppress_alerts. The description restates the monitor_ids replacement behavior and end_now semantics, adding little the schema doesn't already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('Edit an upcoming or running maintenance window') and immediately scopes it by state (upcoming/running) and lists the editable fields, which cleanly separates it from get_maintenance, create_maintenance, and cancel_maintenance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the eligibility condition (upcoming or running only) and the exclusion ('a completed or cancelled window is history and is refused'), which implicitly routes the agent elsewhere. It doesn't name cancel_maintenance or create_maintenance explicitly, so the routing is inferred rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_monitorRetune monitorDestructiveIdempotentInspect
Change how loudly a monitor is watched: check interval, alert confirmations, recovery notices, reminder interval, tags, group, the multi-region detection quorum, and which notification channels it alerts (channel_ids replaces the whole set, and needs the channels:read scope). It cannot change what the check watches — name, address, assertions, expected status, headers, body, probe regions and owner are refused. A monitor managed by Terraform is refused outright. Shows the old and new value of every field before it runs, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor id (from `list_monitors`). | |
| tags | No | Replaces the whole tag list. Read the monitor first: a tag left out of this list is removed. At most 50 tags, each at most 50 characters. | |
| group_name | No | Operator-side grouping label. Send `null` to clear it; omit to keep it. | |
| channel_ids | No | Replaces the whole set of alerted channels, by id from `list_notification_channels`. Read the monitor first: a channel left out of this list stops being alerted. An empty list silences the monitor. | |
| interval_secs | No | Seconds between checks. Held to the plan's floor and the check kind's own floor, whichever is higher. | |
| region_policy | No | Detection quorum across probe regions. | |
| notify_recovery | No | Whether recovery is announced to the monitor's channels. | |
| alert_confirmations | No | Consecutive failing checks before the monitor alerts. Minimum 1. Raising it quietens a flapping monitor at the cost of alerting later. | |
| recovery_period_secs | No | Seconds a recovered monitor must stay healthy before its incident closes, 0 to 1800. Raising it folds a flapping monitor's short outages into one incident, at the cost of announcing recovery later. | |
| renotify_interval_secs | No | Seconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 turns reminders off; otherwise at least 60. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| changes | Yes | What moved. Empty when every value sent already matched the stored one, in which case nothing was written and no confirmation was asked for. |
update_status_pageUpdate status pageADestructiveIdempotentInspect
Rename a status page, move it to a new slug, or publish and unpublish it. An omitted field is left alone. Changing the slug moves the public URL and breaks existing links. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| slug | Yes | The page to change, by its current slug. | |
| enabled | No | Publish or unpublish the page. | |
| new_slug | No | New slug. Changing it moves the public URL and breaks existing links. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| slug | Yes | |
| enabled | Yes | |
| public_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral details beyond the annotations, such as 'An omitted field is left alone' and 'Changing the slug moves the public URL and breaks existing links.' The 'Not read-only; idempotent' phrase largely restates the annotations, but the additional side-effect warning is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core actions, followed by important behavioral caveats. Every sentence contributes useful information, and there is no padding or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, annotations, and output schema, the description covers all essential calling context: what can be updated, how omitted fields behave, and the destructive consequence of changing the slug. No critical information for invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the meaning and role of each parameter. The description reinforces that omitted fields are left unchanged and that new_slug is destructive, but it does not add substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (a status page) and the specific actions available: rename, change slug, publish, and unpublish. It is more specific than the generic title, though it does not explicitly name sibling tools like update_status_page_component to draw the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through the listed operations, but there is no explicit guidance about when to choose this tool over related siblings such as create_status_page or update_status_page_component. An agent can infer the use case, but the description does not state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_status_page_componentUpdate status page componentAIdempotentInspect
Change how one monitor is presented on a status page: its public name, description, group or position. An omitted field is left alone. Not read-only; idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The page slug (from `list_status_pages`). | |
| monitor_id | Yes | The monitor id whose curation is being changed. | |
| sort_order | No | ||
| public_name | No | ||
| public_group | No | ||
| public_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| monitor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the annotation-backed non-read-only/idempotent behavior and adds useful partial-update context with 'An omitted field is left alone.' It does not cover auth requirements or the effect of explicitly passing null, but the non-destructive and idempotent profile is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose in the first sentence and the partial-update caveat immediately after. The 'Not read-only; idempotent' sentence is somewhat redundant with the annotations but is brief enough not to hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the operation and the most important behavioral nuance, and the output schema reduces the need to explain return values. Still, it leaves the null-vs-omitted semantics ambiguous and provides no orientation relative to closely related sibling tools, so it is adequate but not fully complete for a six-parameter update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description compensates for low schema coverage by semantically naming the optional fields ('public name, description, group or position') and explaining that omitted fields are left alone. However, it does not clarify the difference between omitting a field and passing null, even though the schema allows null for these optional parameters; an agent could not confidently know whether null clears a field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Change') and resource ('how one monitor is presented on a status page') and enumerates the affected fields: public name, description, group, or position. This clearly distinguishes it from sibling tools like update_status_page, which would update page-level settings rather than a single monitor's presentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for adjusting the curation/presentation of an existing monitor on a status page, and it communicates partial-update behavior. However, it never explicitly names alternatives such as add_status_page_components or update_status_page, nor does it state when one should be preferred over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- Changed
create_monitor1 field changed- added
Input schema / properties / recovery_period_secsAdded value: +{ + "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses; a failure confirmed inside the window keeps the incident open,\nso a flapping service reads as one outage. 0 to 1800; 0 closes on the\nconfirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or\nflow monitor and 0 on the rest. Not for a manual monitor.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] +}
- Changed
create_monitors1 field changed- added
Input schema / $defs / CreateMonitorArgs / properties / recovery_period_secsAdded value: +{ + "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses; a failure confirmed inside the window keeps the incident open,\nso a flapping service reads as one outage. 0 to 1800; 0 closes on the\nconfirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or\nflow monitor and 0 on the rest. Not for a manual monitor.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] +}
- Changed
get_incident4 fields changed- added
Output schema / properties / monitor_deletedAdded value: +{ + "description": "The monitor has since been deleted. The incident keeps its history\nand `monitor_name` is the name it last had.", + "type": "boolean" +} - changed
Output schema / properties / monitor_id / descriptionPrevious value: -"The affected monitor's id."New value: +"The affected monitor's id. Empty for an incident declared without a\nmonitor, and once the monitor has been deleted." - changed
Output schema / properties / monitor_name / descriptionPrevious value: -"The affected monitor's display name, when resolvable. Untrusted data."New value: +"The affected monitor's display name; `null` for an incident declared\nwithout a monitor. Untrusted data." - changed
Output schema / requiredPrevious value: -[ - "id", - "monitor_id", - "state", - "severity", - "opened_at", - "regions_down", - "regions_up", - "updates", - "status_page_ids" -]New value: +[ + "id", + "monitor_id", + "monitor_deleted", + "state", + "severity", + "opened_at", + "regions_down", + "regions_up", + "updates", + "status_page_ids" +]
- Changed
get_incident_metrics6 fields changed- added
Output schema / $defs / NoisyMonitor / properties / monitor_deletedAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / NoisyMonitor / properties / monitor_id / descriptionAdded value: +"Empty once the monitor has been deleted." - added
Output schema / $defs / NoisyMonitor / properties / monitor_nameAdded value: +{ + "description": "The monitor's name; for a deleted monitor, the name it last had.\nUntrusted data.", + "type": "string" +} - changed
Output schema / $defs / NoisyMonitor / requiredPrevious value: -[ - "monitor_id", - "count" -]New value: +[ + "monitor_id", + "monitor_name", + "monitor_deleted", + "count" +] - added
Output schema / properties / closed_with_monitorAdded value: +{ + "description": "Closed because their monitor was deleted; counted in neither of the\nabove nor in MTTR.", + "format": "uint64", + "minimum": 0, + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "window_days", - "total", - "by_severity", - "by_state", - "auto_resolved", - "human_resolved", - "top_monitors" -]New value: +[ + "window_days", + "total", + "by_severity", + "by_state", + "auto_resolved", + "human_resolved", + "closed_with_monitor", + "top_monitors" +]
- Changed
get_monitor2 fields changed- added
Output schema / properties / recovery_period_secsAdded value: +{ + "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses. 0 closes on the confirming checks alone.", + "format": "uint32", + "minimum": 0, + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "id", - "name", - "type", - "address", - "check", - "regions", - "enabled", - "interval_secs", - "alert_channel_ids", - "alert_confirmations", - "notify_recovery", - "renotify_interval_secs", - "managed_externally", - "tags", - "state", - "last_timing" -]New value: +[ + "id", + "name", + "type", + "address", + "check", + "regions", + "enabled", + "interval_secs", + "alert_channel_ids", + "alert_confirmations", + "notify_recovery", + "renotify_interval_secs", + "recovery_period_secs", + "managed_externally", + "tags", + "state", + "last_timing" +]
- Changed
get_monitor_history6 fields changed- changed
Output schema / $defs / IncidentWindow / properties / counts_as_downtime / descriptionPrevious value: -"`false` when this window is listed but explains none of the `uptime` gap."New value: +"`false` when this window is listed but kept out of `uptime`." - added
Output schema / $defs / IncidentWindow / properties / impactAdded value: +{ + "description": "`major_outage`, `partial_outage` or `degraded`. A counted window\nexplains the `uptime` gap by it: a major outage in full, a partial\noutage for 30% of its length, a degraded one not at all.", + "type": "string" +} - added
Output schema / $defs / IncidentWindow / properties / recoveredAdded value: +{ + "description": "Stretches inside the window the monitor was back up in before the\nfailure returned. `uptime` does not count them.", + "items": { + "$ref": "#/$defs/RecoveredStretch" + }, + "type": "array" +} - added
Output schema / $defs / IncidentWindow / properties / recovering_sinceAdded value: +{ + "description": "RFC 3339 moment the monitor came back up while the incident waits out\nits recovery period. `uptime` stops counting the window here.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / $defs / IncidentWindow / requiredPrevious value: -[ - "opened_at", - "counts_as_downtime" -]New value: +[ + "opened_at", + "counts_as_downtime", + "impact", + "recovered" +] - added
Output schema / $defs / RecoveredStretchAdded value: +{ + "description": "A stretch an incident was back up in.", + "properties": { + "from": { + "description": "RFC 3339 start.", + "type": "string" + }, + "until": { + "description": "RFC 3339 end, when the failure came back.", + "type": "string" + } + }, + "required": [ + "from", + "until" + ], + "type": "object" +}
- Changed
list_incidents3 fields changed- added
Output schema / $defs / IncidentSummary / properties / monitor_deletedAdded value: +{ + "description": "The monitor has since been deleted. The incident keeps its history\nand `monitor_name` is the name it last had.", + "type": "boolean" +} - changed
Output schema / $defs / IncidentSummary / properties / monitor_id / descriptionPrevious value: -"The affected monitor's id."New value: +"The affected monitor's id. Empty once the monitor has been deleted." - changed
Output schema / $defs / IncidentSummary / requiredPrevious value: -[ - "id", - "monitor_id", - "monitor_name", - "severity", - "opened_at" -]New value: +[ + "id", + "monitor_id", + "monitor_deleted", + "monitor_name", + "severity", + "opened_at" +]
- Changed
update_monitor1 field changed- added
Input schema / properties / recovery_period_secsAdded value: +{ + "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses, 0 to 1800. Raising it folds a flapping monitor's short outages\ninto one incident, at the cost of announcing recovery later.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] +}
5 tool updates
- Changed
create_monitor1 field changed- changed
Input schema / $defs / NewCheck / oneOfPrevious value: -[ - { - "additionalProperties": false, - "description": "An HTTP(S) endpoint.", - "properties": { - "body": { - "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.", - "type": [ - "string", - "null" - ] - }, - "expected_body_contains": { - "description": "Text the response body must contain for the check to pass.", - "type": [ - "string", - "null" - ] - }, - "expected_status": { - "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.", - "type": [ - "string", - "null" - ] - }, - "follow_redirects": { - "description": "Defaults to true, following at most 5 hops.", - "type": [ - "boolean", - "null" - ] - }, - "headers": { - "additionalProperties": { - "type": "string" - }, - "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.", - "type": [ - "object", - "null" - ] - }, - "method": { - "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.", - "type": [ - "string", - "null" - ] - }, - "timeout_ms": { - "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.", - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "http", - "type": "string" - }, - "url": { - "type": "string" - }, - "verify_tls": { - "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.", - "type": [ - "boolean", - "null" - ] - } - }, - "required": [ - "type", - "url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A TCP port accepting connections.", - "properties": { - "host": { - "type": "string" - }, - "port": { - "format": "uint16", - "maximum": 65535, - "minimum": 0, - "type": "integer" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "tcp", - "type": "string" - } - }, - "required": [ - "type", - "host", - "port" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "ICMP reachability.", - "properties": { - "host": { - "type": "string" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "ping", - "type": "string" - } - }, - "required": [ - "type", - "host" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A DNS record resolving, optionally to an expected value.", - "properties": { - "domain": { - "type": "string" - }, - "expected_contains": { - "description": "Text the answer must contain.", - "type": [ - "string", - "null" - ] - }, - "record_type": { - "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.", - "type": [ - "string", - "null" - ] - }, - "resolver": { - "description": "Resolver to ask. Defaults to the agent's own.", - "type": [ - "string", - "null" - ] - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "dns", - "type": "string" - } - }, - "required": [ - "type", - "domain" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A TLS certificate's remaining validity.", - "properties": { - "critical_days": { - "description": "Days of remaining validity that fail it. Default 7.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "host": { - "type": "string" - }, - "port": { - "description": "Defaults to 443.", - "format": "uint16", - "maximum": 65535, - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "tls_cert", - "type": "string" - }, - "warn_days": { - "description": "Days of remaining validity that degrade the check. Default 30.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "type", - "host" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A domain registration's remaining validity.", - "properties": { - "critical_days": { - "description": "Default 7.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "domain": { - "type": "string" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "domain_expiry", - "type": "string" - }, - "warn_days": { - "description": "Default 30.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "type", - "domain" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.", - "properties": { - "grace_secs": { - "description": "Lateness tolerated before the monitor fails.", - "format": "uint64", - "minimum": 0, - "type": "integer" - }, - "max_runtime_secs": { - "description": "Fail a run that starts and does not finish within this.", - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "period_secs": { - "description": "How often the job is expected to report.", - "format": "uint64", - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "heartbeat", - "type": "string" - } - }, - "required": [ - "type", - "period_secs", - "grace_secs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "An HTTP(S) endpoint.", + "properties": { + "body": { + "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.", + "type": [ + "string", + "null" + ] + }, + "expected_body_contains": { + "description": "Text the response body must contain for the check to pass.", + "type": [ + "string", + "null" + ] + }, + "expected_status": { + "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.", + "type": [ + "string", + "null" + ] + }, + "follow_redirects": { + "description": "Defaults to true, following at most 5 hops.", + "type": [ + "boolean", + "null" + ] + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.", + "type": [ + "object", + "null" + ] + }, + "method": { + "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.", + "type": [ + "string", + "null" + ] + }, + "timeout_ms": { + "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.", + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "http", + "type": "string" + }, + "url": { + "type": "string" + }, + "verify_tls": { + "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.", + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A TCP port accepting connections.", + "properties": { + "host": { + "type": "string" + }, + "port": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": "integer" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "tcp", + "type": "string" + } + }, + "required": [ + "type", + "host", + "port" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "ICMP reachability.", + "properties": { + "host": { + "type": "string" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "ping", + "type": "string" + } + }, + "required": [ + "type", + "host" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A DNS record resolving, optionally to an expected value.", + "properties": { + "domain": { + "type": "string" + }, + "expected_contains": { + "description": "Text the answer must contain.", + "type": [ + "string", + "null" + ] + }, + "record_type": { + "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.", + "type": [ + "string", + "null" + ] + }, + "resolver": { + "description": "Resolver to ask. Defaults to the agent's own.", + "type": [ + "string", + "null" + ] + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "dns", + "type": "string" + } + }, + "required": [ + "type", + "domain" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A TLS certificate's remaining validity.", + "properties": { + "critical_days": { + "description": "Days of remaining validity that fail it. Default 7.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "host": { + "type": "string" + }, + "port": { + "description": "Defaults to 443.", + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "tls_cert", + "type": "string" + }, + "warn_days": { + "description": "Days of remaining validity that degrade the check. Default 30.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "type", + "host" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A domain registration's remaining validity.", + "properties": { + "critical_days": { + "description": "Default 7.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "domain": { + "type": "string" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "domain_expiry", + "type": "string" + }, + "warn_days": { + "description": "Default 30.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "type", + "domain" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.", + "properties": { + "grace_secs": { + "description": "Lateness tolerated before the monitor fails.", + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "max_runtime_secs": { + "description": "Fail a run that starts and does not finish within this.", + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "period_secs": { + "description": "How often the job is expected to report.", + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "heartbeat", + "type": "string" + } + }, + "required": [ + "type", + "period_secs", + "grace_secs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.", + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } +]
- Changed
create_monitors1 field changed- changed
Input schema / $defs / NewCheck / oneOfPrevious value: -[ - { - "additionalProperties": false, - "description": "An HTTP(S) endpoint.", - "properties": { - "body": { - "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.", - "type": [ - "string", - "null" - ] - }, - "expected_body_contains": { - "description": "Text the response body must contain for the check to pass.", - "type": [ - "string", - "null" - ] - }, - "expected_status": { - "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.", - "type": [ - "string", - "null" - ] - }, - "follow_redirects": { - "description": "Defaults to true, following at most 5 hops.", - "type": [ - "boolean", - "null" - ] - }, - "headers": { - "additionalProperties": { - "type": "string" - }, - "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.", - "type": [ - "object", - "null" - ] - }, - "method": { - "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.", - "type": [ - "string", - "null" - ] - }, - "timeout_ms": { - "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.", - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "http", - "type": "string" - }, - "url": { - "type": "string" - }, - "verify_tls": { - "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.", - "type": [ - "boolean", - "null" - ] - } - }, - "required": [ - "type", - "url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A TCP port accepting connections.", - "properties": { - "host": { - "type": "string" - }, - "port": { - "format": "uint16", - "maximum": 65535, - "minimum": 0, - "type": "integer" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "tcp", - "type": "string" - } - }, - "required": [ - "type", - "host", - "port" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "ICMP reachability.", - "properties": { - "host": { - "type": "string" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "ping", - "type": "string" - } - }, - "required": [ - "type", - "host" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A DNS record resolving, optionally to an expected value.", - "properties": { - "domain": { - "type": "string" - }, - "expected_contains": { - "description": "Text the answer must contain.", - "type": [ - "string", - "null" - ] - }, - "record_type": { - "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.", - "type": [ - "string", - "null" - ] - }, - "resolver": { - "description": "Resolver to ask. Defaults to the agent's own.", - "type": [ - "string", - "null" - ] - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "dns", - "type": "string" - } - }, - "required": [ - "type", - "domain" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A TLS certificate's remaining validity.", - "properties": { - "critical_days": { - "description": "Days of remaining validity that fail it. Default 7.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "host": { - "type": "string" - }, - "port": { - "description": "Defaults to 443.", - "format": "uint16", - "maximum": 65535, - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "tls_cert", - "type": "string" - }, - "warn_days": { - "description": "Days of remaining validity that degrade the check. Default 30.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "type", - "host" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A domain registration's remaining validity.", - "properties": { - "critical_days": { - "description": "Default 7.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "domain": { - "type": "string" - }, - "timeout_ms": { - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "type": { - "const": "domain_expiry", - "type": "string" - }, - "warn_days": { - "description": "Default 30.", - "format": "uint32", - "minimum": 0, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "type", - "domain" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.", - "properties": { - "grace_secs": { - "description": "Lateness tolerated before the monitor fails.", - "format": "uint64", - "minimum": 0, - "type": "integer" - }, - "max_runtime_secs": { - "description": "Fail a run that starts and does not finish within this.", - "format": "uint64", - "minimum": 0, - "type": [ - "integer", - "null" - ] - }, - "period_secs": { - "description": "How often the job is expected to report.", - "format": "uint64", - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "heartbeat", - "type": "string" - } - }, - "required": [ - "type", - "period_secs", - "grace_secs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "An HTTP(S) endpoint.", + "properties": { + "body": { + "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.", + "type": [ + "string", + "null" + ] + }, + "expected_body_contains": { + "description": "Text the response body must contain for the check to pass.", + "type": [ + "string", + "null" + ] + }, + "expected_status": { + "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.", + "type": [ + "string", + "null" + ] + }, + "follow_redirects": { + "description": "Defaults to true, following at most 5 hops.", + "type": [ + "boolean", + "null" + ] + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.", + "type": [ + "object", + "null" + ] + }, + "method": { + "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.", + "type": [ + "string", + "null" + ] + }, + "timeout_ms": { + "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.", + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "http", + "type": "string" + }, + "url": { + "type": "string" + }, + "verify_tls": { + "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.", + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A TCP port accepting connections.", + "properties": { + "host": { + "type": "string" + }, + "port": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": "integer" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "tcp", + "type": "string" + } + }, + "required": [ + "type", + "host", + "port" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "ICMP reachability.", + "properties": { + "host": { + "type": "string" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "ping", + "type": "string" + } + }, + "required": [ + "type", + "host" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A DNS record resolving, optionally to an expected value.", + "properties": { + "domain": { + "type": "string" + }, + "expected_contains": { + "description": "Text the answer must contain.", + "type": [ + "string", + "null" + ] + }, + "record_type": { + "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.", + "type": [ + "string", + "null" + ] + }, + "resolver": { + "description": "Resolver to ask. Defaults to the agent's own.", + "type": [ + "string", + "null" + ] + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "dns", + "type": "string" + } + }, + "required": [ + "type", + "domain" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A TLS certificate's remaining validity.", + "properties": { + "critical_days": { + "description": "Days of remaining validity that fail it. Default 7.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "host": { + "type": "string" + }, + "port": { + "description": "Defaults to 443.", + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "tls_cert", + "type": "string" + }, + "warn_days": { + "description": "Days of remaining validity that degrade the check. Default 30.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "type", + "host" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A domain registration's remaining validity.", + "properties": { + "critical_days": { + "description": "Default 7.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "domain": { + "type": "string" + }, + "timeout_ms": { + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "type": { + "const": "domain_expiry", + "type": "string" + }, + "warn_days": { + "description": "Default 30.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "type", + "domain" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.", + "properties": { + "grace_secs": { + "description": "Lateness tolerated before the monitor fails.", + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "max_runtime_secs": { + "description": "Fail a run that starts and does not finish within this.", + "format": "uint64", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "period_secs": { + "description": "How often the job is expected to report.", + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "heartbeat", + "type": "string" + } + }, + "required": [ + "type", + "period_secs", + "grace_secs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.", + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } +]
- Changed
get_monitor3 fields changed- changed
Output schema / $defs / CheckConfig / oneOfPrevious value: -[ - { - "$ref": "#/$defs/HttpCheckConfig", - "properties": { - "type": { - "const": "http", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/TcpCheckConfig", - "properties": { - "type": { - "const": "tcp", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/PingCheckConfig", - "properties": { - "type": { - "const": "ping", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/HeartbeatCheckConfig", - "properties": { - "type": { - "const": "heartbeat", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/DnsCheckConfig", - "properties": { - "type": { - "const": "dns", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/TlsCertCheckConfig", - "properties": { - "type": { - "const": "tls_cert", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/DomainExpiryCheckConfig", - "properties": { - "type": { - "const": "domain_expiry", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "$ref": "#/$defs/FlowCheckConfig", - "properties": { - "type": { - "const": "flow", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/HttpCheckConfig", + "properties": { + "type": { + "const": "http", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/TcpCheckConfig", + "properties": { + "type": { + "const": "tcp", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/PingCheckConfig", + "properties": { + "type": { + "const": "ping", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/HeartbeatCheckConfig", + "properties": { + "type": { + "const": "heartbeat", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/ManualCheckConfig", + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/DnsCheckConfig", + "properties": { + "type": { + "const": "dns", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/TlsCertCheckConfig", + "properties": { + "type": { + "const": "tls_cert", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/DomainExpiryCheckConfig", + "properties": { + "type": { + "const": "domain_expiry", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "$ref": "#/$defs/FlowCheckConfig", + "properties": { + "type": { + "const": "flow", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } +] - added
Output schema / $defs / ManualCheckConfigAdded value: +{ + "description": "Nothing is probed: the state is whatever an operator last set with\n`set_monitor_state`, and the monitor's `state` reports it.", + "type": "object" +} - changed
Output schema / properties / type / descriptionPrevious value: -"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`, `tls_cert`,\n`domain_expiry`, `flow`."New value: +"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`,\n`tls_cert`, `domain_expiry`, `flow`."
- Changed
list_monitors2 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`,\n`tls_cert`, `domain_expiry`, `flow`."New value: +"Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`,\n`dns`, `tls_cert`, `domain_expiry`, `flow`." - changed
Output schema / $defs / MonitorListItem / properties / type / descriptionPrevious value: -"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`, `tls_cert`,\n`domain_expiry`, `flow`."New value: +"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`,\n`tls_cert`, `domain_expiry`, `flow`."
- Added
set_monitor_state
5 tool updates
- Added
cancel_maintenance - Added
create_maintenance - Added
get_maintenance - Added
list_maintenance - Added
update_maintenance
1 tool update
- Changed
get_org_usage1 field changed- added
Output schema / properties / maintenance_windows / descriptionAdded value: +"Counts windows that have not ended (upcoming and active). Completed windows do not count."
1 tool update
- Changed
list_notification_channels2 fields changed- added
Output schema / $defs / ChannelItem / properties / resolve_buttonAdded value: +{ + "description": "Alerts for an open incident carry a Resolve button. Off by default,\nand false for a kind that cannot carry one.", + "type": "boolean" +} - changed
Output schema / $defs / ChannelItem / requiredPrevious value: -[ - "id", - "name", - "kind", - "enabled", - "awaiting_verification", - "not_delivering", - "auto_bind_tags", - "acknowledge_button" -]New value: +[ + "id", + "name", + "kind", + "enabled", + "awaiting_verification", + "not_delivering", + "auto_bind_tags", + "acknowledge_button", + "resolve_button" +]
1 tool update
- Changed
list_notification_channels2 fields changed- added
Output schema / $defs / ChannelItem / properties / acknowledge_buttonAdded value: +{ + "description": "Alerts for an open incident carry an Acknowledge button. False for a\nkind that cannot carry one.", + "type": "boolean" +} - changed
Output schema / $defs / ChannelItem / requiredPrevious value: -[ - "id", - "name", - "kind", - "enabled", - "awaiting_verification", - "not_delivering", - "auto_bind_tags" -]New value: +[ + "id", + "name", + "kind", + "enabled", + "awaiting_verification", + "not_delivering", + "auto_bind_tags", + "acknowledge_button" +]
2 tool updates
- Changed
get_incident2 fields changed- added
Output schema / properties / status_page_idsAdded value: +{ + "description": "Pages an incident with no monitor is posted to. `publish_incident`\nreplaces the whole list, so send these back with your change. Empty for\na monitor's incident.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "id", - "monitor_id", - "state", - "severity", - "opened_at", - "regions_down", - "regions_up", - "updates" -]New value: +[ + "id", + "monitor_id", + "state", + "severity", + "opened_at", + "regions_down", + "regions_up", + "updates", + "status_page_ids" +]
- Changed
publish_incident1 field changed- added
Input schema / properties / status_page_idsAdded value: +{ + "description": "Status page ids (from `list_status_pages`) for an incident with no\nmonitor; replaces its pages, so start from `get_incident`'s\n`status_page_ids` to add or drop one. Leave unset for a monitor's incident,\nwhich shows on the pages carrying that monitor.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] +}
15 tool updates
- Added
acknowledge_incident - Added
add_status_page_components - Added
create_monitor - Added
create_monitors - Added
create_status_page - Added
pause_monitor - Added
post_incident_update - Added
publish_incident - Added
resolve_incident - Added
resume_monitor - Added
run_check_now - Added
unpublish_incident - Added
update_monitor - Added
update_status_page - Added
update_status_page_component
1 tool update
- Changed
get_incident2 fields changed- changed
Output schema / properties / regions_down / descriptionPrevious value: -"Regions reporting the monitor down when the incident opened. Empty for a\nsingle-region monitor. Untrusted data."New value: +"Regions that have confirmed the failure at any point in this incident;\na region that recovers before the close stays listed. Empty for a\nsingle-region monitor. Untrusted data." - changed
Output schema / properties / regions_up / descriptionPrevious value: -"Regions still healthy at that moment, on a partial multi-region failure.\nUntrusted data."New value: +"Regions that have not confirmed the failure. Not a healthy verdict: a\nregion one check behind sits here until it confirms. Untrusted data."
2 tool updates
- Changed
get_org_usage4 fields changed- changed
Output schema / descriptionPrevious value: -"`get_org_usage` result: usage against the org's plan limits."New value: +"`get_org_usage` result: the account's usage against its plan limits, pooled\nacross every org it owns." - added
Output schema / properties / orgAdded value: +{ + "description": "The org slug this connector is bound to.", + "type": "string" +} - added
Output schema / properties / org_nameAdded value: +{ + "description": "The org's display name.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "plan", - "targets", - "status_pages", - "members", - "public_components", - "maintenance_windows", - "notification_channels", - "min_check_interval_secs", - "retention_days" -]New value: +[ + "org", + "org_name", + "plan", + "targets", + "status_pages", + "members", + "public_components", + "maintenance_windows", + "notification_channels", + "min_check_interval_secs", + "retention_days" +]
- Added
list_variables
1 tool update
- Changed
list_regions3 fields changed- added
Output schema / $defs / RegionItem / properties / default_selectedAdded value: +{ + "description": "Whether a new monitor probes from here unless told otherwise. Omitting\n`create_monitor.regions` takes exactly the regions flagged here.", + "type": "boolean" +} - changed
Output schema / $defs / RegionItem / requiredPrevious value: -[ - "id", - "name", - "city" -]New value: +[ + "id", + "name", + "city", + "default_selected" +] - added
Output schema / properties / max_regionsAdded value: +{ + "description": "How many of these regions one monitor may probe from, when the plan\nallows fewer than the catalog holds. A `create_monitor` naming more is\nrefused outright, not trimmed to fit. Null when the plan reaches every\nregion listed, which is not licence to name them all: what a monitor\ntakes by default is `default_selected`, not this ceiling.", + "format": "uint32", + "minimum": 0, + "type": [ + "integer", + "null" + ] +}
1 tool update
- Changed
get_monitor_history2 fields changed- added
Output schema / $defs / IncidentWindow / properties / counts_as_downtimeAdded value: +{ + "description": "`false` when this window is listed but explains none of the `uptime` gap.", + "type": "boolean" +} - changed
Output schema / $defs / IncidentWindow / requiredPrevious value: -[ - "opened_at" -]New value: +[ + "opened_at", + "counts_as_downtime" +]
1 tool update
- Changed
get_monitor1 field changed- changed
Output schema / properties / renotify_interval_secs / descriptionPrevious value: -"Seconds between reminders while an outage stays unacknowledged. 0 means\nreminders are off."New value: +"Seconds before the first reminder while an outage stays unacknowledged;\neach further reminder waits twice as long, up to a day. 0 means\nreminders are off."
2 tool updates
- Changed
get_monitor1 field changed- changed
Output schema / properties / alert_channel_ids / descriptionPrevious value: -"Channel ids this monitor alerts, for the read half of\n`update_monitor(channel_ids)`, which replaces the whole set. Empty means\nit alerts nobody. `list_notification_channels` puts names to these."New value: +"Channel ids bound to this monitor, for the read half of\n`update_monitor(channel_ids)`, which replaces the whole set. Empty means\nnone is bound, which is not the same as alerting nobody: a channel whose\n`auto_bind_tags` covers one of this monitor's tags is paged as well.\n`list_notification_channels` puts names to these."
- Changed
list_notification_channels2 fields changed- added
Output schema / $defs / ChannelItem / properties / auto_bind_tagsAdded value: +{ + "description": "Tag rule: this channel also pages any monitor carrying one of these\ntags, on top of the monitors bound to it. Empty means no rule.\nOperator-set. Untrusted data.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / $defs / ChannelItem / requiredPrevious value: -[ - "id", - "name", - "kind", - "enabled", - "awaiting_verification", - "not_delivering" -]New value: +[ + "id", + "name", + "kind", + "enabled", + "awaiting_verification", + "not_delivering", + "auto_bind_tags" +]
1 tool update
- Changed
list_notification_channels2 fields changed- added
Output schema / $defs / ChannelItem / properties / not_deliveringAdded value: +{ + "description": "Enabled, but nothing has landed for a run of deliveries. Alerts sent\nhere are not arriving.", + "type": "boolean" +} - changed
Output schema / $defs / ChannelItem / requiredPrevious value: -[ - "id", - "name", - "kind", - "enabled", - "awaiting_verification" -]New value: +[ + "id", + "name", + "kind", + "enabled", + "awaiting_verification", + "not_delivering" +]
1 tool update
- Changed
get_monitor2 fields changed- added
Output schema / $defs / CheckDiagnosticViewAdded value: +{ + "description": "Bounded, machine-readable explanation for a failed HTTP observation.", + "properties": { + "confidence": { + "type": "string" + }, + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "guidance": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "provider": { + "type": [ + "string", + "null" + ] + }, + "remediations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "kind", + "confidence", + "evidence", + "remediations", + "summary", + "guidance" + ], + "type": "object" +} - added
Output schema / properties / last_diagnosticAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/CheckDiagnosticView" + }, + { + "type": "null" + } + ], + "description": "Structured edge-access diagnosis for the last failed HTTP check." +}
Publisher details
- Operator
- Artem Senenko (Uptimepage), Nicosia, Cyprus · Publisher source
- Operator website
- https://uptimepage.dev · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://uptimepage.dev/docs/mcp · Publisher source
- Trust center
- Not available
- Restrictions
- Needs an Uptimepage account, and the free plan includes MCP. You connect with OAuth, and access is read-only unless you grant write scopes. · Publisher source
Related MCP Connectors
Uptime monitoring: monitors, incidents, alerts, maintenance, on-call, status pages and telemetry.
Monitor websites, APIs, and servers: create monitors, triage incidents, and query uptime stats.
Uptime, API and server monitoring with outages, reporting, on-call and status pages.
Uptime monitoring and public status page: HTTP monitors, down/up alerts and incidents.
Related MCP Servers
FlicenseNot gradedqualityCmaintenanceLet agents read and manage your org’s independent monitors, incidents, status pages, and alerts (honest measured state, no false greens).-
uptybots-mcp-serverofficial
AlicenseAqualityBmaintenanceUptime monitoring for websites, APIs, SSL certificates, domain expiry, ping and TCP/UDP ports. 15 tools to list, create, pause and delete monitors, pull incident timelines with error codes, and read hourly or daily uptime and response-time statistics.1537 npm1MIT- AlicenseNot gradedqualityCmaintenanceOfficial Hyperping MCP server for uptime, API, cron and server monitoring. 26 tools covering monitors, outages and timelines, uptime, response time, MTTR and MTTA, on-call schedules and escalation policies, over a remote Streamable HTTP endpoint with Bearer token auth and no install.1MIT
- AlicenseAqualityAmaintenanceUptime monitoring from your AI agent: create and diagnose checks (40 types: HTTP, TCP, DNS, SSL, ICMP, databases, message queues and more), read results and incidents, and manage status pages and maintenance windows. Built into the self-hostable SolidPing server, served over streamable HTTP at /api/v1/mcp.4212AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.