TaskPad
Allows exposing the MCP server and REST API securely via Cloudflare tunnel for remote access from claude.ai or other services.
Allows Home Assistant to interact with tasks via the REST API.
Allows n8n to create tasks via inbound webhook and receive task events via outbound webhook for workflow automation.
Click on "Install 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., "@TaskPadshow my pending tasks"
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.
TaskPad
A Windows system-tray task manager and reminder engine with deep AI and automation integration.
System tray icon — colour-coded badge (blue / green / amber / red) with a task count
Floating overlay — always-on-top compact task list; drag it anywhere on screen
Reminder engine — fires desktop alerts and system sounds at the scheduled time
MCP server — Claude Code, Claude Desktop, and claude.ai can all read and write your tasks
REST API — JSON API on
localhost:8765for n8n, Home Assistant, or any HTTP clientOutbound webhooks — push
task.created,task.completed,reminder.fired, etc. to any URL
Table of contents
Related MCP server: Procrastinator MCP Server
Requirements
Requirement | Version |
Windows | 10 / 11 (64-bit) |
Python | 3.10 or later |
Pip packages | see |
TaskPad stores its data in %APPDATA%\TaskPad\ (i.e. C:\Users\<you>\AppData\Roaming\TaskPad\).
Installation
Run the installer — TaskPad-Setup-1.0.0.exe — and follow the wizard.
The wizard will:
Copy all source files to
C:\Program Files\TaskPad\(or your chosen path).Optionally add a desktop shortcut and a Windows autostart entry.
Run
pip install -r requirements.txtwith the detected Python interpreter.Ask for an optional Cloudflare tunnel URL (for Claude AI) and n8n webhook URL — you can skip these and configure them later from the tray menu.
After the installer completes, tick "Launch TaskPad now" on the final page or start it from the Start menu / desktop shortcut.
Note: If Python was not detected, install it from python.org/downloads, then open a terminal in the install folder and run:
pip install -r requirements.txt
Running from source
# Clone / copy the source, then:
pip install -r requirements.txt
python main.pyMCP stdio mode (for Claude Code / Claude Desktop):
python main.py --mcpTray icon guide
The tray icon colour tells you your task state at a glance:
Colour | Meaning |
Blue | No pending tasks |
Green | Tasks exist, none due / reminded today |
Amber | At least one reminder is scheduled for today |
Red | Urgent task or a reminder is due within the hour |
A number badge in the top-right corner shows the count of incomplete tasks (up to 99).
Right-click menu:
Menu item | Action |
Open TaskPad | Show/hide the floating overlay |
Add Task… | Quick-add dialog |
Start on Boot / Stop at Boot | Toggle Windows autostart |
Sound Settings… | Choose system sound or custom WAV |
MCP Settings… | Set your static Cloudflare tunnel URL |
Integration Settings… | View API key, API URL, set n8n webhook |
MCP URL | Shows the active public MCP URL |
Copy MCP URL | Copies it to clipboard |
Quit | Exit the tray app |
Cloudflare tunnel setup
TaskPad exposes the MCP server on port 8766 (HTTP/SSE). To make it reachable from claude.ai or n8n on another machine you need to expose that port via a Cloudflare tunnel.
Option A — Permanent named tunnel (recommended)
This gives you a stable URL that survives restarts.
Create the tunnel in the Cloudflare dashboard:
Cloudflare Zero Trust → Access → Tunnels → Create a tunnel
Name it (e.g.
taskpad).Under Public hostname, add a subdomain pointing to
http://localhost:8766e.g.taskpad.yourdomain.comInstall / authenticate
cloudflaredon this machine (the dashboard shows the command).
Tell TaskPad the stable URL:
Right-click tray icon → MCP Settings…
Enter
https://taskpad.yourdomain.comand save.TaskPad will use this URL immediately (no cloudflared management needed — you run
cloudflaredseparately as a service).
Expose the REST API too (for n8n on another server):
Add a second public hostname in the same tunnel:
taskpad-api.yourdomain.com→http://localhost:8765Use this URL as the base URL in n8n.
Option B — Quick ephemeral tunnel (development / testing)
If cloudflared is on your PATH or in %APPDATA%\TaskPad\cloudflared.exe, TaskPad will start a quick tunnel automatically on launch and show a tray notification with the URL. The URL changes every restart.
TaskPad will download cloudflared.exe automatically from GitHub if it is not found.
Claude Desktop setup
Open Claude Desktop → Settings → Developer → Edit Config (
claude_desktop_config.json).Add under
"mcpServers":
{
"mcpServers": {
"taskpad": {
"command": "python",
"args": ["C:\\Program Files\\TaskPad\\main.py", "--mcp"]
}
}
}Restart Claude Desktop. TaskPad should appear in the tool list.
Use
pythonwinstead ofpythonif you want to suppress the console window.
Claude Code setup
Run once in a terminal:
claude mcp add taskpad -s user -- python "C:\Program Files\TaskPad\main.py" --mcpVerify it is registered:
claude mcp listClaude Code will now have access to all TaskPad tools in every project.
claude.ai browser setup
claude.ai connects over HTTP/SSE (not stdio), so it needs the tunnel URL.
Complete the Cloudflare tunnel setup to get a stable public URL.
In claude.ai → Settings → Integrations → Add MCP server:
URL:
https://taskpad.yourdomain.com/sse
Save. The TaskPad tools will appear in your claude.ai conversations.
n8n integration
TaskPad acts as both an inbound HTTP server (n8n calls it) and an outbound webhook sender (TaskPad calls n8n).
Inbound — n8n creates tasks in TaskPad
Use an HTTP Request node in n8n:
Field | Value |
Method |
|
URL |
|
Header |
|
Body | JSON (see below) |
Example body (email flagged → task with link back):
{
"title": "Follow up on invoice from Acme",
"category": "work",
"priority": "high",
"remind_at": "2026-08-01T09:00:00",
"notes": "Flagged in Outlook — needs reply by EOD",
"source_url": "https://outlook.office.com/mail/deeplink/..."
}Find your API key: right-click tray → Integration Settings… → copy the key shown.
Outbound — TaskPad notifies n8n
In n8n, create a Webhook node. Copy its URL.
In TaskPad: right-click tray → Integration Settings… → paste the URL in n8n webhook URL and save.
TaskPad will POST a JSON payload to that URL for each enabled event.
REST API reference
Base URL (local): http://127.0.0.1:8765
Base URL (remote): https://taskpad-api.yourdomain.com
All endpoints except /health require the header:
X-API-Key: <your-api-key>Interactive docs are available at http://127.0.0.1:8765/docs while TaskPad is running.
Endpoints
Method | Path | Description |
GET |
| Health check (no auth) |
GET |
| List tasks. Query params: |
POST |
| Create a task |
GET |
| Get a single task |
PATCH |
| Update task fields |
DELETE |
| Delete a task |
POST |
| Mark complete/incomplete. Query param: |
POST |
| Simplified create endpoint (same as POST /tasks, shorter schema) |
Task schema
{
"title": "string (required)",
"category": "work | personal | shared",
"task_type": "todo | reminder | both",
"priority": "urgent | high | normal | none",
"notes": "string",
"tags": ["string"],
"due_date": "YYYY-MM-DD or null",
"remind_at": "ISO datetime or null",
"repeat": "none | daily | weekdays | weekly | monthly | every_n_days",
"repeat_n": 1,
"repeat_days": [0,1,2,3,4],
"repeat_day_of_month": 1,
"enabled": true,
"source_url": "https://... or null"
}Example — create a task with curl
curl -X POST https://taskpad-api.yourdomain.com/tasks \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Review PR #42",
"category": "work",
"priority": "high",
"remind_at": "2026-08-01T10:00:00",
"source_url": "https://github.com/your-org/your-repo/pull/42"
}'Outbound webhook events
When a webhook URL is configured, TaskPad POSTs a JSON body to it for each event.
Event | When it fires |
| Task added (via tray, MCP, or API) |
| Task fields changed |
| Task marked complete |
| Task marked incomplete |
| Task removed |
| Reminder alert shown |
| Overdue check triggered |
Payload shape:
{
"event": "task.created",
"task_id": "abc123",
"title": "Review PR #42",
"category": "work",
"priority": "high",
"task_type": "todo",
"remind_at": "2026-08-01T10:00:00",
"due_date": null,
"completed": false,
"source_url": "https://github.com/...",
"created_at": "2026-07-28T08:00:00",
"updated_at": "2026-07-28T08:00:00"
}Configuration file
%APPDATA%\TaskPad\config.json — created automatically on first run.
{
"api_key": "auto-generated 48-char hex key",
"mcp_public_url": "https://taskpad.yourdomain.com",
"webhook_url": "https://n8n.yourdomain.com/webhook/taskpad",
"webhook_events": [
"task.created", "task.completed", "reminder.fired", "task.overdue"
],
"sound_type": "system",
"system_sound": "SystemExclamation"
}All settings are editable from the tray menu — direct JSON editing is not normally required.
Releasing a new version
release.ps1 handles the full release cycle in one command:
.\release.ps1 # bump patch (1.0.0 → 1.0.1), build, commit, tag, push
.\release.ps1 -Bump minor # bump minor (1.0.0 → 1.1.0)
.\release.ps1 -Bump major # bump major (1.0.0 → 2.0.0)
.\release.ps1 -Version 1.5.0 # explicit version
.\release.ps1 -NoBuild # commit + tag only, skip installer build
.\release.ps1 -NoPush # build + tag locally, do not push to remoteWhat it does, in order:
Reads the current version from
version.pyCalculates the new version (or uses
-Version)Asks for confirmation before doing anything
Writes the new version back to
version.pyBuilds the installer via
build.ps1(unless-NoBuild)git commit—chore: release v1.0.1git tag -a v1.0.1git push+git push --tags(unless-NoPushor no remote)
If the project has not been initialised as a git repo yet, the script will run git init and do an initial commit automatically.
Building the installer
Prerequisites:
Python 3.10+ with Pillow (
pip install Pillow)Inno Setup 6 installed
To release a new version, edit version.py:
__version__ = "1.1.0"Then run from the project root:
.\build.ps1Or override the version without editing the file:
.\build.ps1 -Version 1.1.0The build script will:
Read
version.py(or use-Versionoverride).Generate
assets/icon.ico(all sizes from 16 to 256 px).Compile
installer/taskpad.isswith ISCC, injecting the version.Output
installer/output/TaskPad-Setup-<version>.exe.
The version string also appears in the tray icon tooltip (TaskPad v1.1.0).
File layout
TaskPad/
├── main.py # Entry point — tray app or --mcp mode
├── models.py # Task dataclass
├── store.py # SQLite storage + config helpers
├── scheduler.py # Reminder / overdue scheduler
├── requirements.txt
├── LICENSE.txt
├── build.ps1 # Build script (icon + Inno Setup)
├── api/
│ ├── server.py # FastAPI REST server on :8765
│ └── webhooks.py # Outbound webhook sender
├── mcp_server/
│ ├── server.py # MCP stdio server (--mcp flag)
│ ├── http_server.py # MCP HTTP/SSE server on :8766
│ └── tunnel.py # Cloudflare tunnel manager
├── ui/
│ ├── overlay.py # Floating task overlay
│ ├── alert.py # Reminder alert dialog
│ └── widgets.py # Custom PIL-based widgets
├── assets/
│ └── icon.ico # Generated by build.ps1
└── installer/
├── taskpad.iss # Inno Setup script
├── launcher.vbs # No-console launcher (wscript.exe)
├── generate_icon.py # PIL icon generator
└── write_config.py # Post-install config writerLicense
MIT — see LICENSE.txt.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceModel Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.Last updated10221215MIT
- Flicense-qualityDmaintenanceAn OAuth-authenticated MCP server that bridges Claude AI with a task management system, allowing users to list, create, and update tasks through natural language commands.Last updated1
- Flicense-qualityDmaintenanceA task management MCP server that provides tools to create, list, complete, and delete tasks using pluggable storage backends. It enables users to interact with their task lists through natural language using MCP-compatible clients like Claude Desktop.Last updated
- Flicense-qualityDmaintenanceA local task management MCP server that enables users to create, update, and manage tasks through natural language conversations with Claude. It provides nine tools for comprehensive task management including creation, filtering, searching, and daily planning without requiring a separate UI or backend service.Last updated
Related MCP Connectors
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evert-vh/TaskPad'
If you have feedback or need assistance with the MCP directory API, please join our Discord server