Skip to main content
Glama
jasona7

mcp-crontab-server

by jasona7
README.md
# MCP Crontab Server

An MCP server for exploring, explaining, and managing crontab entries. Works with Claude Desktop, Claude Code, and any MCP client.

**Standout features:** Explain cron expressions in plain English and calculate upcoming execution times — no more guessing what `*/15 9-17 * * 1-5` means.

## Quick Start

### Claude Desktop

Add to your Claude Desktop config (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "crontab": {
      "command": "uvx",
      "args": ["mcp-crontab-server"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add crontab -- uvx mcp-crontab-server
```

### Install from source

```bash
git clone https://github.com/jalloway/mcp-crontab-server.git
cd mcp-crontab-server
pip install -e .
mcp-crontab-server
```

## Tools

| Tool | Description |
|---|---|
| `list_crontab` | List all crontab entries for the current user |
| `search_crontab` | Search entries by keyword (case-insensitive) |
| `get_cron_logs` | Recent cron execution logs (journalctl / syslog) |
| `explain_cron_expression` | Explain a cron expression in plain English |
| `next_runs` | Calculate the next N execution times |
| `validate_cron_expression` | Check if an expression is syntactically valid |
| `add_cron_entry` | Add a new entry to the user's crontab |
| `remove_cron_entry` | Remove entries matching a pattern |

## Example Conversations

**"What does this cron expression mean?"**

> `explain_cron_expression("*/15 9-17 * * 1-5")`
>
> Every 15 minutes, from 9:00 AM through 5:59 PM, Monday through Friday

**"When will this job run next?"**

> `next_runs("0 2 * * 0", count=3)`
>
> Next 3 runs for '0 2 * * 0':
>   1. 2026-03-01 02:00:00 Sunday
>   2. 2026-03-08 02:00:00 Sunday
>   3. 2026-03-15 02:00:00 Sunday

**"Is this valid?"**

> `validate_cron_expression("60 * * * *")`
>
> Invalid: Value 60 out of range (0-59) in minute field

## Development

```bash
pip install -e .

# Run with MCP inspector
fastmcp dev src/mcp_crontab_server/server.py

# Run directly (stdio transport, default)
mcp-crontab-server

# Run with SSE transport
mcp-crontab-server --transport sse
```

## Requirements

- Python 3.10+
- Linux/macOS (uses `crontab` command)
- `fastmcp>=2.0.0`, `croniter>=1.0.0`

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: list/search target entries, add/remove modify entries, get_cron_logs retrieves logs, and the three expression tools (explain, validate, next_runs) each return different outputs. There is no overlap that would confuse an agent.

Naming Consistency4/5

Most tools follow a verb_noun pattern (list_crontab, search_crontab, add_cron_entry, etc.) with consistent snake_case. The exception is 'next_runs', which is a noun phrase rather than verb-first, and 'get_cron_logs' uses 'get' while others use different verbs, but the overall pattern is still readable.

Tool Count5/5

8 tools is well-scoped for a crontab manager: entry operations (list/search/add/remove), log retrieval, and cron expression utilities (explain/validate/next_runs). Each tool serves a distinct need, and the count is appropriate.

Completeness4/5

The surface covers the core workflows: viewing (list/search), modifying (add/remove), checking execution (logs), and handling expressions (explain/validate/next_runs). An update/edit tool is missing, which would be a minor gap, but re-adding after removal is a workaround.

Maintenance

ActivityInactive
ResponsivenessNo issues