Schedule MCP
Schedule MCP · инструмент управления личным расписанием проектов
Минималистичный инструмент управления личным расписанием проектов. Один Python-сервис выполняет две роли одновременно:
MCP Server: подключается к 小智 AI через такие платформы, как Verdure MCP Platform / imcp.pro, позволяя 小智 легко читать и записывать ваши данные расписания голосом/в диалоге, а также выдавать напоминания о делах на основе правил (остальную организацию естественного языка берёт на себя модель DeepSeek v4 на стороне сервера 小智).
REST API + PC-фронтенд: в браузере с компьютера вы открываете страницу
/appразвёрнутого сервиса (или локально открываетеweb/index.htmlи указываете адрес развёртывания) — здесь доступны наглядный просмотр и редактирование календаря / диаграммы Ганта (с редактированием) / многопроектного управления / плановых задач (ближние/дальние).
Для хранения данных используется SQLite (без каких-либо дополнительных зависимостей). После развёртывания всё работает сразу, запускать локальный бэкенд не нужно.
Справочный проект: shiikun-cn/tarot-mcp (совместимый режим MCP-over-HTTP проверен и работает).
Возможности
Возможность | Описание |
Многопроектное управление | название проекта/описание/статус (plan / in progress / archived — три состояния)/приоритет/даты начала и окончания/цвет |
Расписание (диаграмма Ганта) | задачи внутри проекта; поддержка интервала начала и окончания, крайнего срока, статуса (не начато/в работе/выполнено); страницу Ганта можно редактировать напрямую: перетаскивайте края блоков, чтобы менять даты начала и окончания, нажимайте на блок для изменения свойств, добавляйте проекты/задачи, сохраняйте всё вместе |
Автоматический статус задачи | после включения в настройках задачи автоматически получают статус по текущей дате: 待办 (не начато) / in progress / done (просрочено), без накопления «просрочено» |
Плановые дела | фиксируют ещё не определённые проекты/дела: делятся на ближние/дальние, имеют приоритет (не имеют свойств даты, в напоминания не входят) |
Напоминания о делах | правило-движок вычисляет в реальном времени: просрочено / истекает сегодня / скоро истекает (по умолчанию ближайшие 7 дней) / проект близко к завершению (в основном по задачам/проектам) |
Запрос расписания | добавлен инструмент |
Определение недели | в настройках можно выбрать начало недели понедельник / воскресенье; единые месячный вид календаря, обзор недели и статистика «этой недели» |
PC-фронтенд | шесть представлений: обзор / календарь / Гантт / проекты / плановые дела / напоминания — один HTML-файл, без сборки |
Резервное копирование |
|
Related MCP server: Todoist MCP Server
Структура проекта
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,不入库)Модель данных
Таблица | Поля |
| id, name, description, color, status(planned/active/archived), priority(1-5), start_date, end_date, created_at, updated_at |
| id, project_id (внешний ключ, каскадное удаление), title, description, status(todo/doing/done), priority, start_date, end_date, due_date |
| id, text, bucket(soon/later), completed(0/1), completed_at, project_id, priority(1-5) (без свойств даты) |
| key-value: |
Формат всех дат: YYYY-MM-DD. Напоминания не сохраняются в базе данных, а вычисляются правилом-движком в реальном времени.
Примечание: статусы проектов старых версий paused/completed при запуске автоматически мигрируют в planned/archived; поля progress (прогресс задачи) и due_date (срок планового дела) удалены на уровне продукта (столбцы в базе сохранены для совместимости со старыми резервными копиями, в чтении, записи и отображении больше не используются).
Правила автоматического статуса задач (вступают в силу после включения в настройках)
Если сегодня раньше даты начала →
todo(не начато)Если сегодня в интервале между датой начала и сроком окончания →
doing(в работе)Если сегодня позже даты окончания / крайнего срока →
done(выполнено, чтобы не накапливалось «просрочено»)Если у задачи нет никаких свойств дат → сохраняется исходный статус
Мгновенная классификация при создании/обновлении задачи (не ограничена идемпотентностью текущего дня); полный запуск выполняется не более одного раза в день (идемпотентность
last_auto_date), кнопка «Выполнить сейчас» в панели настроек принудительно запускает обработкуАвтоматически срабатывает также при каждом запросе задач/расписания (если функция включена)
Список MCP-инструментов (16 шт., вызываются 小智 AI)
Инструмент | Действие | Типичный пример запроса |
| список проектов (фильтрация по статусу) | «Какие проекты у меня есть?» |
| создать проект | «Создай проект »Ремонт», с ноября по декабрь, приоритет highest» |
| обновить проект (статус / сроки / приоритет и т. д.) | «Отметь проект X как in progress / archived» |
| удалить проект (каскадно удаляет задачи) | «Удали проект X» |
| вывести задачи (фильтр по проекту / статусу) | «Какие задачи у проекта X?» |
| create a new task in a project | «Добавь задачу в проект X, дедлайн на завтра» |
| изменить задачу (статус / срок и т. д.) | «Отметь задачу X выполненной» |
| delete task | «Удали задачу X» |
| список плановых дел (ближние / дальние) | «Какие у меня планируемые дела?» |
| создать плановое дело (без даты, с приоритетом) | «Запиши плановое дело: купить билеты на самолёт» |
| обновить плановое дело (готово / сменить категорию / сын сменить приоритет) | «Вычеркни X» |
| удалить плановое дело | «Удалить X» |
| напоминания о делах / просроченное / сегодня / близкое / завершение проекта) | «Что мне напомнить?» |
· | краткое расписание: | «Что делаем сегодня?» — используйте его в первую очередь |
| общий обзор расписания (сегодня / неделя / месяц + статистика) | «Какой общий прогресс?» |
| интервал планирования проекта (архивированные проекты отсутствуют) | «Какое время планирование у проекта X?» |
Данные, возвращаемые в AI, уже сокращены: у всех инструментов в metadata delivery not color, created_at, updated_at, project_color; задачи не содержат progress, компа-планные дела не содержание due_date. свойство content[0].text — это легко читаемый китайский текст, metadata — структурированные данные, наборы полей совпадают.
Как закомментировать / изменить инструменты (важно)
Все определения инструментов сосредоточены в списке TOOLS в app.py (примерно строки 260-560). Один инструмент — это один объект в фигурных скобках, включающий четыре поля: name / description / input / handler. Список tools/list автоматически генерируется из TOOLS; закомментировали — и инструмент становится скрытым от AI, остальной код менять не нужно. После сохранения перезапустите сервис — изменения вступят в силу.
Пример 1: закомментировать инструмент create_project (не давать 小智 создавать проекты)
# app.py 中 TOOLS 列表里,把整个对象包进注释:
# {
# "name": "create_project",
# "description": "新建一个项目。…",
# "inputSchema": {…},
# "handler": tool_create_project,
# },Пример 2: изменить только имя инструмента (помощь AI определяет, когда его использовать)
{
"name": "get_reminders",
"description": "获取事务提醒…。建议每天早上询问用户时优先调用。",
# ↑ 只改 description 字符串即可
…
},Пример 3: оставить только инструменты, связанные с «напоминаниями»
Закомментируйте в списке TOOLS все инструменты, не связанные с напоминаниями (например, create_project, list_tasks, create_todo и т. д.), целиком — оставьте только get_reminders, get_schedule, get_schedule_summary. После повторного обнаружения на платформе Verdure со стороны 小智 будут видны только оставшимся инструментов.
Подсказка: после комментарирования закомментированного рекомендуем на платформе Verdure заново сохранить/обновить конфигурацию этого MCP-сервера, чтобы было выполнено повторное обнаружение. После каждого изменения
TOOLSможно сначала перезапустить локальный сервис и с помощью НОДА убедиться, что списокsmoke-test.mjsсоответствует ожиданиям (в проверки захардкожено 16 — иначе изменить этот скрипт, обновив массивexpected).
REST API (PC-фронтенд подключается напрямую, CORS открыт полностью)
Метод | Путь | Описание |
GET |
| проверка здоровья (для keep-alive от использования) |
GET/POST |
| list of projects / create project |
GET/PUT/DELETE |
| info / update / delete |
GET/POST |
| list of tasks ( |
GET/PUT/DELETE |
| task details / update / delete |
GET/POST |
| list of planned tasks ( |
GET/PUT/DELETE |
| detail / update / delete |
GET |
| events / reminders |
GET |
| schedule overview (contains |
GET |
| planned Gantt schedule data (processing archied projects) |
GET/PUT |
| read / modify settings ( |
POST |
| immediately execute one refresh of automatic task statuses |
GET |
| export full backup JSON (including settings) |
POST |
| restore from backup JSON |
GET |
| PC scheduling panel (frontend page) |
Все ответы единообразно возвращают {"code":0,"data":…}; errors return {"code":4xx/5xx,"error":"…"}. Optional authentication: after setting the environment variable API_KEY all requests must include X-API-KEY header (except /health and /app, to keep keep-alive and page access unaffected).
Быстрый локальный запуск (проверка)
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 доступен только в Linux: gunicorn depends on Unix
fcntl, cannot directly run on Windows (deployment in Linux containers Render/Docker unaffected). Local debug always usespython app.py(Flask dev server, intended), in production in Dockerfile uses gunicorn.
Проверка:
# 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"}'Откройте в браузере http://127.0.0.1:8080/app — это PC-панель (antidirect connection, no configuration needed). If you opened web/index.html directly, set API address to http://127.0.0.1:8080 in the ⚙ settings.
Прилагаются автоматические и демонстрации:
node smoke-test.mjs # 端到端冒烟测试(35 项断言,含自动状态/设置/字段精简)
node seed-demo.mjs # 播种演示数据(一个项目+4任务+4待办,日期相对今天)Сброс данных: удалите
data/schedule.dbи restart service (DB files by default are gitignored).
Шаги развёртывания (GitHub → Render → Verdure → 小智AI)
Шаг 1: загрузите GitHub
Создайте репозиторий на GitHub (например,
schedule-mcp, Private or Public — mutual compatible).Загрузите код (не
data/*.dbв gitignore; also recommended not to add.venv/):
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 mainШаг 2: deploy Render (free)
Open render.com → New → Web Service → connect your GitHub repo.
Configure:
Name: см. services
Environment:
Python 3(or Docker; if you choose Docker, Build/Start below не org need you)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:
API_KEY=你的随机密钥(if set, all MCP/REST requests must carryX-API-KEY)
Deploy and wait for the build to finish. Получите адрес сервиса:
https://schedule-mcp.onrender.com.Check: open
https://schedule-mcp.onrender.com/healthin browser, should return{"code":0,"status":"ok",…}.
⚠️ Особенности бесплатной вернии Render:
Free instance approximately 15 minutes without traffic → sleep; next request requires cold start (first request about 5-30 seconds) **. → keep-alive must be enabled.
The file system in the free version is temporary: after redeploy/again restart SQLite data will be cleared. For personal self-use what follows is「export backup」regularly in ⚙ settings, либо accept that after rebuild ты заново вводить данные (небольшое влияние на короткосрочное планирование).
Шаг 3: enable keep-alive (обязательно для бесплатной версии Render)
Open
.github/workflows/keep-alive.yml, changeURLinhttps://schedule-mcp.onrender.com/health.(Optional) If
API_KEYis set, add system secretSERVICE_API_KEYin GitHub repo Settings → Secrets and variables → Actions → New repo.Push the change. Actions will ping
/healthevery 10 minutes? The service stays active.If workflow keep-alive not works: use cron-job.org send GET to the service. Set frequency every 10-14 minutes.
Шаг 4: добавьте MCP-сервер на Verdure MCP Platform
Login to Verdure MCP Platform (if no account, register in the same account as the reference project; the platform connects endpoints and assistants like 小智 / Tuya).
In the page «Add / Manage MCP Servers», select HTTP (Verdure detect JSON-RPC via POST
/, this service already implements in the same way as tarot-mcp).Fill:
Service address (URL):
https://schedule-mcp.onrender.com/(the root path enough; the service handles MCP JSON-RPC on/)If authentication is configured, set the key corresponding to
X-API-KEY(or fill header as platform requests).
After saving, the platform automatically runs
initialize+tools/list, should see 16 tools above. If tool list is empty, check if/healthavailable and check that the end of URL accidentally doesn't have/api.Bind the added MCP server to your 小智 AI assistant (choose the assistant, associate with that server).
Шаг 5: голосовая проверка 小智 AI
Ask 小智 similar instructions to verify read/write:
"Что делать сегодня?" / "Today's schedule?" → triggers
get_schedule(priority)"What do I need to remind?" → triggers
get_reminders"Какие планы на этой неделе? / в месяце?" → triggers
get_schedule(range=week/month)"Запиши плановое дело: покупай билеты на самолет, высокий приоритет" →
create_todo"Создай проект «Ремонт», с ноября по декабрь, высокий приоритет" →
create_project"Добавь задачу в проект «Ремонт»: выбор проекта, до 1 декабря" →
create_task"Какие у меня есть проекток? Как общий прогресс проекта X?" →
list_projects/list_tasks/get_gantt_data"Отметь задачу X" →
update_task
Пояснение про keep-alive (выводы по исследованиям)
Вывод: keep-alive — не требование MCP-против, nor Verdure MCP Platform; it applies only for free temporary deployments like if service is deployed on free hard (Render Free / Railway free quota) and goes to sleep when there under no traffic.
Логические основания:
In the reference project
tarot-m», thekeep-alive.ymlis a **GitHub Actions** cron job, every 10 minutes viacurlrequests/health; it points tohttps://tarot-mcp.onrender.com/health` — это так, для Render free instance has ~15 no traffic sleep protection.The MCP protocol itself (
initialize/tools/list/tools/call) has any requirements; Verdure platform is a management level, which is, «integration + remote injection», it is responsible for injecting tools into 小易 when your service is online, but it does not start your sleep host for you.Therefore:
deployment of Render Free / Railway free quota and other sleeping platforms → keep-alives must be retained (otherwise you will see cold start slow or timeout when 小智 calls the tool, the taste is bad);
deployment to paid persistent instances (Render Starter+, cloud server, etc.) or Verdure hosted (if the platform supports this) → you can remove
.github/workflows/keep-alive.yml, no side effects.
This project keeps and adapts the
keep-alive.yml(URL should be changed to service address), because the reference chain uses Render free version, and your deployment method matches.
FAQ
Q: After deployment 小智 says "no available tools"?
A: First check that https://<你的服务>/health is accessible; then on the Verdure page save/refresh the server config trigger. Note address root path (/), not /api.
Q: How to make AI only do official reminders, fewer tools?
A: We described in "How to edit / modify tools" — comment on all in app.py TOOLS list, not needed other tools; after commenting, restart and re-engine with Verdure.
Q: Auto status will change my manual completion? A: The status is completely derived from date. If you want manual control, turn off that switch in settings; changes after disabling affect manual modifications.
Q: data after restart lost? A: Free instance file system temporary. In settings → Export Backup / JSON save; restore data on next reboot (backups contain configuration).
Q: How add API auth?
A: In Render env variable API_KEY=xxx. Then MCP (POST /) and REST ( /api/*) require header X-API-KEY; front-end also fills Key in ⚙ settings, secret service for keep-alive.
Q: Can deploy elsewhere?
A: Yes, any hosting that runs Python (Railway / Fly.io / cloud server / NAS local network). SQLite file in data/, if mounted persistent volume no data loss.
Q: How to check which 小智 tools have invoked?
A: Render logs (Logs) print all tools/call calls and results; you can also see the tool list in root / GET response.
Technical points (compatibility with tarot-mcp)
MCP работает по JSON-RPC over HTTP (единая конечная точка
POST /); реализованыinitialize(protocolVersion 2024-11-05),notifications/initialized,tools/list,tools/call,ping. Для неизвестных методов возвращается пустой результат — это соответствует патчу совместимости tarot-mcp, работоспособность проверена на платформах типа Verdure / imcp.pro.CORS открыт полностью (
Access-Control-Allow-Origin: *), поэтому HTML-клиент на ПК может напрямую обращаться к REST API с любого origin.SQLite использует режим WAL + отдельное подключение на каждый запрос, что обеспечивает безопасное чтение/запись при нескольких воркерах gunicorn.
Инструменты возвращают
content[0].text(читаемый текст на китайском) +metadata(структурированный JSON, из которого исключены нерелевантные для AI поля, такие как color/created_at/updated_at/project_color), что учитывает и понимание AI, и машинный разбор.Настройки (статус автоматических задач / определение недели) хранятся на сервере в таблице
settings; панель интерфейса и MCP-запросы используют одну и ту же конфигурацию. Статистика за «текущую неделю» в frontend-календаре и недельном календаре также полностью следует этому определению недели.
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