CoreDash Uptime API 与 MCP 工具:监控项与检查记录
使用 CoreDash API key 列出、添加、修改和暂停 Uptime 监控项,并通过 REST 或 MCP 读取检查记录。
通过 CoreDash API 管理 Uptime 监控项
通过 REST 读取并修改 CoreDash 项目的 Uptime 监控项,直接使用现有的 RUM API key 即可。AI agent 则可通过 MCP 读取。
快速开始
- Base URL 为
https://app.coredash.app/api/uptime/monitors,输入与输出均为 JSON。 - 请求头
Authorization: Bearer cdk_your_key,支持 project key 或 master key。 - 首次调用:
GET /api/uptime/monitors列出所有监控项及其状态,以及最近 7 天的 uptime。
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
Uptime 监控项的 API key
Uptime 端点支持 CoreDash API 和 Agency API 的 key。
| Key | 前缀 | 可见范围 | 新建监控项归属 |
|---|---|---|---|
| Project key | cdk_ | 当前项目自身的监控项 | 始终归属当前项目 |
| Master key | cdk_master_ | 你拥有或受邀加入的全部项目的监控项 | 你在 project_id 中指定的项目(必须为你拥有的项目) |
在项目侧边栏的 Connect Your AI 页面创建 project key:输入名称,点击 Generate API key。在项目设置的 API Keys (MCP) 下也能找到这些 key。只有项目所有者才能创建。agency 账户可在侧边栏的 Agency API 页面获取 master key。项目一旦过期,其 project key 的每次调用都会返回 401。
项目的 guest 只能读取监控项。添加、修改、移动和删除监控项,需要你拥有该项目。
Claude 等 AI 连接的 OAuth token(mcp_at_)仅有只读权限。使用它调用 POST、PATCH 和 DELETE 会返回 403。
Uptime 端点
| 方法与路径 | 说明 | 返回值 |
|---|---|---|
GET /api/uptime/monitors | 列出该 key 可见的所有监控项,按名称排序。 | 200,{ "monitors": [...] },各项均包含 summary |
POST /api/uptime/monitors | 添加监控项。首次检查会在下一轮执行(:00 或 :30)。 | 201,{ "monitor": {...} } |
GET /api/uptime/monitors/:id | 获取单个监控项及其检查记录,按时间倒序排列。?limit= 用于设置检查记录数量:默认 300,最多 2100。 | 200,{ "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | 仅修改传入的字段,其余字段保持不变。 | 200,{ "monitor": {...} } |
DELETE /api/uptime/monitors/:id | 删除监控项及其所有检查记录。 | 200,{ "deleted": true } |
源站 IP 与请求头的值为敏感信息。POST、PATCH 以及 GET /api/uptime/monitors/:id 会返回这些值。列表接口与 MCP 工具则会省略 origin_ip,并将所有请求头的值显示为 ••••。
Monitor 对象
| 字段 | 含义 |
|---|---|
id | 监控项 ID,对应路径中的 :id。 |
name, url | 在控制台显示的名称以及待检查的 URL。 |
project_id | 监控项所属的 CoreDash 项目。 |
paused | 暂停检查时为 true。 |
expect_status | 判定为 up 的 HTTP 状态码。默认为 200。 |
origin_check | 设置了源站 IP 时为 true,每轮还会直接检查服务器本身。 |
origin_ip | 服务器的 IP。仅在包含敏感信息的响应中返回。 |
headers | 自定义请求头,[{ "name", "value" }]。 |
state | pending、up、failing、down、warn、blocked 或 paused。参见下方的状态表。 |
last_check_at, last_up_at | 最近一轮检查的时间,以及最近一次返回 up 的检查时间。 |
down_since | 处于 down 状态时为首次失败那轮的时间;其余情况为 null。 |
last_down | 最近一次已结束的故障时间段,{ "from", "to" },或 null。 |
check_requested_at | 添加监控项时设置。下一轮检查执行后清除。 |
last | 每种检查类型的最近一次记录:edge 和 origin,各为一个 check 对象。源站检查返回 Cloudflare 响应头时,origin_is_cdn 为 true,说明输入的 IP 不是源站服务器。 |
cert_expires | 访客获取的 HTTPS 证书到期时间。 |
created_at | 监控项的添加时间。 |
summary 和 rum 字段
列表与单个监控项均包含 summary:rounds_7d 和 down_rounds_7d 统计最近 7 天的检查轮次,uptime_7d 是其中没有 down 检查的轮次百分比,recent 包含最近 48 轮记录(时间由远及近),每条记录对应那轮的最差结果。最近 7 天内无检查记录的监控项,其 summary: null。
单个监控项还包含 rum:取自项目的 RUM 数据,即最近 7 天真实访客的 p75 TTFB,用于与检测节点的 ttfb_ms 对比。项目尚无 RUM 数据时,该值为 null。
GET /api/uptime/monitors/:id
curl "https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16?limit=2" \
-H "Authorization: Bearer cdk_your_key"
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "up",
"last_check_at": "2026-10-20T08:00:09.000Z",
"last_up_at": "2026-10-20T08:00:09.000Z",
"down_since": null,
"last_down": { "from": "2026-10-18T19:00:11.000Z", "to": "2026-10-18T20:00:10.000Z" },
"check_requested_at": null,
"last": {
"edge": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
"origin": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null },
"origin_is_cdn": false
},
"cert_expires": "2027-01-02T23:59:59.000Z",
"created_at": "2026-10-06T09:12:41.000Z"
},
"summary": {
"rounds_7d": 336,
"down_rounds_7d": 2,
"uptime_7d": 99.4,
"recent": [
{ "at": "2026-10-20T07:30:10.000Z", "outcome": "up" },
{ "at": "2026-10-20T08:00:09.000Z", "outcome": "up" }
]
},
"checks": [
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null }
],
"rum": { "ttfb_p75": 1920, "rating": "poor", "period": "last 7 days" }
}
真实响应中,recent 包含 48 轮记录;本例仅展示最近两轮。
Check 对象与检查结果
每 30 分钟检查一轮所有监控项,由两台服务器交替执行::00 由 scan1 执行,:30 由 scan2 执行。一轮检查始终模拟访客访问路径,经由 DNS 和 CDN(edge)。设置了源站 IP 时,还会直接检查服务器本身(origin)。API 不提供在两轮之间触发即时检查的接口。检查记录保留 30 天。
每次检查都会发送 user agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot)。当监控项的 URL 属于项目自身的站点(即其 host,带或不带 www,或子域名)时,检查还会附带 X-CoreDash-Bot 请求头,其值为项目设置中 CoreDash bot token 选项卡下的密钥。其他站点的监控项不会附带该 token。重定向时,该 token 遵循自定义 headers 的规则:仅在重定向保持在监控项 host 上时才会继续携带。若自行配置了名为 X-CoreDash-Bot 的请求头,该请求头会被丢弃。详情参见 CoreDash bot 页面。
| 字段 | 含义 |
|---|---|
at, server | 服务器报告该轮检查的时间,以及执行检查的服务器:scan1 或 scan2。同轮检查共享相同的 at。 |
mode | edge 或 origin。 |
outcome | up、down、blocked 或 warn。 |
status | 最终响应的 HTTP 状态码(跟随重定向后)。无响应时为 null。 |
ttfb_ms, total_ms, connect_ms | TTFB 和总耗时(均包含重定向),以及首次请求的建连耗时。 |
redirects, final_url | 跟随的重定向次数以及最终响应的 URL。 |
error, error_text | 检查失败的原因,分别为下表中的枚举值和文本说明。 |
cloudflare, cache_status | 响应是否经过 Cloudflare,以及 CDN 的缓存响应头(cf-cache-status 或 x-cache)。 |
检查结果的判定方式
| 检查结果 | 判定条件 |
|---|---|
up | 状态码等于 expect_status,除非状态码为 403、429 或 500 及以上:这些会优先判定为 blocked 或 down。 |
down | 状态码为 500 及以上,或出现 error:dns、connect、connect_timeout(10 秒内未建连)、timeout(30 秒内未收到完整响应)、tls、redirects(重定向超过 5 次)或 network。 |
blocked | 403、429 或 Cloudflare challenge:防火墙拦截了检查器。绝不会计入宕机时间。参见 在防火墙中放行 CoreDash。 |
warn | 其他任何状态码,例如发版后结算页报 404。此外还包括 invalid_ip 和 invalid_url:URL 或重定向指向私有或保留地址,或者重定向指向了非 URL 内容。检查器不会请求此类地址。 |
一轮检查中各项的最差结果决定监控项的状态,由重到轻依次为:down、blocked、warn、up。
监控项状态
state | 控制台显示 | 含义 |
|---|---|---|
pending | 等待首次检查 | 已添加;第一轮检查尚未运行。 |
up | 正常 | 上一轮检查获得了预期状态码。 |
failing | 即将宕机 | 一轮检查失败。若再失败一轮则判定为 down。 |
down | 宕机 | 连续两轮检查失败,两台服务器均检测到失败。 |
warn | 非预期状态 | 上一轮检查返回 warn。 |
blocked | 已拦截 | 防火墙拦截了检查器。 |
paused | 已暂停 | 在将 paused 设为 false 之前不会检查。 |
订阅已到期的项目中的监控项会保留其配置和最后状态。在项目重新付费之前,不会再执行检查。
添加、修改和删除监控项
POST /api/uptime/monitors
curl -X POST https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_master_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.example.com/checkout/",
"name": "Checkout",
"project_id": "655f1f77bcf86cd799439011",
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"expect_status": 200
}'
| 字段 | 规则 |
|---|---|
url | POST 时必填。完整的 http 或 https URL,不能包含用户名或密码。 |
name | 最多 80 个字符,超出部分会被截断。POST 时若留空:默认为 URL 的 host。PATCH 时若留空:保留原名称;若该 PATCH 同时传入了新的 url,则变更为新 URL 的 host。 |
project_id | 使用 master key 时必填:必须为你拥有的项目,且处于有效付费订阅或试用期内。使用 project key 时会忽略此字段,直接使用其所属项目。 |
origin_ip | 服务器的公网 IPv4 或 IPv6 地址。添加源站检查:绕过 DNS 和 CDN,直接请求该 IP。传入 "" 或 null 可移除此配置。 |
headers | 最多 5 个自定义请求头,[{ "name", "value" }]。名称:字母、数字和连字符,最多 64 个字符。值:最多 256 个字符,超出部分会被截断。重定向时,仅当目标仍为监控项的 host(无论是否带 www)时才会携带这些请求头。重定向至其他任何 host(包括子域名)均不会携带。 |
expect_status | 判定为 up 的状态码,取值范围 100 到 599。默认为 200。403、429 或任何 500 及以上的状态码绝不会判定为 up。 |
paused | 设为 true 停止检查,设为 false 恢复检查。 |
响应为 201,包含新创建的监控项,以及源站 IP 和请求头的值:
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "pending",
"last_check_at": null,
"last_up_at": null,
"down_since": null,
"last_down": null,
"check_requested_at": "2026-10-20T09:12:41.000Z",
"last": {},
"cert_expires": null,
"created_at": "2026-10-20T09:12:41.000Z"
}
}
PATCH /api/uptime/monitors/:id
仅需发送要修改的字段。headers 会替换整个列表,因此需要保留的请求头必须一并传入。以下命令用于暂停监控项:
curl -X PATCH https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{ "paused": true }'
使用 master key 时,可通过 project_id 移动监控项,规则与 POST 相同。
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
删除操作无法撤销。若要停止检查并保留历史记录,在 PATCH 中发送 { "paused": true }。
Uptime API 错误与限制
错误响应格式为 { "error": "..." },状态码为以下之一:
| 状态码 | 触发条件 |
|---|---|
400 | 请求体违反规则。具体的 error 信息见下表。 |
401 | Unauthorized:未提供 key,或 key 无效、已吊销、已过期,或关联的项目已过期。 |
403 | This token can only read. Use a CoreDash API key to change monitors.:使用 OAuth token(mcp_at_)调用 POST、PATCH 或 DELETE。对作为 guest 的项目中的监控项执行 PATCH 或 DELETE 时,会返回 403 及 Only the project's owners can change its monitors。 |
404 | Monitor not found:ID 不存在,或该 key 无权查看该监控项。 |
405 | Method not allowed。 |
400 error | 解决方法 |
|---|---|
Choose a project for this monitor | 使用 master key 时传入 project_id。 |
project not found | project_id 不是你拥有的项目。guest 无法添加监控项或将监控项移动至该项目。 |
This project's subscription has ended | 添加或移动监控项需要项目处于有效付费订阅或试用期内。 |
A project can have up to 25 monitors | 先删除一个监控项,或使用其他项目。 |
A monitor must belong to a project | 在 PATCH 中省略 project_id,或传入你拥有的项目。 |
url can't contain a username or password | 若需 Basic 认证,在 headers 中传入 Authorization 请求头。 |
origin_ip is not an IP address, origin_ip must be a public IP address | 使用服务器本身的公网 IP 地址。 |
url must be a full http or https URL, e.g. https://www.example.com/, url must start with http:// or https://, headers must be a list of {name, value}, at most 5 headers, "…" isn't a valid header name (letters, numbers and dashes only), expect_status must be an HTTP status code | 根据提示修复对应字段。具体规则见 POST 下方的字段表。 |
限制:每个项目最多 25 个监控项,每个监控项最多 5 个自定义请求头,单个监控项的 GET 请求最多返回 2100 条检查记录,检查历史保留 30 天。
Uptime MCP 工具
位于 https://app.coredash.app/api/mcp 的 CoreDash MCP server 在 RUM 工具之外还提供了两个 Uptime 工具,以及用于查询当前 key 权限范围内项目的 list_projects。这三个工具均为只读。添加、修改或删除监控项,需在控制台操作,或使用 CoreDash API key 调用上述 REST 端点。这些工具无需 project_id:project key 直接读取所属项目,master key 或 Claude 等 OAuth 连接则可读取你拥有或受邀加入的全部项目。
| 工具 | 提问示例 | 返回值 |
|---|---|---|
list_projects | “你能看到哪些站点?” | { "projects": [...] },包含 project_id、name、url 和 role(owner 或 guest)。 |
list_uptime_monitors | “所有服务都正常吗?” | { "monitors": [...] },其中源站 IP 和请求头的值已脱敏。 |
get_uptime_monitor | “结算页这周宕机过吗?从什么时候开始的?” | { "monitor", "summary", "checks" }。接收 monitor_id 和 limit(默认 100,最大 1000);summary 提供这些检查记录对应的 rounds、down_rounds 和 uptime_pct。 |
curl -X POST https://app.coredash.app/api/mcp \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_uptime_monitor",
"arguments": { "monitor_id": "6ad68c7a844fad80b752fd16", "limit": 48 }
}
}'
响应为 CoreDash API 的 JSON-RPC 包装格式,结果以 JSON 字符串形式保存在 result.content[0].text 中。若监控项不存在,该位置会返回 { "error": "Monitor not found" },且 result.isError 为 true。
更多关于 Uptime 与 CoreDash API 的内容
- Uptime 监控:CoreDash 的检查机制以及控制台中的呈现方式。
- CoreDash API:project key、JSON-RPC 格式及 RUM 工具。
- Agency API:master key 以及通过 REST 管理项目。
- CoreDash bot:user agent、
X-CoreDash-Bot请求头及 IP 地址列表。 - 在防火墙中放行 CoreDash:适用于状态显示为已拦截的监控项。