Skip to main content
Glama

Create a monitor

create_monitor

Create an HTTP, TCP or ICMP monitor checking a service at a regular interval from 1 to 10 regions, it opens an incident once the failures are confirmed. The first check runs right away when the organization has monitoring events left in its quota, and the uptime.monitor.created alert rules are triggered.

Tool call template

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

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "project_id": "<project_id>",
      "name": "<name>",
      "protocol": "<protocol>",
      "request": "<request>",
      "regions": "<regions>"
    },
    "name": "create_monitor"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYesMonitor name
tagsNoResource tags, made of lowercase letters, numbers, `.`, `_`, `:` and `-`. An organization can have up to 200 tags.
regionsYesList of regions where monitoring checks are performed
requestYesMonitoring request, depends of the chosen protocol
timeoutNoMonitoring timeout in milliseconds
intervalNoMonitoring interval in seconds
protocolYesMonitoring protocol
project_idYesID of the project to act on, see whoami
display_nameNoPublic name of the monitor on status pages, defaults to the monitor name
region_thresholdNoNumber of regions that must fail before an incident is confirmed, cannot exceed the number of selected regions
success_assertionsNoRequired for the HTTP protocol, with at least one assertion, and ignored for the TCP and ICMP protocols. A check is successful when all its assertions are true.
incident_confirmationsNoNumber of uninterrupted failed checks required to create an incident
recovery_confirmationsNoNumber of uninterrupted successful checks required to resolve an incident

Output Schema

NameRequiredDescriptionDefault
idNoMonitor ID
nameNoMonitor name
tagsNoResource tags, made of lowercase letters, numbers, `.`, `_`, `:` and `-`. An organization can have up to 200 tags.
pausedNoWhether the monitor is currently paused
statusNoMonitor current status
regionsNoList of regions where monitoring checks are performed
requestNoMonitoring request, depends of the chosen protocol
timeoutNoMonitoring timeout in milliseconds
intervalNoMonitoring interval in seconds
protocolNoMonitoring protocol
created_atNoDate of creation for the entity
project_idNoParent project ID
updated_atNoDate of last update for the entity
display_nameNoPublic name of the monitor on status pages, defaults to the monitor name
response_timeNo75th percentile (P75) response time of successful checks over the last 7 days, in milliseconds
last_checked_atNoDate of the last performed check with a 30s accuracy
region_thresholdNoNumber of regions that must fail before an incident is confirmed, cannot exceed the number of selected regions
success_assertionsNoRequired for the HTTP protocol, with at least one assertion, and ignored for the TCP and ICMP protocols. A check is successful when all its assertions are true.
incident_confirmationsNoNumber of uninterrupted failed checks required to create an incident
recovery_confirmationsNoNumber of uninterrupted successful checks required to resolve an incident

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / request / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "body": {
      -        "description": "HTTP request body for POST, PUT and PATCH requests",
      -        "examples": [
      -          "Hello, World!"
      -        ],
      -        "maxLength": 500,
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "default": true,
      -        "description": "Follow redirects",
      -        "examples": [
      -          true
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "description": "Additional HTTP headers to add to the request",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Header name, the User-Agent, Signature, Signature-Input and Signature-Agent headers are not allowed",
      -              "examples": [
      -                "X-Phare-Says"
      -              ],
      -              "maxLength": 50,
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Header value",
      -              "examples": [
      -                "Hello world!"
      -              ],
      -              "maxLength": 1024,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 10,
      -        "type": [
      -          "array",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "HTTP request method",
      -        "enum": [
      -          "HEAD",
      -          "GET",
      -          "POST",
      -          "PUT",
      -          "PATCH",
      -          "OPTIONS"
      -        ],
      -        "type": "string"
      -      },
      -      "tls_skip_verify": {
      -        "default": false,
      -        "description": "Skip SSL verification",
      -        "examples": [
      -          false
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "description": "HTTP request url",
      -        "examples": [
      -          "https://docs.phare.io/introduction"
      -        ],
      -        "maxLength": 255,
      -        "type": "string"
      -      },
      -      "user_agent_secret": {
      -        "description": "A secret value to be used in the User-Agent header for authenticating the request",
      -        "examples": [
      -          "definitely-not-a-bot"
      -        ],
      -        "maxLength": 50,
      -        "minLength": 1,
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "method",
      -      "url"
      -    ],
      -    "title": "HTTP protocol",
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "connection": {
      -        "description": "Connection type for TCP protocol",
      -        "enum": [
      -          "plain",
      -          "tls"
      -        ],
      -        "type": "string"
      -      },
      -      "host": {
      -        "description": "TCP request hostname or IP address",
      -        "examples": [
      -          "8.8.8.8"
      -        ],
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "TCP request port, between 1 and 65535",
      -        "examples": [
      -          "80"
      -        ],
      -        "type": "string"
      -      },
      -      "tls_skip_verify": {
      -        "default": false,
      -        "description": "Skip TLS verification",
      -        "examples": [
      -          false
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "host",
      -      "port",
      -      "connection"
      -    ],
      -    "title": "TCP protocol",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "host": {
      -        "description": "ICMP request hostname or IP address",
      -        "examples": [
      -          "8.8.8.8"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "host"
      -    ],
      -    "title": "ICMP protocol",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "body": {
      +        "description": "HTTP request body for POST, PUT and PATCH requests",
      +        "examples": [
      +          "Hello, World!"
      +        ],
      +        "maxLength": 500,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "default": true,
      +        "description": "Follow redirects",
      +        "examples": [
      +          true
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "description": "Additional HTTP headers to add to the request",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Header name, unique per request, the User-Agent, Signature, Signature-Input and Signature-Agent headers are not allowed",
      +              "examples": [
      +                "X-Phare-Says"
      +              ],
      +              "maxLength": 50,
      +              "type": "string"
      +            },
      +            "secret": {
      +              "description": "Whether the header value is a secret, encrypted and never returned. False for a new header, an update without it keeps the current flag of the header with the same name.",
      +              "examples": [
      +                false
      +              ],
      +              "type": "boolean"
      +            },
      +            "value": {
      +              "description": "Header value, always required on create. A secret header value is never returned, so on update it is only optional for a secret header that is already set: without it, the header keeps its current value, matched by name.",
      +              "examples": [
      +                "Hello world!"
      +              ],
      +              "maxLength": 1024,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 10,
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "HTTP request method",
      +        "enum": [
      +          "HEAD",
      +          "GET",
      +          "POST",
      +          "PUT",
      +          "PATCH",
      +          "OPTIONS"
      +        ],
      +        "type": "string"
      +      },
      +      "tls_skip_verify": {
      +        "default": false,
      +        "description": "Skip SSL verification",
      +        "examples": [
      +          false
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "description": "HTTP request url",
      +        "examples": [
      +          "https://docs.phare.io/introduction"
      +        ],
      +        "maxLength": 255,
      +        "type": "string"
      +      },
      +      "user_agent_secret": {
      +        "description": "A secret value to be used in the User-Agent header for authenticating the request. It is never returned, an update without it keeps the current secret and null removes it.",
      +        "examples": [
      +          "definitely-not-a-bot"
      +        ],
      +        "maxLength": 50,
      +        "minLength": 1,
      +        "type": [
      +          "string",
      +          "null"
      +        ],
      +        "writeOnly": true
      +      }
      +    },
      +    "required": [
      +      "method",
      +      "url"
      +    ],
      +    "title": "HTTP protocol",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "connection": {
      +        "description": "Connection type for TCP protocol",
      +        "enum": [
      +          "plain",
      +          "tls"
      +        ],
      +        "type": "string"
      +      },
      +      "host": {
      +        "description": "TCP request hostname or IP address",
      +        "examples": [
      +          "8.8.8.8"
      +        ],
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "TCP request port, between 1 and 65535",
      +        "examples": [
      +          "80"
      +        ],
      +        "type": "string"
      +      },
      +      "tls_skip_verify": {
      +        "default": false,
      +        "description": "Skip TLS verification",
      +        "examples": [
      +          false
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "host",
      +      "port",
      +      "connection"
      +    ],
      +    "title": "TCP protocol",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "host": {
      +        "description": "ICMP request hostname or IP address",
      +        "examples": [
      +          "8.8.8.8"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "host"
      +    ],
      +    "title": "ICMP protocol",
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / properties / request / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "body": {
      -        "description": "HTTP request body for POST, PUT and PATCH requests",
      -        "examples": [
      -          "Hello, World!"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "default": true,
      -        "description": "Follow redirects",
      -        "examples": [
      -          true
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "description": "Additional HTTP headers to add to the request",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Header name, the User-Agent, Signature, Signature-Input and Signature-Agent headers are not allowed",
      -              "examples": [
      -                "X-Phare-Says"
      -              ],
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Header value",
      -              "examples": [
      -                "Hello world!"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "type": [
      -          "array",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "HTTP request method",
      -        "enum": [
      -          "HEAD",
      -          "GET",
      -          "POST",
      -          "PUT",
      -          "PATCH",
      -          "OPTIONS"
      -        ],
      -        "type": "string"
      -      },
      -      "tls_skip_verify": {
      -        "default": false,
      -        "description": "Skip SSL verification",
      -        "examples": [
      -          false
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "description": "HTTP request url",
      -        "examples": [
      -          "https://docs.phare.io/introduction"
      -        ],
      -        "type": "string"
      -      },
      -      "user_agent_secret": {
      -        "description": "A secret value to be used in the User-Agent header for authenticating the request",
      -        "examples": [
      -          "definitely-not-a-bot"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "title": "HTTP protocol",
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "connection": {
      -        "description": "Connection type for TCP protocol",
      -        "enum": [
      -          "plain",
      -          "tls"
      -        ],
      -        "type": "string"
      -      },
      -      "host": {
      -        "description": "TCP request hostname or IP address",
      -        "examples": [
      -          "8.8.8.8"
      -        ],
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "TCP request port, between 1 and 65535",
      -        "examples": [
      -          "80"
      -        ],
      -        "type": "string"
      -      },
      -      "tls_skip_verify": {
      -        "default": false,
      -        "description": "Skip TLS verification",
      -        "examples": [
      -          false
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "title": "TCP protocol",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "host": {
      -        "description": "ICMP request hostname or IP address",
      -        "examples": [
      -          "8.8.8.8"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "title": "ICMP protocol",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "body": {
      +        "description": "HTTP request body for POST, PUT and PATCH requests",
      +        "examples": [
      +          "Hello, World!"
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "default": true,
      +        "description": "Follow redirects",
      +        "examples": [
      +          true
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "description": "Additional HTTP headers to add to the request",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Header name, unique per request, the User-Agent, Signature, Signature-Input and Signature-Agent headers are not allowed",
      +              "examples": [
      +                "X-Phare-Says"
      +              ],
      +              "type": "string"
      +            },
      +            "secret": {
      +              "description": "Whether the header value is a secret, encrypted and never returned. False for a new header, an update without it keeps the current flag of the header with the same name.",
      +              "examples": [
      +                false
      +              ],
      +              "type": "boolean"
      +            },
      +            "value": {
      +              "description": "Header value, always required on create. A secret header value is never returned, so on update it is only optional for a secret header that is already set: without it, the header keeps its current value, matched by name.",
      +              "examples": [
      +                "Hello world!"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "HTTP request method",
      +        "enum": [
      +          "HEAD",
      +          "GET",
      +          "POST",
      +          "PUT",
      +          "PATCH",
      +          "OPTIONS"
      +        ],
      +        "type": "string"
      +      },
      +      "tls_skip_verify": {
      +        "default": false,
      +        "description": "Skip SSL verification",
      +        "examples": [
      +          false
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "description": "HTTP request url",
      +        "examples": [
      +          "https://docs.phare.io/introduction"
      +        ],
      +        "type": "string"
      +      },
      +      "user_agent_secret_enabled": {
      +        "description": "Whether a user agent secret is set",
      +        "examples": [
      +          true
      +        ],
      +        "readOnly": true,
      +        "type": "boolean"
      +      }
      +    },
      +    "title": "HTTP protocol",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "connection": {
      +        "description": "Connection type for TCP protocol",
      +        "enum": [
      +          "plain",
      +          "tls"
      +        ],
      +        "type": "string"
      +      },
      +      "host": {
      +        "description": "TCP request hostname or IP address",
      +        "examples": [
      +          "8.8.8.8"
      +        ],
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "TCP request port, between 1 and 65535",
      +        "examples": [
      +          "80"
      +        ],
      +        "type": "string"
      +      },
      +      "tls_skip_verify": {
      +        "default": false,
      +        "description": "Skip TLS verification",
      +        "examples": [
      +          false
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "title": "TCP protocol",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "host": {
      +        "description": "ICMP request hostname or IP address",
      +        "examples": [
      +          "8.8.8.8"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "title": "ICMP protocol",
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "created_at": {
      +      "description": "Date of creation for the entity",
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "display_name": {
      +      "default": null,
      +      "description": "Public name of the monitor on status pages, defaults to the monitor name",
      +      "examples": [
      +        "Website"
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "id": {
      +      "description": "Monitor ID",
      +      "examples": [
      +        1
      +      ],
      +      "type": "integer"
      +    },
      +    "incident_confirmations": {
      +      "default": 3,
      +      "description": "Number of uninterrupted failed checks required to create an incident",
      +      "enum": [
      +        1,
      +        2,
      +        3,
      +        4,
      +        5
      +      ],
      +      "examples": [
      +        1
      +      ],
      +      "type": "integer"
      +    },
      +    "interval": {
      +      "default": 60,
      +      "description": "Monitoring interval in seconds",
      +      "enum": [
      +        30,
      +        60,
      +        120,
      +        180,
      +        300,
      +        600,
      +        900,
      +        1800,
      +        3600
      +      ],
      +      "examples": [
      +        60
      +      ],
      +      "type": "integer"
      +    },
      +    "last_checked_at": {
      +      "description": "Date of the last performed check with a 30s accuracy",
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "name": {
      +      "description": "Monitor name",
      +      "examples": [
      +        "Website"
      +      ],
      +      "type": "string"
      +    },
      +    "paused": {
      +      "description": "Whether the monitor is currently paused",
      +      "examples": [
      +        true
      +      ],
      +      "type": "boolean"
      +    },
      +    "project_id": {
      +      "description": "Parent project ID",
      +      "examples": [
      +        1
      +      ],
      +      "type": "integer"
      +    },
      +    "protocol": {
      +      "description": "Monitoring protocol",
      +      "enum": [
      +        "http",
      +        "tcp",
      +        "icmp"
      +      ],
      +      "type": "string"
      +    },
      +    "recovery_confirmations": {
      +      "default": 3,
      +      "description": "Number of uninterrupted successful checks required to resolve an incident",
      +      "enum": [
      +        1,
      +        2,
      +        3,
      +        4,
      +        5
      +      ],
      +      "examples": [
      +        1
      +      ],
      +      "type": "integer"
      +    },
      +    "region_threshold": {
      +      "default": 1,
      +      "description": "Number of regions that must fail before an incident is confirmed, cannot exceed the number of selected regions",
      +      "examples": [
      +        1
      +      ],
      +      "type": "integer"
      +    },
      +    "regions": {
      +      "description": "List of regions where monitoring checks are performed",
      +      "items": {
      +        "enum": [
      +          "as-jpn-hnd",
      +          "as-sgp-sin",
      +          "as-tha-bkk",
      +          "eu-deu-fra",
      +          "eu-fra-cdg",
      +          "eu-gbr-lhr",
      +          "eu-swe-arn",
      +          "ng-nld-ams",
      +          "na-mex-mex",
      +          "na-usa-iad",
      +          "na-usa-sea",
      +          "oc-aus-syd",
      +          "sa-bra-gru"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "request": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "body": {
      +              "description": "HTTP request body for POST, PUT and PATCH requests",
      +              "examples": [
      +                "Hello, World!"
      +              ],
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "follow_redirects": {
      +              "default": true,
      +              "description": "Follow redirects",
      +              "examples": [
      +                true
      +              ],
      +              "type": [
      +                "boolean",
      +                "null"
      +              ]
      +            },
      +            "headers": {
      +              "description": "Additional HTTP headers to add to the request",
      +              "items": {
      +                "properties": {
      +                  "name": {
      +                    "description": "Header name, the User-Agent, Signature, Signature-Input and Signature-Agent headers are not allowed",
      +                    "examples": [
      +                      "X-Phare-Says"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Header value",
      +                    "examples": [
      +                      "Hello world!"
      +                    ],
      +                    "type": "string"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": [
      +                "array",
      +                "null"
      +              ]
      +            },
      +            "method": {
      +              "description": "HTTP request method",
      +              "enum": [
      +                "HEAD",
      +                "GET",
      +                "POST",
      +                "PUT",
      +                "PATCH",
      +                "OPTIONS"
      +              ],
      +              "type": "string"
      +            },
      +            "tls_skip_verify": {
      +              "default": false,
      +              "description": "Skip SSL verification",
      +              "examples": [
      +                false
      +              ],
      +              "type": [
      +                "boolean",
      +                "null"
      +              ]
      +            },
      +            "url": {
      +              "description": "HTTP request url",
      +              "examples": [
      +                "https://docs.phare.io/introduction"
      +              ],
      +              "type": "string"
      +            },
      +            "user_agent_secret": {
      +              "description": "A secret value to be used in the User-Agent header for authenticating the request",
      +              "examples": [
      +                "definitely-not-a-bot"
      +              ],
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "title": "HTTP protocol",
      +          "type": "object"
      +        },
      +        {
      +          "properties": {
      +            "connection": {
      +              "description": "Connection type for TCP protocol",
      +              "enum": [
      +                "plain",
      +                "tls"
      +              ],
      +              "type": "string"
      +            },
      +            "host": {
      +              "description": "TCP request hostname or IP address",
      +              "examples": [
      +                "8.8.8.8"
      +              ],
      +              "type": "string"
      +            },
      +            "port": {
      +              "description": "TCP request port, between 1 and 65535",
      +              "examples": [
      +                "80"
      +              ],
      +              "type": "string"
      +            },
      +            "tls_skip_verify": {
      +              "default": false,
      +              "description": "Skip TLS verification",
      +              "examples": [
      +                false
      +              ],
      +              "type": [
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "title": "TCP protocol",
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "host": {
      +              "description": "ICMP request hostname or IP address",
      +              "examples": [
      +                "8.8.8.8"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "title": "ICMP protocol",
      +          "type": "object"
      +        }
      +      ],
      +      "description": "Monitoring request, depends of the chosen protocol",
      +      "type": "object"
      +    },
      +    "response_time": {
      +      "description": "75th percentile (P75) response time of successful checks over the last 7 days, in milliseconds",
      +      "examples": [
      +        123
      +      ],
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "Monitor current status",
      +      "enum": [
      +        "fetching",
      +        "online",
      +        "offline",
      +        "partial",
      +        "paused"
      +      ],
      +      "type": "string"
      +    },
      +    "success_assertions": {
      +      "description": "Required for the HTTP protocol, with at least one assertion, and ignored for the TCP and ICMP protocols. A check is successful when all its assertions are true.",
      +      "items": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "operator": {
      +                "description": "Operator to use for the assertion",
      +                "enum": [
      +                  "in",
      +                  "not_in"
      +                ],
      +                "examples": [
      +                  "in"
      +                ],
      +                "type": "string"
      +              },
      +              "type": {
      +                "description": "Type of assertion, only one status code assertion is allowed",
      +                "enum": [
      +                  "status_code"
      +                ],
      +                "type": "string"
      +              },
      +              "value": {
      +                "description": "A comma-separated list of status code values, you can use x as a wildcard for any digit.",
      +                "examples": [
      +                  "2xx,30x,418"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "title": "Status code assertion",
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "operator": {
      +                "description": "Operator to use for the assertion",
      +                "enum": [
      +                  "equals",
      +                  "not_equals"
      +                ],
      +                "examples": [
      +                  "equals"
      +                ],
      +                "type": "string"
      +              },
      +              "selector": {
      +                "description": "The name of the header to assert",
      +                "examples": [
      +                  "Content-Type"
      +                ],
      +                "type": "string"
      +              },
      +              "type": {
      +                "description": "Type of assertion",
      +                "enum": [
      +                  "response_header"
      +                ],
      +                "type": "string"
      +              },
      +              "value": {
      +                "description": "The value of the header to assert",
      +                "examples": [
      +                  "application/json"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "title": "Response header assertion",
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "operator": {
      +                "description": "Operator to use for the assertion",
      +                "enum": [
      +                  "contains",
      +                  "not_contains"
      +                ],
      +                "examples": [
      +                  "contains"
      +                ],
      +                "type": "string"
      +              },
      +              "type": {
      +                "description": "Type of assertion, not available for HEAD and OPTIONS requests",
      +                "enum": [
      +                  "response_body"
      +                ],
      +                "type": "string"
      +              },
      +              "value": {
      +                "description": "A word or sentence to check in the response body",
      +                "examples": [
      +                  "Hello, World!"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "title": "Response body assertion",
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "type": "array"
      +    },
      +    "tags": {
      +      "description": "Resource tags, made of lowercase letters, numbers, `.`, `_`, `:` and `-`. An organization can have up to 200 tags.",
      +      "items": {
      +        "examples": [
      +          "environment:production"
      +        ],
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "timeout": {
      +      "default": 20000,
      +      "description": "Monitoring timeout in milliseconds",
      +      "enum": [
      +        1000,
      +        2000,
      +        3000,
      +        4000,
      +        5000,
      +        6000,
      +        7000,
      +        8000,
      +        9000,
      +        10000,
      +        15000,
      +        20000,
      +        25000,
      +        30000
      +      ],
      +      "examples": [
      +        20000
      +      ],
      +      "type": "integer"
      +    },
      +    "updated_at": {
      +      "description": "Date of last update for the entity",
      +      "format": "date-time",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: an incident is opened only after failures are confirmed, the first check runs immediately subject to the organization's monitoring-event quota, and `uptime.monitor.created` alert rules are triggered. What it does not cover is rate limiting or the failure mode when quota is exhausted.

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

Conciseness5/5

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

Two sentences, both front-loaded with the highest-value facts (what gets created, then the side effects and timing). No filler or restatement of the title; the quota caveat is packed efficiently into the same clause as the immediate-first-check behavior.

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

Completeness4/5

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

For a 13-parameter, nested-oneOf tool with an output schema and full schema descriptions, the definition covers the essential behavioral surface: side effects, incident semantics, and first-check timing. The remaining gap is the protocol-dependent coupling of `request` and `success_assertions`, which the schema explains but the description does not reinforce.

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

Parameters3/5

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

Schema description coverage is 100% with rich per-field text, enums, and defaults, so the schema already carries parameter meaning. The description only echoes the 1-10 region range and the protocol choice, adding essentially nothing beyond what the schema documents (e.g., it never mentions region_threshold, incident_confirmations, or that success_assertions are required for HTTP and ignored for TCP/ICMP).

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

Purpose4/5

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

The description opens with a specific verb and resource ('Create an HTTP, TCP or ICMP monitor') and scopes it to periodic checks across 1-10 regions. The 'Create' verb makes it distinguishable from the delete/get/pause/resume/update siblings without needing the sibling list.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is for provisioning a new monitor, but there is no explicit when-to-use guidance, no mention of update_monitor for existing monitors, and no stated prerequisites such as quota or project selection.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources