@crontinel/mcp-server
OfficialThis server connects MCP clients to Crontinel monitoring data and alert management.
Read scoped/OAuth data: connection health, monitors, runs, and incidents (per README).
List all monitored cron commands with last run status and timing.
Get last run status, exit code, and duration for a specific cron command.
Check queue depth, failed jobs, and oldest job age for all or one queue.
Inspect Laravel Horizon health, supervisor states, paused status, and failed jobs per minute.
List recent alerts fired within a chosen hour window.
Acknowledge/dismiss an active alert by alert key.
Create Slack, email, or webhook alert channels.
Allows querying the status of Laravel cron jobs and queues via Crontinel monitoring.
Allows retrieving health snapshots of Laravel Horizon supervisors, including status and failed jobs per minute.
Allows creating Slack alert channels for Crontinel notifications.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@crontinel/mcp-server what's the queue depth for app my-app?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@crontinel/mcp-server
Connect assistants to Crontinel's monitoring evidence. This package runs as a local stdio adapter. Version 0.3 adds generated MCP keys and fetches the permitted tool list from the hosted server.
Recommended: remote OAuth
Use https://app.crontinel.com/mcp with a remote MCP client. Sign in to Crontinel, select one organization and its apps, then approve read permissions. No key needs to be copied. OAuth runs over HTTP, not stdio.
The initial read tools are get_connection, list_monitors, list_runs, and list_incidents. Lists require app_id and accept after_id and limit (maximum 100). They return timestamps and bounded metadata. They don't return job output, command arguments, credentials, or mutation tools.
The September 2026 local acceptance run exercised Codex 0.154.0 OAuth/CIMD plus connection and run reads; Claude Code 2.1.281 OAuth with pre-registration and connection health; and Cursor CLI 2026.08.25-3e8eec8 OAuth with pre-registration and tool discovery. These are local acceptance results, not a claim that every hosted or desktop configuration has been tested.
Related MCP server: Lanten MCP Server
Generated-key stdio connection
Create a key in Settings → AI connections → Use an API key at AI connections. Choose organization, apps, read scopes and expiry. Save the secret when shown; it cannot be retrieved later.
Pass it to the adapter through CRONTINEL_MCP_KEY in your client's environment or secret store. Start crontinel-mcp from the installed package. For development, build this checkout and start node dist/index.js.
CRONTINEL_MCP_KEY: generatedct_mcp_...key. Takes precedence over the legacy variable.CRONTINEL_API_URL: optional base URL, defaulthttps://app.crontinel.com. Scoped connections require HTTPS except for local loopback tests.The adapter initializes the remote server and forwards its scope-filtered tools. Invalid or revoked scoped keys fail; they never fall back to legacy authentication.
Rotation and revocation are available in AI connections. Existing running clients must receive the replacement environment value and restart after rotation.
Version 0.3 must be published before using it through npx @crontinel/mcp-server@0.3.0. The packaged-artifact acceptance harness is in the workspace at scripts/test-mcp-adapter.py.
Requirements
Node.js 18+
A Crontinel account and a generated MCP key from AI connections.
Installation
npx -y @crontinel/mcp-serverOr install globally:
npm install -g @crontinel/mcp-serverLegacy app-key configuration
The examples below retain the older CRONTINEL_API_KEY path for existing installations. Those app keys use /api/mcp and the older tool names. They are not scoped MCP keys. Switching to a generated key changes the advertised tools; migrate prompts to the read-tool names above. A ct_mcp_ key supplied through the old variable is also recognized as scoped.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"crontinel": {
"command": "npx",
"args": ["-y", "@crontinel/mcp-server"],
"env": {
"CRONTINEL_API_KEY": "your-api-key-here"
}
}
}
}Claude Code
Use claude mcp add for current Claude Code configuration. The JSON below describes the legacy stdio process and environment; it isn't a settings.json file:
{
"mcpServers": {
"crontinel": {
"command": "npx",
"args": ["-y", "@crontinel/mcp-server"],
"env": {
"CRONTINEL_API_KEY": "your-api-key-here"
}
}
}
}Cursor
Add to ~/.cursor/mcp.json or the project-level .cursor/mcp.json:
{
"mcpServers": {
"crontinel": {
"command": "npx",
"args": ["-y", "@crontinel/mcp-server"],
"env": {
"CRONTINEL_API_KEY": "your-api-key-here"
}
}
}
}Windsurf
Add to ~/.windsurf/settings.json:
{
"mcpServers": {
"crontinel": {
"command": "npx",
"args": ["-y", "@crontinel/mcp-server"],
"env": {
"CRONTINEL_API_KEY": "your-api-key-here"
}
}
}
}Continue.dev
Add to ~/.continue/config.json:
{
"experimental": {
"mcpServers": {
"crontinel": {
"command": "npx",
"args": ["-y", "@crontinel/mcp-server"],
"env": {
"CRONTINEL_API_KEY": "your-api-key-here"
}
}
}
}
}Environment Variables
Variable | Required | Default | Description |
| Yes | n/a | Your Crontinel API key |
| No |
| Override the API base URL (self-hosted or local dev) |
Legacy app-key tools
Tool | Description |
| List all monitored cron commands with last run status |
| Last run details for a specific command (exit code, duration, output) |
| Depth, failed count, and wait time for queues |
| Horizon supervisor health snapshot (status, failed/min) |
| Alerts fired in the last N hours |
| Dismiss an active alert by its key |
| Create a new alert channel (Slack, email, or webhook) |
list_scheduled_jobs
List all monitored cron jobs, with their last run status and timing.
Returns: Array of job objects with command, last_run_at, last_status, run_count_today.
get_cron_status
Get the last run result for a specific cron command.
Parameters:
Name | Type | Required | Description |
| string | Yes | The cron command string or partial match (e.g. |
Returns: command, status, exit_code, duration_ms, started_at, finished_at, output.
get_queue_status
Get queue depth, failed count, and oldest pending job age.
Parameters:
Name | Type | Required | Description |
| string | No | Specific queue name; omit for all queues |
Returns: Array of queue objects with name, depth, failed, oldest_job_age_seconds.
get_horizon_status
Get a health snapshot of Laravel Horizon: supervisor states, paused/running, failed jobs per minute.
Returns: status (running / paused / inactive), failed_jobs_per_minute, supervisors array.
list_recent_alerts
List alerts that have fired within the last N hours.
Parameters:
Name | Type | Required | Description |
| number | No | Look-back window in hours (default: 24) |
Returns: Array of alert objects with alert_key, state (firing / resolved), fired_at, resolved_at.
acknowledge_alert
Dismiss an active alert so it stops notifying.
Parameters:
Name | Type | Required | Description |
| string | Yes | Alert key (from |
Returns: { acknowledged: true, alert_key: "..." } on success.
create_alert
Create a new alert channel for an app. Requires a Starter, Pro, or Ultra plan.
Parameters:
Name | Type | Required | Description |
| string | Yes |
|
| string | No | Slack incoming webhook URL (required for |
| string | No | Recipient email address (required for |
| string | No | Webhook endpoint URL (required for |
Returns: { created: true, channel_id: "...", type: "..." } on success.
How It Works
Your AI assistant spawns the MCP server as a local stdio process
The server receives JSON-RPC tool calls over stdin
Scoped keys connect to
app.crontinel.com/mcp; legacy app keys useapp.crontinel.com/api/mcp. Both use theAuthorizationheader.The JSON-RPC response is returned over stdout
Scoped tool definitions come from the authenticated remote server. Legacy tool definitions remain declared locally for compatibility.
Troubleshooting
401 Unauthorized: Check key expiry, revocation and current organization membership. Ensure the client actually passes the configured environment to its subprocess. Environment inheritance depends on the client.
Resource denied: The selected app_id must belong to the fixed organization and app selection in the grant. A dashboard organization switch doesn't change the grant.
Tools not showing up in Claude/Cursor: Restart the AI client after updating the MCP config. Most clients only load MCP servers at startup.
npx slow on first run: npx -y downloads the package on first use. Run npm install -g @crontinel/mcp-server once to cache it locally, then change command to crontinel-mcp and remove the args.
Documentation
For the full integration guide, tool reference, and setup walkthroughs:
Ecosystem
Package | Description |
MCP server for AI assistants (this repo) | |
Laravel package that reports the data this server reads | |
Full documentation |
License
Available Tools
7 toolsacknowledge_alertA
Dismiss an active alert by its alert key
Inputs: alert_key (required).
create_alertB
Create a new alert channel (slack, email, or webhook) for the app
Inputs: type (required), to, url, webhook_url.
get_cron_statusA
Get the last run status, exit code, and duration for a specific cron command
Inputs: command (required).
get_horizon_statusA
Get a snapshot of Laravel Horizon health: supervisor states, paused status, failed jobs per minute
Inputs: no named parameters.
get_queue_statusA
Get queue depth, failed job count, and oldest job age for all queues or a specific queue
Inputs: queue.
list_recent_alertsA
List alerts that have fired in the last N hours
Inputs: hours.
list_scheduled_jobsA
List all monitored cron commands with their last run status and timing
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: listing vs. getting cron status, queue vs. Horizon status, and alert listing/acknowledgment/creation. Descriptions clearly differentiate overlapping monitoring concepts.
All tool names follow a consistent verb_noun pattern: list_, get_, acknowledge_, create_. No mixed conventions, making the set predictable and easy to navigate.
Seven tools is well-scoped for a monitoring server, covering the core areas (cron, queues, Horizon, alerts) without unnecessary redundancy.
The set covers monitoring and alert management comprehensively, but lacks an update/delete for alert channels and a detail view for individual alerts. Minor gaps that agents can work around.
Related MCP Connectors
Query your app's logs, metrics and incidents from your AI assistant.
Connect AI assistants to Xitoring monitoring: servers, uptime, incidents, metrics, SSL, and alerts.
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Manage scheduled requests, uptime monitors and heartbeats from your AI assistant.
Related MCP Servers
AlicenseBqualityFmaintenanceConnects AI assistants (Claude, Cursor, etc.) directly to the HiveFlow automation platform, allowing them to create, manage, and execute automation flows through natural language commands.96 npm4MIT- FlicenseAqualityDmaintenanceConnects AI assistants to the Lanten property management API, allowing them to manage tenants, units, and work orders using natural language.1511 npm-
- AlicenseNot gradedqualityDmaintenanceEnables secure execution of Laravel Artisan commands through AI assistants, allowing controlled management of Laravel projects via natural language.6MIT
- FlicenseNot gradedqualityDmaintenanceConnects AI assistants to live VuNet observability data, allowing querying metrics, browsing data models, and checking connection status.-