모니터링 중인 cron job의 예약된 작업 목록 조회, 실패 로그 읽기, 상태 확인 실행 및 알림 무시 기능을 AI agent에게 제공합니다.
다른 이름 cronwatchdev/cronwatch, @cronwatch/sdk
- 스타
- 26
- Tools
- —
- 다운로드, 30일
- 1,127
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 14일
- 라이선스
- MIT
CronWatch MCP란?
CronWatch은(는) MCP server입니다. 모니터링 중인 cron job의 예약된 작업 목록 조회, 실패 로그 읽기, 상태 확인 실행 및 알림 무시 기능을 AI agent에게 제공합니다.
프로젝트 README에서 생성된 요약
CronWatch MCP server 정보
cronwatch를 사용하면 AI agent 내부에서 예약된 작업을 모니터링하고 실패 원인을 조사할 수 있습니다. 이 MCP server를 통해 Claude Code 및 Cursor와 같은 도구가 애플리케이션의 예약 작업과 직접 상호작용할 수 있습니다. agent는 활성 작업 목록 조회, 실패한 실행의 로그 읽기, 상태 확인 실행, 활성 알림 무시 기능을 사용할 수 있습니다.
개발자는 TypeScript, Python, Ruby, Go, Rust, PHP, Elixir, Java 또는 .NET과 같은 언어로 작성된 기존 애플리케이션에 cronwatch SDK를 추가하여 이를 통합할 수 있습니다. 이 시스템은 별도의 서버나 외부 계정 없이 SQLite, Postgres 또는 MySQL과 같은 기존 데이터베이스를 사용하여 작업 실행 기록을 저장합니다. 코드베이스에 SDK를 구현하면 MCP server가 AI 클라이언트를 내부 작업 데이터에 연결하여 누락되거나 느려지거나 실패한 작업에 대한 자동 분류 및 디버깅을 지원합니다.
활용 사례
- 1활성 작업 일정 감사애플리케이션 내에서 현재 모니터링 중인 모든 cron job의 전체 목록을 요청합니다.
- 2알림 통지 관리유지보수 시간 동안 특정 작업에 대한 알림을 무시하도록 AI assistant에게 지시합니다.
- 3시스템 상태 확인 수행agent가 상태 확인을 트리거하여 cron 모니터링 시스템이 올바르게 작동하는지 확인합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
CronWatch MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 CronWatch MCP 설치
$ claude mcp add cronwatch -- npx -y @cronwatch/sdkCursor에 CronWatch MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"cronwatch": {
"command": "npx",
"args": [
"-y",
"@cronwatch/sdk"
]
}
}
}VS Code에 CronWatch MCP 설치
.vscode/mcp.json
{
"servers": {
"cronwatch": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cronwatch/sdk"
]
}
}
}VS Code CLI에 CronWatch MCP 설치
$ code --add-mcp '{"name":"cronwatch","type":"stdio","command":"npx","args":["-y","@cronwatch/sdk"]}'Claude Desktop에 CronWatch MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"cronwatch": {
"command": "npx",
"args": [
"-y",
"@cronwatch/sdk"
]
}
}
}Codex에 CronWatch MCP 설치
$ codex mcp add cronwatch -- npx -y @cronwatch/sdkCodex config.toml에 CronWatch MCP 설치
~/.codex/config.toml
[mcp_servers.cronwatch] command = "npx" args = ["-y", "@cronwatch/sdk"]
Gemini CLI에 CronWatch MCP 설치
$ gemini mcp add -s user cronwatch npx -- -y @cronwatch/sdkGemini settings.json에 CronWatch MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"cronwatch": {
"command": "npx",
"args": [
"-y",
"@cronwatch/sdk"
]
}
}
}자동 검사
2026년 11월 13일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능통과
- 오픈 소스 라이선스 (OSI)통과
- 최근 1년 내 커밋 또는 릴리스통과
- 패키지 이름이 인기 패키지와 유사하지 않음통과
- 원격 엔드포인트가 HTTPS 사용검사되지 않음
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 모델에 대한 숨겨진 지침 없음통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
README
GitHub에서 보기CronWatch
Cron and scheduled-job monitoring that lives inside your app. Wrap a job once; CronWatch records every run in a database you already have and tells you when a run is missed, fails, gets stuck, runs slow, goes over budget, or quietly does nothing. No server to run, no account to make. MIT.
Site and docs: cronwatch.dev
// lib/cronwatch.ts
import { cronwatch } from "@cronwatch/sdk";
import { sqlite } from "@cronwatch/sdk/sqlite";
import { slack } from "@cronwatch/sdk/slack";
export const cw = cronwatch({
store: sqlite({ path: "./data/cronwatch.db" }),
alerts: [slack({ webhookUrl: process.env.SLACK_WEBHOOK_URL! })],
});
export const nightlyReport = cw.job("nightly-report", {
schedule: "0 2 * * *", timezone: "UTC", grace: "15m", expect: "Report written",
});
// app/api/cron/nightly-report/route.ts: checks Authorization: Bearer CRON_SECRET
import { nightlyReport } from "@/lib/cronwatch";
export const GET = nightlyReport.handler(async (job) => {
const report = await buildReport();
job.log("Report written:", report.path);
job.metric("cost", report.usdCost);
});
// app/cronwatch/[[...path]]/route.ts: a dashboard and JSON API behind CRONWATCH_TOKEN
import { cw } from "@/lib/cronwatch";
export const { GET, POST, DELETE } = cw.routes();
Packages
| Package | What |
|---|---|
@cronwatch/sdk |
the library for Node, Cloudflare Workers, Deno, and Bun: jobs, runs, checks, stores (memory, SQLite, Postgres, D1), pg_cron jobs read from Postgres, alerts (Slack, Discord, webhook, email, SMS, error trackers), dashboard and API, adapters for Node servers, optional Claude triage |
cronwatch gem |
the Ruby port for Ruby and Rails apps: ActiveRecord store, ActiveJob and Sidekiq integration, schedules read from Solid Queue or sidekiq-cron, pg_cron jobs, the same alert channels, a check job, the dashboard as a Rack app. Same rules, alerts, and stored rows as the SDK |
cronwatch-sdk for Python |
the Python port for Python apps: the memory, SQLite, and Postgres stores, the same alert channels and Claude triage, pg_cron jobs, the dashboard as a WSGI and ASGI app, Django, Celery and beat, APScheduler, async jobs, and handler() for platform crons and AWS Lambda |
cronwatch/cronwatch for PHP |
the PHP port for PHP apps: the memory, SQLite, MySQL (and MariaDB), and Postgres stores, sharing tables with the SDK byte for byte, the same alert channels and Claude triage, pg_cron jobs, vendor/bin/cronwatch check, the dashboard (a bare script or PSR-15), handler() for platform crons, Laravel and Symfony integrations, a WordPress plugin, a Drupal module (drupal/cronwatch), and a Craft CMS plugin (cronwatch/craft) (its DESIGN.md) |
cronwatch.dev/go |
the Go port for Go apps: jobs, runs, and checks with context throughout and safe across goroutines, the memory store and a database/sql store for SQLite, Postgres, MySQL, and MariaDB over the app's own driver, sharing tables with the SDK byte for byte, the same alert channels and Claude triage, pg_cron jobs, the dashboard and job.Handler as http.Handlers, an AWS Lambda adapter, and modules of their own for robfig/cron, gocron, River, and Asynq (its DESIGN.md) |
cronwatch crate |
the Rust port for Rust services, on tokio: jobs, runs, and checks, safe across tasks, the memory store and cronwatch-sqlx for SQLite, Postgres, MySQL, and MariaDB over the app's own sqlx pool, sharing tables with the SDK byte for byte, the same alert channels and Claude triage, pg_cron jobs, the dashboard and handler() framework-free with tower and axum adapters (and so AWS Lambda through lambda_http), a blocking client, and crates of their own for tokio-cron-scheduler and apalis (its DESIGN.md) |
cronwatch on Hex |
the Elixir port for Elixir and Erlang services: an instance in the app's supervision tree, jobs run in the calling process and recorded when it dies, the memory store and an Ecto store for SQLite, Postgres, MySQL, and MariaDB over the app's own repo, sharing tables with the SDK byte for byte, the same alert channels and Claude triage over OTP's own sockets, pg_cron jobs, the dashboard and a job's handler as Plugs for a Phoenix router, telemetry events, a release's crontab check, and integrations for Oban and Quantum (its DESIGN.md) |
dev.cronwatch:cronwatch for Java |
the Java port for services on the JVM: jobs run in the calling thread and safe across platform and virtual threads, the current run carried across threads, a shutdown hook that records runs a stopping JVM leaves open, the memory store and a JDBC store for SQLite, Postgres, MySQL, and MariaDB over the app's own DataSource, sharing tables with the SDK byte for byte, the same alert channels and Claude triage over the JDK's own HTTP client, pg_cron jobs, the dashboard and a job's handler framework-free with adapters for the JDK's server, servlet containers (cronwatch-servlet), and Spring MVC and WebFlux, CronwatchCli for a crontab's check, a Spring Boot starter that watches every @Scheduled method (ShedLock included), and modules of their own for Quartz and JobRunr (its DESIGN.md) |
Cronwatch on NuGet |
the .NET port for .NET services: jobs run in the caller's flow and safe across threads and tasks, the current run carried across awaits, a process-exit hook that records runs a stopping process leaves open, the memory store and an ADO.NET store for SQLite, Postgres, MySQL, and MariaDB over the app's own DbDataSource, sharing tables with the SDK byte for byte, the same alert channels and Claude triage over HttpClient, pg_cron jobs, the dashboard and a job's handler framework-free with an ASP.NET Core adapter (Cronwatch.AspNetCore), the client in the Generic Host with hosted jobs on a cron (Cronwatch.Hosting), CronwatchCli for a crontab's check, Native AOT support, and packages of their own for Hangfire and Quartz.NET (its DESIGN.md) |
@cronwatch/mcp |
an MCP server so Claude Code, Cursor, and other agents can list jobs, read failures, run a check, and silence alerts |
skills/cronwatch |
an agent skill for Claude Code, Codex, Cursor, and others: how to add monitoring to a job and how to investigate a failure. npx skills add cronwatchdev/cronwatch installs it (on skills.sh) |
Installing
| Language | Install | Docs |
|---|---|---|
| TypeScript and Node | npm install @cronwatch/sdk, and the driver for a store (below) |
Getting started |
| Ruby and Rails | bundle add cronwatch, then bin/rails generate cronwatch:install and bin/rails db:migrate in a Rails app (Ruby 3.2 or newer; Rails 7.2, 8.0, and 8.1) |
Rails, Ruby, its README |
| Python | pip install cronwatch-sdk |
Python, its README |
| PHP | composer require cronwatch/cronwatch |
PHP, its README |
| WordPress | CronWatch in the plugin directory: search for it under Plugins, Add New Plugin, or wp plugin install cronwatch --activate |
WordPress |
| Drupal | composer require drupal/cronwatch, then drush pm:install cronwatch |
Drupal, drupal.org |
| Craft CMS | composer require cronwatch/craft, then php craft plugin/install cronwatch, or from the Plugin Store |
Craft CMS |
| Go | go get cronwatch.dev/go, and go get cronwatch.dev/go/robfigcron (or /gocron, /river, /asynq) for a scheduler |
Go, Go schedulers, its README |
| Rust | cargo add cronwatch --features alerts, cargo add cronwatch-sqlx --features postgres (or sqlite, mysql), cargo add sqlx --no-default-features --features runtime-tokio,postgres, and cargo add tokio --features macros,rt-multi-thread; cronwatch-tokio-cron-scheduler or cronwatch-apalis for a scheduler |
Rust, Rust schedulers, its README |
| Elixir | {:cronwatch, "~> 0.14"} in mix.exs, with the app's Ecto adapter for the SQL store; Oban and Quantum are watched with no other package |
Elixir, Elixir schedulers, its README |
| Java | dev.cronwatch:cronwatch (Java 21 or newer), or dev.cronwatch:cronwatch-spring-boot-starter in a Spring Boot app; cronwatch-servlet, cronwatch-quartz, and cronwatch-jobrunr beside it at the same version, with the app's JDBC driver for the SQL store |
Java, Java schedulers, its README |
| .NET | dotnet add package Cronwatch (.NET 10 or newer), Cronwatch.Hosting in a Generic Host app or Cronwatch.AspNetCore in an ASP.NET Core app; Cronwatch.Hangfire and Cronwatch.Quartz beside it at the same version, with the app's ADO.NET driver for the SQL store |
.NET, .NET schedulers, its README |
The SDK depends only on croner. The core, the D1 store, the pg_cron source, and every alert channel use only fetch and Web Crypto, so they run on Node 22 or newer, Cloudflare Workers, Deno, and Bun; the SQLite and Postgres stores and @cronwatch/sdk/node need Node. Each driver is an optional peer, installed only when you use its entry point:
| Entry point | Install |
|---|---|
@cronwatch/sdk/sqlite |
better-sqlite3 (and @types/better-sqlite3 for TypeScript) |
@cronwatch/sdk/postgres |
pg (and @types/pg for TypeScript) |
@cronwatch/sdk/anthropic |
@anthropic-ai/sdk 0.115 up to (not including) 0.129 |
@cronwatch/sdk/pg-cron |
nothing: it queries through the pg Pool (or anything with query()) you pass it |
@cronwatch/sdk/d1, /node, and the channels (/slack, /discord, /webhook, /resend, /postmark, /sendgrid, /mailgun, /ses, /twilio, /sentry, /honeybadger, /datadog, /rollbar, /bugsnag, /newrelic) |
nothing |
The store entry points' type declarations refer to the driver's types, so a TypeScript project using them without @types/better-sqlite3 or @types/pg fails with TS7016 unless skipLibCheck is on. The package ships ESM and CommonJS, each with its own types.
One library, nine languages
Every language's package follows the same design: each writes the same tables and sends the same alerts, so a Rails app, a Go service, and a Node worker can share one database and one dashboard. All of them are tested against the same recorded cases, so a job behaves the same whichever language runs it. Each package's README and its page on cronwatch.dev have the examples for its language and its schedulers.
Stability
From 1.0 every package follows semantic versioning, one version for all of them. Stability says what a 1.x release promises (the documented API, the stored data, the JSON API, the webhook, settings and environment variable names, documented behaviour) and what it does not; Environment variables lists every variable each library reads; Deprecations lists every deprecated name with its replacement. What changed in each release is in CHANGELOG.md.
Why a library and not a service
A hosted monitor gives you an observer that is alive when your job is not. That is real, and it is the one thing a library cannot do: if your whole app is down, nothing inside it can alert (pair it with any uptime monitor for that case). Everything else, from a job that never fires to one that costs three times what it should, is caught from within, with your run history in your own database and nothing to sign up for.
Contributing
Bugs, ideas, and questions are welcome in the issue tracker. CONTRIBUTING.md covers working on CronWatch itself: each language's tests, releases, and the site.
License
MIT, see LICENSE.
CronWatch MCP 질문
CronWatch MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add cronwatch -- npx -y @cronwatch/sdk를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
CronWatch MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
CronWatch MCP server로 AI agent가 무엇을 할 수 있나요?
AI agent는 작업 목록 조회, 실패 로그 읽기, 상태 확인 실행, 알림 무시 작업을 수행할 수 있습니다.
서로 다른 프로그래밍 언어 간에 CronWatch 데이터를 공유할 수 있나요?
네, 서로 다른 언어의 패키지가 동일한 테이블에 기록하므로 Rails 앱과 Go 서비스가 하나의 데이터베이스와 대시보드를 공유할 수 있습니다.