openuptime について
OpenUptimeは、Webサイトやインフラを運用するチーム向けのオープンソース監視・ステータスページサービスです。複数のチェック方式、インシデント管理、通知チャネルを備え、Cloudflare WorkersまたはDockerにデプロイできます。
主な機能
- 01HTTP・TCP・DNS・DB・ハートビート監視
- 02インシデントとメンテナンスの管理
- 03購読機能付き公開ステータスページ
- 04メール・チャット・Webhook通知
- 05ワークスペース・プロジェクト・ロール・APIキー
活用シーン
- 01サービスの稼働状況や応答遅延を監視する
- 02インシデントや計画メンテナンスを追跡する
- 03購読者向けにサービス状況を公開する
MCP 対応
MCPサーバーは、エージェントや他のMCPクライアントからStreamable HTTP経由で`/api/mcp`に接続し、モニター、インシデント、ステータスページを管理できます。OAuthまたはAPIキー認証に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://openuptime.app/api/mcpclaude mcp add --transport http app-openuptime https://openuptime.app/api/mcp{"mcpServers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}Cursor で開く{"servers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}VS Code で開く{"mcpServers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}{"mcpServers":{"app-openuptime":{"serverUrl":"https://openuptime.app/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細

OpenUptime
オープンソースの稼働状況監視とステータスページです。Postgres を使用して Cloudflare Workers 上で実行するか、1 つの Docker コンテナで実行できます。
ホスト版 · ドキュメント · リファレンス · MIT ライセンス
- HTTP、TCP、DNS、ハートビート、PostgreSQL、MySQL、Redis のチェックに対応し、キーワードの照合と応答遅延アラートも利用できます
- インシデント、メンテナンス期間、公開ステータスページに対応し、メール/RSS の購読も利用できます
- Slack、Lark / Feishu、Telegram、PagerDuty、Webhook、メールへのアラート通知
- ワークスペース、プロジェクト、ロール、API キー、エージェント向け MCP サーバー、JSON のインポート/エクスポート
| 部分 | スタック |
|---|---|
apps/api | Hono、better-auth、Cloudflare Worker(cron + キューコンシューマー) |
apps/web | Astro(静的ページ、ステータスページ用 SSR)+ React アイランド |
packages/repo | ストレージインターフェース(Repo)とエンティティ型 |
packages/db-pg | Repo の Postgres 実装:Drizzle スキーマ、マイグレーション |
Cloudflare にデプロイする
サイトは、1 つのドメイン上にある 2 つの Worker で構成されています。
| Worker | 配信内容 | ほかの役割 |
|---|---|---|
openuptime-api | your-domain/api/*(ゾーン上の Worker ルート) | 分単位の cron、チェックを実行するキューコンシューマー |
openuptime-web | your-domain 上のそれ以外すべて(Worker カスタムドメイン) | ステータスページ(SSR)。サービスバインディング経由で API にアクセス |
API を同じドメインの /api/* 配下に置くことで、セッション Cookie は同一オリジンのままになります。API 用に別のホスト名を用意する必要はありません。
始める前に
- Cloudflare アカウントと、DNS が Cloudflare 上にあるドメイン(ゾーン)。
- インターネットからアクセスできる Postgres データベース(Neon、Supabase、RDS、または独自のデータベース)。Workers は Hyperdrive 経由で接続します。
- Node.js 22+ と pnpm(
corepack enableで固定バージョンを利用できます)。 - キューを使うには Workers の Paid プランが必要です(デフォルト)。Free プランでは代わりにインラインモードで実行してください。リファレンスを参照してください。
1. コードを取得してサインインする
git clone https://github.com/becoolme/openuptime.git && cd openuptime
pnpm install
cd apps/api && npx wrangler login
以下の npx wrangler … コマンドは、特に記載がない限り apps/api で実行します。
2. Queue と Hyperdrive を作成する
npx wrangler queues create openuptime-checks
npx wrangler hyperdrive create openuptime-prod --connection-string="postgres://user:pass@host:5432/db"
2 つ目のコマンドで ID が表示されます。apps/api/wrangler.jsonc で hyperdrive の行のコメントを解除し、ID を貼り付けます。
"hyperdrive": [{ "binding": "HYPERDRIVE", "id": "<id printed above>" }],
コメントアウトされている placement の行は任意です(Worker をデータベースホストの近くで実行します)。必要な場合を除き、コメントアウトしたままにしてください。
3. スキーマを作成する
リポジトリのルートから実行します。
DATABASE_URL="postgres://user:pass@host:5432/db" pnpm db:migrate
新しい変更分だけを適用するため、アップグレードのたびに再実行してください。CREATE SCHEMA は実行しないため、データベースレベルの CREATE 権限がないロールでも使用できます。
4. ドメインを設定する
2 つのファイルを編集します。どちらも status.example.com を独自のドメインに置き換えてください。
apps/api/wrangler.jsonc では、サブドメインから配信する場合でも、zone_name にはゾーン(ルートドメイン)を指定します。
routes のコメントを解除して、次のように設定します。
"routes": [{ "pattern": "status.example.com/api/*", "zone_name": "example.com" }],
"vars": {
"BETTER_AUTH_URL": "https://status.example.com", // public origin: cookies, OAuth, email links
"WEB_ORIGIN": "https://status.example.com", // same value
"EMAIL_FROM": "[email protected]" // sender address; optional, see below
}
メールは任意です。設定しない場合、招待とアラートは Worker のログに書き込まれます。メールを送信するには、まず Cloudflare ダッシュボードの Email Sending でドメインを登録してください(リファレンスを参照)。
apps/web/wrangler.jsonc:
"routes": [{ "pattern": "status.example.com", "custom_domain": true }],
"vars": { "PRODUCT_URL": "https://status.example.com" } // target of the "Powered by" link on status pages
カスタムドメインの設定によって DNS レコードと証明書が自動作成されます。ホスト名に、すでに別の場所を指す DNS レコードが設定されていてはなりません。
Cloudflare 上のドメインをお持ちでない場合:両方のファイルで routes を省略し、BETTER_AUTH_URL と WEB_ORIGIN を Web Worker の https://openuptime-web.<your-subdomain>.workers.dev アドレスに設定します。その後、Web Worker はサービスバインディング経由で /api/* を API Worker に転送するため、Cookie は同一オリジンのままになります。
5. シークレットを設定する
npx wrangler secret put BETTER_AUTH_SECRET # openssl rand -hex 32
npx wrangler secret put CRON_SECRET # any long random string; guards /internal/*
wrangler から Worker の作成を求められたら、yes と答えてください。任意で GITHUB_CLIENT_ID と GITHUB_CLIENT_SECRET を設定すると、「GitHub でサインイン」を追加できます。
6. デプロイする
pnpm exec wrangler deploy # in apps/api
cd ../web && pnpm build && pnpm exec wrangler deploy
Web Worker は名前で API にバインドされるため、先に API をデプロイしてください。
7. 確認する
curl https://status.example.com/api/health # {"ok":true}
ドメインを開いて、サインアップします。自分のアカウントを作成したら、API の vars で "DISABLE_SIGNUP": "true" を設定して再デプロイすると、登録を停止できます(招待された人は引き続き参加できます)。
後でアップグレードする場合: pull、pnpm install、pnpm db:migrate の順に実行してから、API、Web Worker の順にデプロイします。
Docker でセルフホストする
1 つのコンテナで API、Web アプリ、チェックのスケジューラーが動作します。Postgres は compose ファイルに含まれています。公開済みのイメージを実行するか、ソースからビルドしてください。設定はどちらも同じです。
オプション A:公開済みのイメージを実行する
タグ付きリリースは、linux/amd64 と linux/arm64 向けに ghcr.io/becoolme/openuptime で公開されています。クローンもビルドも必要ありません。
mkdir openuptime && cd openuptime
curl -fsSLO https://raw.githubusercontent.com/becoolme/openuptime/main/docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/becoolme/openuptime/main/.env.docker.example -o .env
.env を編集して、POSTGRES_PASSWORD と BETTER_AUTH_SECRET(openssl rand -hex 32)を設定し、OPENUPTIME_IMAGE のコメントを解除します。
バージョンを固定する(ghcr.io/becoolme/openuptime:0.1.0)か、最新のリリースを使う(:latest)ようにします。その後、次を実行します。
docker compose pull && docker compose up -d # http://localhost:8080
アップグレードするには、バージョンを固定している場合はタグを変更してから、同じ 2 つのコマンドをもう一度実行します。マイグレーションは起動時に実行されます。
オプション B:ソースからビルドする
git clone https://github.com/becoolme/openuptime.git && cd openuptime
cp .env.docker.example .env # set POSTGRES_PASSWORD and BETTER_AUTH_SECRET (openssl rand -hex 32)
docker compose up -d --build # http://localhost:8080
アップグレードするには、git pull を実行してから、docker compose up -d --build を実行します。
どちらの場合も
スキーマは起動時にマイグレーションされ、データは pgdata ボリュームに保存されます。アプリを http://localhost:8080 以外から提供する場合は、PUBLIC_URL を設定してください。メールは任意です。リファレンスを参照してください。
自分のアカウントを作成したら、.env で DISABLE_SIGNUP=true を設定し、docker compose up -d を実行すると、登録を停止できます(招待された人は引き続き参加できます)。
開発する
pnpm install
cp .env.example apps/api/.dev.vars # edit DATABASE_URL and secrets
DATABASE_URL=postgres://user:pass@localhost:5432/openuptime_dev pnpm db:migrate # same URL as in .dev.vars
pnpm dev:api # http://localhost:8787 (checks run inline every 15s)
pnpm dev:web # http://localhost:4321 (proxies /api to the API)
pnpm typecheck
MCP サーバー
エージェント(Claude、Cursor、Codex、および任意の MCP クライアント)は、OAuth または API キーで認証し、/api/mcp の Streamable HTTP を通じてモニター、インシデント、ステータスページを管理できます。
claude mcp add --transport http openuptime https://openuptime.app/api/mcp # or https://<your-host>/api/mcp
クライアントの設定、スコープ、ツール一覧については、MCP ドキュメントを参照してください。
よく使うワークフローを紹介するエージェントスキルは、skills/openuptime に含まれています。
npx skills add becoolme/openuptime。
ホストされているサーバーは、MCP Registry に app.openuptime/mcp として登録されています。そのエントリーは server.json です。
テスト、チェックの実行方法、MCP サーバー、アラートチャネルなどの詳細については、docs/reference.md を参照してください。
オープンソース版とホスト版
モニタリング自体は、どちらも同じコードです。openuptime.app のホスト型サービスでは、プラン、請求、およびそのビルドでのみ利用できるいくつかの機能が追加されています。このリポジトリとは 1 つのインターフェース(Edition。docs/editions.md を参照)を介して連携するため、コアの機能がロックされたり、制限されたりすることはありません。
| セルフホスト(このリポジトリ、MIT) | ホスト型(openuptime.app) | |
|---|---|---|
| モニター、インシデント、ステータスページ、アラートチャネル、API、MCP | すべて | すべて |
| 制限 | なし:プラン、クォータ、従量計測はありません | 無料プラン、有料プランは月額 $5 から(料金)。モニター、チェック、メール、履歴の長さはプランによって異なります |
| 運用 | ご自身で対応:Postgres、Worker またはコンテナ、メールプロバイダー、バックアップ、アップグレード | こちらで対応します。インストールは不要です |
SSL 証明書のモニタリング(有効期限アラート、ssl モニタータイプ) | 含まれません | Lite 以上 |
| ステータスページのカスタムドメイン | 含まれません | Team |
| データの保存場所 | ご自身のデータベース | 当社(マネージドホスティング上の Postgres) |
データとインフラストラクチャを自分で管理したい場合や、制限を気にせず使いたい場合はセルフホストを選んでください。何も運用したくない場合はホスト型を選んでください。どちらにも同じコアのアップデートが提供されます。
コントリビューションとセキュリティ
CONTRIBUTING.md を参照してください。脆弱性は公開 Issue ではなく、SECURITY.md の説明に従って非公開で報告してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。