Schedule MCP
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., "@Schedule MCPWhat's my schedule for today and any upcoming deadlines?"
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.
Schedule MCP · Personal Project Scheduling Tool
A minimalist personal project scheduling tool. A single Python service plays two roles at once:
MCP Server: connects to 小智AI through platforms such as Verdure MCP Platform / lmcp.pro, letting 小智 easily read and write your scheduling data via voice/conversation, and provides rule-based reminders (remaining natural-language composition is handled by the DeepSeek v4 model on 小智's server side).
REST API + PC frontend: For access the deployed service's
/apppage in a browser on your PC (or openweb/index.htmllocally and point it at the deployment URL), giving intuitive views and editing for calendar / Gantt (editable) / multi-project / to-do plan (near-term/far-term).
Data storage uses SQLite (zero extra dependencies), ad hoc; read to use immediately after deployment without any local backend.
Reference project: shikun-cn/tarot-me (MCP-over-HTTP compatibility mode has been verified to work).
Feature row
| Capability | Description | | `-------- | ----------------------------------------------------------------------- | | Attribution? Actually table as original. In translation, separator row must be copied from original. We'll use original dash count.
[Since we need preserve structure exactly, we output same separator rows. We'll include row.
Let's final.
I will output translation fully.# Schedule MCP · Personal Project Scheduling Tool
A minimalist personal project scheduling tool. One Python service is responsible for two roles:
MCP Server: connects to 小智AI through platforms such as Verdure MCP Platform / imcp.pro, letting 小智 easily read and write your scheduling data via voice/conversation, and provides rule-based task reminders (the remaining nat-anguage generation is handled by the DeepSeek v4 model on 小智's server side).
RST API + PC frontend: on your PC, open the deployed service's
/apppage directly in the browser (or openweb/index.htmlwith a curl to the deployment URL), giving intuitive views and editing of calendar / Gantt chart (editable) / multi-project management / to-do plans (near-term/far-term).
Data uses SQLite (zero extra dependencies), ready to use after deployment without running any backend locally.
Referenced project: erikun-me/tarot-me (MCP-over-HTTP compatibility mode has been verified working).
Related MCP server: Todoist MCP Server
Feature breakdown
Ability | Description |
Multi-project management | Project name/description/status (planning/in progress/archived triple state)/priority/start-end dates/color |
Schedule (Gantt) | Tasks per project, with start/end range, deadline, status (to-do/doing/Don); Gantt page is directly editable: drag the edge of a bar to change start/end dates; click a bar to edit properties; add projects/tasks; save at once |
--- | |
Auto task status | Once enabled in settings, the current date place (or due) tasks as to-do (not started)/in-progress/completed (expired), no more "over-due" accumulation |
To-do plans | Records not-yet-defined projects/things: split into near-term/far-term, with priority (no date properties, not involved in reminders) |
To-do reminders | Rule engine computes in real time: **over-due / **Due today / Due soon (default next 7 days) / Proceed |
Schedule query | New |
Week start | Settings let choose Monday / Sunday, front** or Sunday as start, unified across calendar month view, overview this week, and "this week" statistics |
--- | |
PC frontend | Overview / Calendar / Gantt / Project / Tasks / Reminders six views; single HTML file with no build step |
Data backup |
|
Project structure
schedule-mcp/
├── app.py # Flask 主服务:MCP JSON-RPC 兼容层 + REST API + 前端托管
├── db.py # SQLite 数据层 + 设置 + 自动任务状态 + 提醒规则引擎 + 备份/恢复
├── requirements.txt # 仅 Flask + gunicorn(SQLite 用标准库)
├── Dockerfile # 容器镜像(gunicorn 生产启动,PORT 环境变量)
├── .gitignore
├── .github/workflows/
│ └── keep-alive.yml # 服务保活(Render 免费版必须,详见下文说明)
├── web/
│ └── index.html # PC 端前端(单文件,无外部依赖)
├── smoke-test.mjs # 端到端冒烟测试(35 项断言)
├── seed-demo.mjs # 演示数据播种(日期相对今天)
└── data/ # SQLite 数据库文件(data/schedule.db,不入库)Data model
Table | Fields |
| id, names, descrition, color-(planned/active/archived), priority(1-5), start_date, end _ate, created_at, updated_at |
| id, project_id(foreign key, cascade delete), title, description, status(always to-out/doing). |
| id, text, bucket(soon/later), completed(0/1), completed_at, project_id, priority(1-5) (no date attrs) |
| key-value: |
All dates format: YYYY-MM-DD. Reinders are not stored, computed real-time by the rules engine.
Note: In older versions, paused/completed project states are automatically migrated to planned/archived at startup; the progress field (task progress) and due_date (to-do) field) have been removed at the product layer (database columns are kept for compatibility with old backups, but reads, writes and displays no longer use them).
Auto task status rules (effective when enabled in settings)
Today before the start date →
todo(to-do)Today inside start date ~ end/due date →
doing(in progress)Today after the end/due date →
Done(complete, avoids accumulating "over-due")Task with no date property → kept as-is
When you create/update a task, it is categorized immediately (not limited by the idempotence guard per day); the full pass runs only once per day (
last\_auto\_dateidempotence), and "Run now" in Settings panel forces itQuerying tasks/schedules also triggers it automatically (if enabled)
MCP tool list (16, for 小智AI to call)
| Tool | Purpose | Typical question example |
| ---|---||
| list\_projects | List projects (filtered by state) | "What projects do I have?" |
| create\_project | Create a project | "Create a "remodel" project, Nov to Dec, highest priority" |
| update\_project | Update a project (state/time/priority…) | "Mark project X as in progress/archived" |
| delete\_project | Delete a project (cascade-delete tasks) | "Delete project X" or just "Delete X" |
| list\_tasks | List tasks (filter by project/state) | "What tasks are in X?" |
| create\_task | Create a task under a project | "Add a task to X, due tomorrow" |
| update\_task | Update a task (state/time…) | "Mark task X as completed" |
| delete\_task | Delete a task | "Delete task X" |
| list\_todos | List to-do plans (near/far) | "What are my to-dos?" |
| create\_todo | Create a to-do plan (no date, with priority) | "Add a to-do: buy flight tickets" |
| update\_todo | Update a to-do plan (complete/change category/priority) | "Cross off X" |
| delete\_todo | Delete a to-do plan | "Delete X" |
| get\_reminders | Task reminders (over-due / today / due soon / project near end) | "What do I need a reminder for?" |
| get\_schedule | Compact schedule: range=tooday/week/month (default today) | For "What do I do today?" to use first |
| get\_schedule\_summar | Schedule overview (today/week/month + stats) | "How is the overall progress?" |
| get\_grandi\_data | Project schedule ranges (archived projects not shown) | "What is the time schedule for X project?" |
The data returned to the AI is compressed: the metadata for all tools does not include color, created\_at, updated\_at, project\_color; tasks do not include progress, and to-do plans do not include due\_date. content[0].text is human-readable Chinese text, while the metadata is structured and consistent with the text fields.
How to comment out / modify tools (important)
The definitions of all tools are concentrated in the TOOLS list in app.py (appproximately lines 260–560). Each tools is one dictionary object in the list, with four fields: name / description / inputSchema / handler. The token tools/list list is generated automatically from TOOLS; commenting one out bothides it from the AI, no other code changes needed, then restart the service after saving.
Example 1: Comment out the create\_project tool (keep 小智 AI from creating projects)
# app.py 中 TOOLS 列表里,把整个对象包进注释:
# {
# "name": "create_project",
# "description": "新建一个项目。…",
# "inputSchema": {…},
# "handler": tool_create_project,
# },Example 2: Only modify the tool description (guide the AI on when to use it)
{
"name": "get_reminders",
"description": "获取事务提醒…。建议每天早上询问用户时优先调用。",
# ↑ 只改 description 字符串即可
…
},Example 3: Keep only the "task reminder" tools
Comment out the non-reminder tools in the TOOLS list (such as create\_project, list\_tasks, create\_todo, etc.) as a whole, keeping only get\_reminders, get\_schedule, and get\_schedule\_summar. After the 小智 side re-probes on Verdue platform, only the remaining tools will be visible.
Tip: After commenting, it is best to re-save / refresh that MCP server configuration on the Verdure platform. After each change in
TOOLS, restart the server locally and runnode smoke-test.mjsthere. The list of expected tools is written with 16 items; if you comment tools, update theexpectedarray in that script.
REST API (PC front-end connects directly, CORS full open)
Method | URL | Description |
GET |
| Health check (for keep-alive) |
GET/POST |
| List projects / create new |
GET |
| Project details, update, delete |
GET/POST |
| List tasks ( |
GET/PUT/DELETE |
| Task details, update / delete |
GET/POST |
| List to-do plans ( |
GET/PUT/DELETE |
| To-do details / update / delete |
GET |
| Reminders |
GET |
| Schedule overview (contains week_start) |
GET |
| Gantt chart data (excludes archived projects) |
GET/PUT |
| Get / update settings (auto_task_status / week_start) |
POST |
| Run automatic task-status refresh immediately |
GET |
| Export a full backup JSON (including settings) |
POST |
| Restore from a backup JSON |
GET |
| PC projects panel (front page) |
All succeed responses are unified {"code":0,"data":…}; errors return {"code":4xx/5xx,"error":"…"}. Optional auth: if the environment variable API_KEY is set, every request must include the PI-API-KEY header (/health and /app are excluded, so keep-alive and page access are unaffected).
Run locally for a quick check (verification)
cd schedule-mcp
python -m venv .venv
# Windows: .venv\Scripts\activate macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
python app.py # 默认监听 0.0.0.0:8080,可用环境变量 PORT 修改💡 **gunicorn :
gunicornrequires Unixloopand cannot run natively on Windows locally (deploy programs to Render/Docker Linux containers are not affected). Use `python app.py always to local debugging (Flask development server, identical behavior); Dockerfile uses gunicorn in production.
Verification:
# 1) 健康检查
curl http://127.0.0.1:8080/health
# 2) MCP 握手
curl -X POST http://127.0.0.1:8080/ -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
# 3) 列出工具(应 16 个)
curl -X POST http://127.0.0.1:8080/ -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# 4) 今日日程(新工具)
curl -X POST http://127.0.0.1:8080/ -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_schedule","arguments":{"range":"today"}}}'
# 5) 事务提醒
curl -X POST http://127.0.0.1:8080/ -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_reminders","arguments":{}}}'
# 6) 设置:星期定义 / 自动任务状态
curl http://127.0.0.1:8080/api/settings
curl -X PUT http://127.0.0.1:8080/api/settings -H "Content-Type: application/json" \
-d '{"week_start":"sun","auto_task_status":"1"}'Open http://127.0.0.0:8080/app in a browser to use the PC panel (same-origin, no configs needed). If you double-click web/index.html directly, you can set the PI URL to http://127.0.0.0:8080 in Settings.
Includes scripts for self-test/demonstration:
node smoke-test.mjs # 端到端冒烟测试(35 项断言,含自动状态/设置/字段精简)
node seed-demo.mjs # 播种演示数据(一个项目+4任务+4待办,日期相对今天)One-step Deployment (GitHub → Render → Verdure → 小智)
Step 1: Push to GitHub
Create a new repository on Git Hub (e.g.,
schedule-mch, either Public or Private).Push the code (do not commit
data/*.db, because.gitignoreexcludes the data; also avoid committing.ven/):
cd schedule-mcp
git init
git add .
git commit -m "feat: schedule-mcp 个人排程 MCP 服务"
git branch -M main
git remote add origin https://github.com/<你的用户名>/schedule-mcp.git
git push -u origin mainStep 2: Deploy to Render (Free)
Open render.com → New → Web Service → connect your repository.
Configure:
Name:
schedule-mch(anything is fine)Environment:
Python 3(orDocker, in that case the Build/Start commands below are not required)Build Command:
pip install -r requirements.txtStart Command:
gunicorn -w 2 -b 0.0.0.0:${PORT:-8080} app:app --timeout 30Instance Type: Free
(Optional) Environment Variables: set
PI_KEY=your–random–key(then MCP and REST requests must sendX-API-KEY)
Deploy, wait for the build to finish, and you get a URL like
https://schedule-mch.onrender.com.Verify by opening
https://schedule-mch.onrender.com/health; you should see{"code":0,"status":ok,…}.
⚡ Warning about Render free tier:
The free instance will sleep after ~5 minutes with no traffic; next request needs companyed cold start (first request 5–30 s). → You need a keep-alive (below).
The free-tier file system is temporary: a refresh/redeploy will clear the SQLite database. For personal use, I suggest regularly exporting backup in ⚙ settings, or accept re-entry (for short-term schedules, the impact is slight).
Step 3: Enable keep-alive (required for Render free)
Edit
.github/workflows/keep-alive.yml, changeURLto your service URL (e.g.,https://schedule-mch.onrender.com/health).(Optional) If you set
API_KEY, addSERVICE_API_KEYto the repo Settings → Secrets and variables → Actions → New repository secret, then also uncomment that line in the file.Push; the Action will
curl /healthevery 10 minutes to keep the service alive.If that fails: use cron-job.org to send a GET request to your service URL, scheduling once every 10–14 minutes.
Step 4: Add the MCP server in Verdure MCP Platform
Sign in to Verdure MCP Platform (if no account, register in the same way as the reference project; the platform connects to Xiaozhi / Tuya students).
Go to Add / Manage MCP Servers, choose HTTP–type. (Verdure probes
POST /with JSON-RPC; this server follows that exact pattern, matching the tarot-mcp implementation.)Fill in:
URL (Server Address):
https://schedule-mch.onrender.com/(root is enough; the server handles MCP JSON-RPC on/)If you set auth, enter the key corresponding to
X-API-KEY(or add the header as the platform asks).
After saving, the platform does an automatic initialize → tools/list probe, and you should see the above 16 tools. If the tool list is empty, check the
/healthendpoint is reachable, and that the address does not erroneously end with/api.Assign the MCP server to your 小智 AI assistant (inside the platform, select the assistant and link the server).
Step 5: Touch via 小智 AI voice
Speak commands like:
"What should I do today?" / "What's on today?" → triggers
get_schedule(first)"Any reminders for me?" → triggers
get_reminders"What's on this week?" / "What's on this month?" → triggers
get_schedule(range=week/month)"Pick up the to-do : buy tickets, high priority" → triggers
create_todo"Make a project called X, from November to December, highest priority" → triggers
create_project"Add a task to X: decide the design option by Dec 1" → triggers
create_task"What projects do I have? / How is X going?" → triggers
list_projects/get_schedule_summary/get_gantt_data"Mark X task as done" → triggers
update_task
Keep-alive notes (research conclusion)
Conclusion: keep-alive is not an MCP protocol requirement, nor a Verdure MCP requirement; it is only needed when the service is deployed on a free cloud pilot that sleeps after idle (Render Free / Railway quota).
Reasoning:
The tarot-mcp project contains
keep-alive.yml— a GitHub Actions that runs every 10 minutes to hit/healthwithcurl, pointing athttps://tarot-mcp.onrender.com/health. It is designed to keep Render's free instances from sleeping by idle ~5 min.The MCP protocol itself (
initialize/tools/list/tools/call) has no keep-alive requirement; the Verdure Platform is an orelating / remote proxy layer, which inject y tools when your service is online; it does not start your sleeping service.So:
If you deploy on Render Free / Railway free (tier which sleeps), you must keep the keep-alive, or 小智 will have slow cold starts and poor failure;
If you deploy on paid instance (Render Starter+, cloud VPS, etc.) or Verdure-hosted runtime, you can delete
.github/workflows/keep-alive.ymlwith no side effects.
This repo keeps and includes the keep-alive workflow by default (URL must be changed to your service), because the reference path runs on Render Free and matches your deployment style.
FAQ
Q: After deploying, 小智 says "no tools available"?
A: First check that https://<your-service>/health is reachable; then re-save/refresh the MCP server config in Verdure to trigger a new probe. Do not add a trailing /api; use the root path.
Q: How to let the AI only do reminders, with fewer add/edit/delete tools?
A: As above — go to app.py’s TOOLS list, comment out unused tools, restart and refresh in Verdure.
Q: Does the auto-status change my manual done / “completed” flags?
A: When the setting is enabled, task state is derived entirely from dates (not yet started → todo, in progress → doing, overdue → done). If you want to control it manually, turn the switch off; then only manual changes are preserved.
Q: Render free loses data after you restart? A: Free instance storage is ephemeral. In ⚙ → Export backup (JSON), and later Restore from backup (backup also include settings).
Q: How to add auth?
A: Set the environment API_KEY on Render. Then MCP (POST /) and REST (/api/*) both require the X-API-KEY header; the PC front end can fill in the key in ⚙ settings, and keep-alive workflow can use the secret.
Q: Can I deploy somewhere else?
A: Yes, anything that runs Python (Railway / Fly.io / Cloud VM / intranet NAS). The SQLite file is under data/; use a persistent volume to avoid loss.
Q: How can I see what tools 小智 really invoked?
A: Render logs will print every call (tool name + params + result). You can also GET / and see the tool list.
Technical keys (compatible with tarot-me)
MCP uses JSON-RPC over HTTP (single endpoint
POST /), implementinginitialize(protocolVersion 2024-11-05),notifications/initialized,tools/list,tools/call, andping. Unknown methods return an empty result, consistent with the tarot-mcp compatibility patch, and it has been verified to work on platforms such as Verdure / imcp.pro.CORS is fully open (
Access-Control-Allow-Origin: *), allowing PC-side HTML to directly connect to the REST API across domains.SQLite uses WAL mode + a separate connection per request, enabling safe read/write with gunicorn multi-worker.
Tools return
content[0].text(readable Chinese) +metadata(structured JSON, with AI-irrelevant fields such as color/created_at/updated_at/project_color removed), balancing AI comprehension and machine parsing.Settings (auto task status / week definition) are stored in the server-side
settingstable, with the frontend panel and MCP queries sharing the same configuration; "this week" statistics and the frontend calendar and weekly calendar all follow this week definition.
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
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Todoist tasks and projects through natural language. Supports comprehensive task management including creating, updating, completing tasks, managing projects, and filtering by various criteria.11GPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, sections, and labels through natural language, supporting task creation, updates, completion, and intelligent organization of your workflow.24MIT
- AlicenseAqualityFmaintenanceEnables AI assistants to manage Todoist tasks, projects, and labels through natural language, with support for filters, priorities, and natural language dates.12MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, and labels through natural language. It provides a comprehensive suite of tools for task organization, productivity tracking, and structured workflows like daily planning.24267MIT
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Schedule tasks for later from your AI agent: reminders, delayed webhooks, recurring jobs.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
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/shiikun-cn/schedule-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server