CoreDash アップタイムAPIとMCPツール: モニターとチェック結果
CoreDash APIキーを使って、アップタイムモニターの一覧表示、追加、変更、停止を行い、RESTやMCP経由でチェック結果を取得できます。
CoreDash API経由のアップタイムモニター
RUMデータで利用中のAPIキーを使って、REST経由でCoreDashプロジェクトのアップタイムモニターを参照・変更できます。AIエージェントからはMCP経由で読み取れます。
クイックスタート
- ベースURLは
https://app.coredash.app/api/uptime/monitors、入出力ともにJSON形式です。 - ヘッダーは
Authorization: Bearer cdk_your_key。プロジェクトキーまたはマスターキーを指定します。 - 初回呼び出し:
GET /api/uptime/monitorsで、モニター一覧を現在のステータスと直近7日間の稼働率とともに取得します。
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
アップタイムモニター用のAPIキー
アップタイムのエンドポイントでは、CoreDash API と Agency API のキーが使用できます。
| キー | プレフィックス | 参照対象 | 新規モニターの登録先 |
|---|---|---|---|
| プロジェクトキー | cdk_ | 該当プロジェクト自身のモニター | 常にそのプロジェクト自身 |
| マスターキー | cdk_master_ | 所有または招待されている全プロジェクトのモニター | project_id で指定した所有プロジェクト |
プロジェクトキーを作成するには、サイドバーの「Connect Your AI」ページで名前を入力し、「Generate API key」をクリックします。同じキーはプロジェクト設定の「API Keys (MCP)」にも表示されます。作成できるのはプロジェクトのオーナーのみです。マスターキーは、Agencyアカウントのサイドバーにある「Agency API」ページから取得します。プロジェクトの有効期限が切れると、そのプロジェクトキーを使った呼び出しにはすべて401が返されます。
プロジェクトのゲストはモニターを参照できます。追加、変更、移動、削除には、自身が所有するプロジェクトが必要です。
ClaudeなどのAI連携によるOAuthトークン(mcp_at_)は読み取り専用です。これを使って POST、PATCH、DELETE を実行すると403が返されます。
アップタイムのエンドポイント
| メソッドとパス | 処理内容 | レスポンス |
|---|---|---|
GET /api/uptime/monitors | キーが参照可能な全モニターを名前順で一覧表示します。 | 200、{ "monitors": [...] }(各モニターに summary を含む) |
POST /api/uptime/monitors | モニターを追加します。初回チェックは次のラウンド(毎時00分または30分)で実行されます。 | 201、{ "monitor": {...} } |
GET /api/uptime/monitors/:id | モニター1件の詳細をチェック結果(新しい順)とともに取得します。?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プロジェクトのID。 |
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 | ダウン中: 最初に失敗したラウンドの日時。それ以外は null。 |
last_down | 終了した直近の障害期間({ "from", "to" })、または null。 |
check_requested_at | モニター追加時に設定され、次のラウンドでクリアされます。 |
last | 種別ごと(edge および origin)の最新チェック結果(各checkオブジェクト)。origin_is_cdn は、オリジンチェックがCloudflareのヘッダーを返した場合に true になります(入力されたIPがサーバー自身ではないことを示します)。 |
cert_expires | 訪問者に提示されるHTTPS証明書の有効期限。 |
created_at | モニターが追加された日時。 |
summaryフィールドとrumフィールド
一覧取得と個別モニター取得のどちらにも summary が含まれます。rounds_7d と down_rounds_7d は直近7日間の総ラウンド数とダウンしたラウンド数をカウントし、uptime_7d はダウン判定がなかったラウンドの割合(%)を示します。recent には直近48ラウンドの最も悪かった結果が古い順に格納されます。直近7日間にチェック実績がないモニターでは summary: null になります。
個別モニターのレスポンスには rum も含まれます。チェッカーの ttfb_ms と比較できるよう、プロジェクトのRUMデータに基づく直近7日間の実訪問者のTTFB(p75)を示します。プロジェクトに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ラウンド分が格納されますが、この例では直近2件のみを表示しています。
checkオブジェクトと判定結果
30分ごとに1回のラウンドが実行され、2台のサーバーが交互に全モニターをチェックします(毎時00分はscan1、30分はscan2)。各ラウンドでは、訪問者のアクセス経路と同様に、DNSとCDNを経由してURLをチェックします(edge)。オリジンIPが設定されている場合は、サーバー自身も直接チェックします(origin)。ラウンドの合間にモニターを手動チェックするAPIはありません。チェック結果は30日間保持されます。
すべてのチェックで、ユーザーエージェント CoreDash/1.0 (uptime; +https://www.coredash.app/bot) を送信します。モニターのURLがプロジェクト自身のサイト上にある場合(wwwの有無を問わない同一ホスト、またはサブドメイン)、プロジェクト設定の「CoreDash bot token」タブにあるシークレット値を X-CoreDash-Bot ヘッダーとして送信します。それ以外のサイトにあるモニターにはトークンは送信されません。リダイレクト時、トークンは設定した headers と同じルールに従います。リダイレクト先がモニターのホスト内に留まる場合にのみ引き継がれます。自身で設定した 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のチャレンジ。ファイアウォールによってチェッカーが遮断された状態です。ダウンタイムとしてはカウントされません。ファイアウォールでCoreDashを許可する方法 を参照してください。 |
warn | その他のステータス(リリース後にチェックアウトページが404を返した場合など)。また、invalid_ip や invalid_url(URLやリダイレクト先がプライベートIPや予約済みアドレスを指している、またはURLではない文字列を指している場合)も該当します。チェッカーはこれらに対してリクエストを送信しません。 |
各ラウンドのチェック結果のうち、最も悪い判定によってモニターのステータスが決まります。悪い順に down、blocked、warn、up です。
モニターのステータス
state | アプリ内の表示 | 説明 |
|---|---|---|
pending | Waiting for first check | 追加済み。初回ラウンドはまだ実行されていません。 |
up | Up | 前回のラウンドで期待されるステータスを取得しました。 |
failing | Failing | 1回のラウンドが失敗しました。もう一度失敗するとdownになります。 |
down | Down | 2回連続でラウンドが失敗しました(両方のサーバーで失敗を確認)。 |
warn | Unexpected status | 前回のラウンドが warn を返しました。 |
blocked | Blocked | ファイアウォールによってチェッカーが遮断されました。 |
paused | 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のホスト名が設定されます。PATCH 時に空の場合は既存の名前を維持します(ただし同一の PATCH で新しい url を送信した場合は新しいホスト名になります)。 |
project_id | マスターキー使用時は必須。有料プラン契約中またはトライアル期間中の所有プロジェクトを指定します。プロジェクトキー使用時は無視され、自身のプロジェクトが適用されます。 |
origin_ip | サーバーのパブリックIPv4またはIPv6アドレス。設定すると、DNSやCDNを経由せずこのIPに直接リクエストするオリジンチェックが追加されます。"" または null で削除されます。 |
headers | 最大5個の追加リクエストヘッダー([{ "name", "value" }])。ヘッダー名は半角英数字とハイフンのみ、最大64文字。ヘッダー値は最大256文字(超過分は切り捨て)。リダイレクト時、wwwの有無を問わずモニターのホスト内に留まる場合にのみヘッダーが引き継がれます。サブドメインを含む他のホストへリダイレクトされる場合は送信されません。 |
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 }'
マスターキー使用時、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 } を送信してください。
アップタイムAPIのエラーと制限事項
エラーは { "error": "..." } の形式で、以下のいずれかのステータスとともに返されます:
| ステータス | 発生条件 |
|---|---|
400 | リクエストボディがルールに違反しています。違反内容は error に記載されます(下記参照)。 |
401 | Unauthorized: キーの未指定、不明なキー、失効・期限切れのキー、または有効期限が切れたプロジェクトに紐付くキー。 |
403 | This token can only read. Use a CoreDash API key to change monitors.: OAuthトークン(mcp_at_)で POST、PATCH、DELETE を実行した場合。ゲストとして参加しているプロジェクトのモニターに対して PATCH または DELETE を実行すると、Only the project's owners can change its monitors というメッセージとともに403が返されます。 |
404 | Monitor not found: 指定したIDが存在しないか、そのキーでは該当モニターを参照できません。 |
405 | Method not allowed。 |
400 error | 対処方法 |
|---|---|
Choose a project for this monitor | マスターキー使用時は project_id を指定してください。 |
project not found | project_id に指定したプロジェクトを所有していません。ゲスト権限ではモニターの追加や移動はできません。 |
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 のフィールド一覧に記載されています。 |
制限事項: 1プロジェクトあたり最大25個のモニター、1モニターあたり最大5個の追加ヘッダー、個別モニターの GET で取得できるチェック結果は最大2100件、チェック履歴の保持期間は30日間です。
アップタイム監視用MCPツール
https://app.coredash.app/api/mcp で提供される CoreDash MCPサーバー には、RUMツールに加えて2つのアップタイムツールと、キーがアクセス可能なプロジェクトを一覧表示する list_projects が用意されています。これら3つはいずれも読み取り専用です。モニターの追加、変更、削除を行う場合は、アプリまたは上記のRESTエンドポイントでCoreDash APIキーを使用してください。各ツールで project_id の指定は不要です。プロジェクトキーはそのプロジェクト自身を参照し、マスターキーや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ラッパー形式で返され、結果は result.content[0].text にJSON文字列として格納されます。該当するモニターが存在しない場合はそこに { "error": "Monitor not found" } が入り、result.isError は true になります。
アップタイムとCoreDash APIの詳細
- アップタイム監視: CoreDashのチェック項目とアプリ画面での確認方法。
- CoreDash API: プロジェクトキー、JSON-RPC形式、RUMツール。
- Agency API: マスターキーとRESTによるプロジェクト操作。
- CoreDash bot: ユーザーエージェント、
X-CoreDash-Botヘッダー、IPアドレス。 - ファイアウォールでCoreDashを許可する: ステータスが「Blocked」と表示されているモニター向け。