
Scheduler
HTTP-SSESTDIOTask scheduler server for automated shell commands, API calls, AI tasks, and reminders.
Task scheduler server for automated shell commands, API calls, AI tasks, and reminders.
A robust task scheduler server built with Model Context Protocol (MCP) for scheduling and managing various types of automated tasks.
MCP Scheduler is a versatile task automation system that allows you to schedule and run different types of tasks:
The scheduler uses cron expressions for flexible timing and provides a complete history of task executions. It's built on the Model Context Protocol (MCP), making it easy to integrate with AI assistants and other MCP-compatible clients.
# For Mac/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # For Windows (PowerShell) powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
After installing uv, restart your terminal to ensure the command is available.
# Clone the repository git clone https://github.com/yourusername/mcp-scheduler.git cd mcp-scheduler # Create and activate a virtual environment with uv uv venv source .venv/bin/activate # On Unix/MacOS # or .venv\Scripts\activate # On Windows # Install dependencies with uv uv pip install -r requirements.txt
If you prefer using standard pip:
# Clone the repository git clone https://github.com/yourusername/mcp-scheduler.git cd mcp-scheduler # Create and activate a virtual environment python -m venv .venv source .venv/bin/activate # On Unix/MacOS # or .venv\Scripts\activate # On Windows # Install dependencies pip install -r requirements.txt
# Run with default settings (stdio transport) python main.py # Run with server transport on specific port python main.py --transport sse --port 8080 # Run with debug mode for detailed logging python main.py --debug
To use your MCP Scheduler with Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": [ { "type": "stdio", "name": "MCP Scheduler", "command": "python", "args": ["/path/to/your/mcp-scheduler/main.py"] } ] }
Alternatively, use the fastmcp
utility if you're using the FastMCP library:
# Install your server in Claude Desktop fastmcp install main.py --name "Task Scheduler"
--address Server address (default: localhost)
--port Server port (default: 8080)
--transport Transport mode (sse or stdio) (default: stdio)
--log-level Logging level (default: INFO)
--log-file Log file path (default: mcp_scheduler.log)
--db-path SQLite database path (default: scheduler.db)
--config Path to JSON configuration file
--ai-model AI model to use for AI tasks (default: gpt-4o)
--version Show version and exit
--debug Enable debug mode with full traceback
--fix-json Enable JSON fixing for malformed messages
You can use a JSON configuration file instead of command-line arguments:
{ "server": { "name": "mcp-scheduler", "version": "0.1.0", "address": "localhost", "port": 8080, "transport": "sse" }, "database": { "path": "scheduler.db" }, "logging": { "level": "INFO", "file": "mcp_scheduler.log" }, "scheduler": { "check_interval": 5, "execution_timeout": 300 }, "ai": { "model": "gpt-4o", "openai_api_key": "your-api-key" } }
The MCP Scheduler provides the following tools:
list_tasks
: Get all scheduled tasksget_task
: Get details of a specific taskadd_command_task
: Add a new shell command taskadd_api_task
: Add a new API call taskadd_ai_task
: Add a new AI taskadd_reminder_task
: Add a new reminder task with desktop notificationupdate_task
: Update an existing taskremove_task
: Delete a taskenable_task
: Enable a disabled taskdisable_task
: Disable an active taskrun_task_now
: Run a task immediatelyget_task_executions
: Get execution history for a taskget_server_info
: Get server informationMCP Scheduler uses standard cron expressions for scheduling. Here are some examples:
0 0 * * *
- Daily at midnight0 */2 * * *
- Every 2 hours0 9-17 * * 1-5
- Every hour from 9 AM to 5 PM, Monday to Friday0 0 1 * *
- At midnight on the first day of each month0 0 * * 0
- At midnight every SundayThe scheduler can be configured using environment variables:
MCP_SCHEDULER_NAME
: Server name (default: mcp-scheduler)MCP_SCHEDULER_VERSION
: Server version (default: 0.1.0)MCP_SCHEDULER_ADDRESS
: Server address (default: localhost)MCP_SCHEDULER_PORT
: Server port (default: 8080)MCP_SCHEDULER_TRANSPORT
: Transport mode (default: stdio)MCP_SCHEDULER_LOG_LEVEL
: Logging level (default: INFO)MCP_SCHEDULER_LOG_FILE
: Log file pathMCP_SCHEDULER_DB_PATH
: Database path (default: scheduler.db)MCP_SCHEDULER_CHECK_INTERVAL
: How often to check for tasks (default: 5 seconds)MCP_SCHEDULER_EXECUTION_TIMEOUT
: Task execution timeout (default: 300 seconds)MCP_SCHEDULER_AI_MODEL
: OpenAI model for AI tasks (default: gpt-4o)OPENAI_API_KEY
: API key for OpenAI tasksawait scheduler.add_command_task( name="Backup Database", schedule="0 0 * * *", # Midnight every day command="pg_dump -U postgres mydb > /backups/mydb_$(date +%Y%m%d).sql", description="Daily database backup", do_only_once=False # Recurring task )
await scheduler.add_api_task( name="Fetch Weather Data", schedule="0 */6 * * *", # Every 6 hours api_url="https://api.weather.gov/stations/KJFK/observations/latest", api_method="GET", description="Get latest weather observations", do_only_once=False )
await scheduler.add_ai_task( name="Generate Weekly Report", schedule="0 9 * * 1", # 9 AM every Monday prompt="Generate a summary of the previous week's sales data.", description="Weekly sales report generation", do_only_once=False )
await scheduler.add_reminder_task( name="Team Meeting", schedule="30 9 * * 2,4", # 9:30 AM every Tuesday and Thursday message="Don't forget the team standup meeting!", title="Meeting Reminder", do_only_once=False )
When running in SSE (HTTP) mode, MCP Scheduler exposes a well-known endpoint for tool/schema auto-discovery:
/.well-known/mcp-schema.json
(on the HTTP port + 1, e.g., if your server runs on 8080, the schema is on 8081)If you run:
python main.py --transport sse --port 8080
You can access the schema at:
http://localhost:8081/.well-known/mcp-schema.json
{ "tools": [ { "name": "list_tasks", "description": "List all scheduled tasks.", "endpoint": "list_tasks", "method": "POST", "parameters": { "type": "object", "properties": {}, "required": [], "additionalProperties": false } }, { "name": "add_command_task", "description": "Add a new shell command task.", "endpoint": "add_command_task", "method": "POST", "parameters": { "type": "object", "properties": { "name": {"type": "string"}, "schedule": {"type": "string"}, "command": {"type": "string"}, "description": {"type": "string"}, "enabled": {"type": "boolean"}, "do_only_once": {"type": "boolean"} }, "required": ["name", "schedule", "command"], "additionalProperties": false } } // ... more tools ... ] }
This schema is generated automatically from the registered MCP tools and always reflects the current server capabilities.
If you want to contribute or develop the MCP Scheduler further, here are some additional commands:
# Install the MCP SDK for development uv pip install "mcp[cli]>=1.4.0" # Or for FastMCP (alternative implementation) uv pip install fastmcp # Testing your MCP server # With the MCP Inspector tool mcp inspect --stdio -- python main.py # Or with a simple MCP client python -m mcp.client.stdio python main.py
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.