Skip to main content
Glama

Schedule MCP · инструмент управления личным расписанием проектов

Минималистичный инструмент управления личным расписанием проектов. Один Python-сервис выполняет две роли одновременно:

  1. MCP Server: подключается к 小智 AI через такие платформы, как Verdure MCP Platform / imcp.pro, позволяя 小智 легко читать и записывать ваши данные расписания голосом/в диалоге, а также выдавать напоминания о делах на основе правил (остальную организацию естественного языка берёт на себя модель DeepSeek v4 на стороне сервера 小智).

  2. REST API + PC-фронтенд: в браузере с компьютера вы открываете страницу /app развёрнутого сервиса (или локально открываете web/index.html и указываете адрес развёртывания) — здесь доступны наглядный просмотр и редактирование календаря / диаграммы Ганта (с редактированием) / многопроектного управления / плановых задач (ближние/дальние).

Для хранения данных используется SQLite (без каких-либо дополнительных зависимостей). После развёртывания всё работает сразу, запускать локальный бэкенд не нужно.

Справочный проект: shiikun-cn/tarot-mcp (совместимый режим MCP-over-HTTP проверен и работает).


Возможности

Возможность

Описание

Многопроектное управление

название проекта/описание/статус (plan / in progress / archived — три состояния)/приоритет/даты начала и окончания/цвет

Расписание (диаграмма Ганта)

задачи внутри проекта; поддержка интервала начала и окончания, крайнего срока, статуса (не начато/в работе/выполнено); страницу Ганта можно редактировать напрямую: перетаскивайте края блоков, чтобы менять даты начала и окончания, нажимайте на блок для изменения свойств, добавляйте проекты/задачи, сохраняйте всё вместе

Автоматический статус задачи

после включения в настройках задачи автоматически получают статус по текущей дате: 待办 (не начато) / in progress / done (просрочено), без накопления «просрочено»

Плановые дела

фиксируют ещё не определённые проекты/дела: делятся на ближние/дальние, имеют приоритет (не имеют свойств даты, в напоминания не входят)

Напоминания о делах

правило-движок вычисляет в реальном времени: просрочено / истекает сегодня / скоро истекает (по умолчанию ближайшие 7 дней) / проект близко к завершению (в основном по задачам/проектам)

Запрос расписания

добавлен инструмент get_schedule: range=today/week/month — краткое расписание; когда AI спрашивает «что делать сегодня», в первую очередь используйте его

Определение недели

в настройках можно выбрать начало недели понедельник / воскресенье; единые месячный вид календаря, обзор недели и статистика «этой недели»

PC-фронтенд

шесть представлений: обзор / календарь / Гантт / проекты / плановые дела / напоминания — один HTML-файл, без сборки

Резервное копирование

/api/backup — экспорт полного JSON (включая настройки), /api/restore — восстановление


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,不入库)

Модель данных

Таблица

Поля

projects

id, name, description, color, status(planned/active/archived), priority(1-5), start_date, end_date, created_at, updated_at

tasks

id, project_id (внешний ключ, каскадное удаление), title, description, status(todo/doing/done), priority, start_date, end_date, due_date

todos

id, text, bucket(soon/later), completed(0/1), completed_at, project_id, priority(1-5) (без свойств даты)

settings

key-value: auto_task_status (0/1), week_start (mon/sun), last_auto_date

Формат всех дат: YYYY-MM-DD. Напоминания не сохраняются в базе данных, а вычисляются правилом-движком в реальном времени.

Примечание: статусы проектов старых версий paused/completed при запуске автоматически мигрируют в planned/archived; поля progress (прогресс задачи) и due_date (срок планового дела) удалены на уровне продукта (столбцы в базе сохранены для совместимости со старыми резервными копиями, в чтении, записи и отображении больше не используются).


Правила автоматического статуса задач (вступают в силу после включения в настройках)

  • Если сегодня раньше даты начала → todo (не начато)

  • Если сегодня в интервале между датой начала и сроком окончания → doing (в работе)

  • Если сегодня позже даты окончания / крайнего срока → done (выполнено, чтобы не накапливалось «просрочено»)

  • Если у задачи нет никаких свойств дат → сохраняется исходный статус

  • Мгновенная классификация при создании/обновлении задачи (не ограничена идемпотентностью текущего дня); полный запуск выполняется не более одного раза в день (идемпотентность last_auto_date), кнопка «Выполнить сейчас» в панели настроек принудительно запускает обработку

  • Автоматически срабатывает также при каждом запросе задач/расписания (если функция включена)


Список MCP-инструментов (16 шт., вызываются 小智 AI)

Инструмент

Действие

Типичный пример запроса

list_projects

список проектов (фильтрация по статусу)

«Какие проекты у меня есть?»

create_project

создать проект

«Создай проект »Ремонт», с ноября по декабрь, приоритет highest»

update_project

обновить проект (статус / сроки / приоритет и т. д.)

«Отметь проект X как in progress / archived»

delete_project

удалить проект (каскадно удаляет задачи)

«Удали проект X»

list_tasks

вывести задачи (фильтр по проекту / статусу)

«Какие задачи у проекта X?»

create_task

create a new task in a project

«Добавь задачу в проект X, дедлайн на завтра»

update_task

изменить задачу (статус / срок и т. д.)

«Отметь задачу X выполненной»

delete_task

delete task

«Удали задачу X»

list_todos

список плановых дел (ближние / дальние)

«Какие у меня планируемые дела?»

create_todo

создать плановое дело (без даты, с приоритетом)

«Запиши плановое дело: купить билеты на самолёт»

update_todo

обновить плановое дело (готово / сменить категорию / сын сменить приоритет)

«Вычеркни X»

delete_todo

удалить плановое дело

«Удалить X»

get_reminders

напоминания о делах / просроченное / сегодня / близкое / завершение проекта)

«Что мне напомнить?»

·get_schedule

краткое расписание: range=today/week/month (по умолчанию today)

«Что делаем сегодня?» — используйте его в первую очередь

get_schedule_summary

общий обзор расписания (сегодня / неделя / месяц + статистика)

«Какой общий прогресс?»

get_gantt_data

интервал планирования проекта (архивированные проекты отсутствуют)

«Какое время планирование у проекта 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

/health

проверка здоровья (для keep-alive от использования)

GET/POST

/api/projects

list of projects / create project

GET/PUT/DELETE

/api/projects/<id>

info / update / delete

GET/POST

/api/tasks

list of tasks (?project_id=&status=) / create task

GET/PUT/DELETE

/api/tasks/<id>

task details / update / delete

GET/POST

/api/todos

list of planned tasks (?bucket=&completed=) / create planned task

GET/PUT/DELETE

/api/todos/<id>

detail / update / delete

GET

/api/reminders?window_days=7

events / reminders

GET

/api/summary

schedule overview (contains week_start)

GET

/api/gantt

planned Gantt schedule data (processing archied projects)

GET/PUT

/api/settings

read / modify settings (auto_task_status / week_start)

POST

/api/settings/apply-auto

immediately execute one refresh of automatic task statuses

GET

/api/backup

export full backup JSON (including settings)

POST

/api/restore

restore from backup JSON

GET

/app

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 uses python 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

  1. Создайте репозиторий на GitHub (например, schedule-mcp, Private or Public — mutual compatible).

  2. Загрузите код (не 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)

  1. Open render.com → New → Web Service → connect your GitHub repo.

  2. Configure:

    • Name: см. services

    • Environment: Python 3 (or Docker; if you choose Docker, Build/Start below не org need you)

    • Build Command: pip install -r requirements.txt

    • Start Command: gunicorn -w 2 -b 0.0.0.0:${PORT:-8080} app:app --timeout 30

    • Instance Type: Free

    • (optional) Environment Variables: API_KEY=你的随机密钥 (if set, all MCP/REST requests must carry X-API-KEY)

  3. Deploy and wait for the build to finish. Получите адрес сервиса: https://schedule-mcp.onrender.com.

  4. Check: open https://schedule-mcp.onrender.com/health in 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)

  1. Open .github/workflows/keep-alive.yml, change URL in https://schedule-mcp.onrender.com/health.

  2. (Optional) If API_KEY is set, add system secret SERVICE_API_KEY in GitHub repo Settings → Secrets and variables → Actions → New repo.

  3. Push the change. Actions will ping /health every 10 minutes? The service stays active.

  4. 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

  1. 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).

  2. 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).

  3. 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).

  4. After saving, the platform automatically runs initialize + tools/list, should see 16 tools above. If tool list is empty, check if /health available and check that the end of URL accidentally doesn't have /api.

  5. 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.

Логические основания:

  1. In the reference project tarot-m», the keep-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.

  2. 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.

  3. 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.

  4. 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-календаре и недельном календаре также полностью следует этому определению недели.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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