Create, test, and manage uptime monitors for websites and APIs from your AI agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token. Create an API key (upk_...) in your UptimeX project and send it as: Bearer upk_your_key
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a monitor. Returns the created monitor.
Target URL (http/https, public host).
HEAD (default) is forced to GET when content_rules are set.
Latency at/above this counts as 'slow'.
https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default.
Request timeout, clamped 1000–60000.
Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default.
Check interval; floored to plan minimum (free 300, pro 60).
Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides.
Up to 4 body rules (text_contains/text_absent/json_field).
Exact status required; null/0 = any 2xx/3xx.
Up to 4 request headers ({name,value,type?}).
Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http uptimex https://api.uptimex.co/mcp \ --header 'Authorization: Bearer YOUR_TOKEN'
Headers
Authorization (required): Bearer token. Create an API key (upk_...) in your UptimeX project and send it as: Bearer upk_your_keyCreate a monitor. Returns the created monitor.
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL (http/https, public host). |
| name | string | |
| method | string | HEAD (default) is forced to GET when content_rules are set. |
| slow_ms | integer | Latency at/above this counts as 'slow'. |
| check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
| timeout_ms | integer | Request timeout, clamped 1000–60000. |
| check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
| interval_sec | integer | Check interval; floored to plan minimum (free 300, pro 60). |
| request_body | string | Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides. |
| content_rules | array | Up to 4 body rules (text_contains/text_absent/json_field). |
| expect_status | integer | null | Exact status required; null/0 = any 2xx/3xx. |
| fail_threshold | integer | |
| request_headers | array | Up to 4 request headers ({name,value,type?}). |
| follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. |
| recover_threshold | integer |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Target URL (http/https, public host)."
},
"name": {
"type": "string"
},
"method": {
"type": "string",
"description": "HEAD (default) is forced to GET when content_rules are set."
},
"slow_ms": {
"type": "integer",
"description": "Latency at/above this counts as 'slow'."
},
"check_ssl": {
"type": "boolean",
"description": "https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default."
},
"timeout_ms": {
"type": "integer",
"description": "Request timeout, clamped 1000–60000."
},
"check_domain": {
"type": "boolean",
"description": "Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default."
},
"interval_sec": {
"type": "integer",
"description": "Check interval; floored to plan minimum (free 300, pro 60)."
},
"request_body": {
"type": "string",
"description": "Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides."
},
"content_rules": {
"type": "array",
"description": "Up to 4 body rules (text_contains/text_absent/json_field)."
},
"expect_status": {
"type": [
"integer",
"null"
],
"description": "Exact status required; null/0 = any 2xx/3xx."
},
"fail_threshold": {
"type": "integer"
},
"request_headers": {
"type": "array",
"description": "Up to 4 request headers ({name,value,type?})."
},
"follow_redirects": {
"type": "boolean",
"description": "Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable."
},
"recover_threshold": {
"type": "integer"
}
},
"additionalProperties": false
}Delete a monitor by id.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}List all of the authenticated user's monitors with current status and 24h stats.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Run one check against a draft config without saving. Returns the check result.
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL (http/https, public host). |
| name | string | |
| method | string | HEAD (default) is forced to GET when content_rules are set. |
| slow_ms | integer | Latency at/above this counts as 'slow'. |
| check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
| timeout_ms | integer | Request timeout, clamped 1000–60000. |
| check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
| interval_sec | integer | Check interval; floored to plan minimum (free 300, pro 60). |
| request_body | string | Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides. |
Update fields of an existing monitor (partial). Only provided fields change.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| url | string | Target URL (http/https, public host). |
| name | string | |
| method | string | HEAD (default) is forced to GET when content_rules are set. |
| enabled | boolean | false = pause. |
| slow_ms | integer | Latency at/above this counts as 'slow'. |
| check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
| timeout_ms | integer | Request timeout, clamped 1000–60000. |
| check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
| interval_sec | integer | Check interval; floored to plan minimum (free 300, pro 60). |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| content_rules | array | Up to 4 body rules (text_contains/text_absent/json_field). |
| expect_status | integer | null | Exact status required; null/0 = any 2xx/3xx. |
| fail_threshold | integer |
| request_headers | array | Up to 4 request headers ({name,value,type?}). |
| follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. |
| recover_threshold | integer |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Target URL (http/https, public host)."
},
"name": {
"type": "string"
},
"method": {
"type": "string",
"description": "HEAD (default) is forced to GET when content_rules are set."
},
"slow_ms": {
"type": "integer",
"description": "Latency at/above this counts as 'slow'."
},
"check_ssl": {
"type": "boolean",
"description": "https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default."
},
"timeout_ms": {
"type": "integer",
"description": "Request timeout, clamped 1000–60000."
},
"check_domain": {
"type": "boolean",
"description": "Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default."
},
"interval_sec": {
"type": "integer",
"description": "Check interval; floored to plan minimum (free 300, pro 60)."
},
"request_body": {
"type": "string",
"description": "Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides."
},
"content_rules": {
"type": "array",
"description": "Up to 4 body rules (text_contains/text_absent/json_field)."
},
"expect_status": {
"type": [
"integer",
"null"
],
"description": "Exact status required; null/0 = any 2xx/3xx."
},
"fail_threshold": {
"type": "integer"
},
"request_headers": {
"type": "array",
"description": "Up to 4 request headers ({name,value,type?})."
},
"follow_redirects": {
"type": "boolean",
"description": "Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable."
},
"recover_threshold": {
"type": "integer"
}
},
"additionalProperties": false
}| request_body | string | Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides. |
| content_rules | array | Up to 4 body rules (text_contains/text_absent/json_field). |
| expect_status | integer | null | Exact status required; null/0 = any 2xx/3xx. |
| fail_threshold | integer |
| request_headers | array | Up to 4 request headers ({name,value,type?}). |
| follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. |
| recover_threshold | integer |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"description": "Target URL (http/https, public host)."
},
"name": {
"type": "string"
},
"method": {
"type": "string",
"description": "HEAD (default) is forced to GET when content_rules are set."
},
"enabled": {
"type": "boolean",
"description": "false = pause."
},
"slow_ms": {
"type": "integer",
"description": "Latency at/above this counts as 'slow'."
},
"check_ssl": {
"type": "boolean",
"description": "https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default."
},
"timeout_ms": {
"type": "integer",
"description": "Request timeout, clamped 1000–60000."
},
"check_domain": {
"type": "boolean",
"description": "Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default."
},
"interval_sec": {
"type": "integer",
"description": "Check interval; floored to plan minimum (free 300, pro 60)."
},
"request_body": {
"type": "string",
"description": "Body for write methods (POST/PUT/PATCH/DELETE); rejected with GET/HEAD. Sent with EVERY scheduled check — use test data, not real customer writes. application/json unless a Content-Type header overrides."
},
"content_rules": {
"type": "array",
"description": "Up to 4 body rules (text_contains/text_absent/json_field)."
},
"expect_status": {
"type": [
"integer",
"null"
],
"description": "Exact status required; null/0 = any 2xx/3xx."
},
"fail_threshold": {
"type": "integer"
},
"request_headers": {
"type": "array",
"description": "Up to 4 request headers ({name,value,type?})."
},
"follow_redirects": {
"type": "boolean",
"description": "Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable."
},
"recover_threshold": {
"type": "integer"
}
},
"additionalProperties": false
}