mcpField
C
cal-auto-python

cal-auto-python

本地服务
github.com/danielsousaoliveira生产力07 周前更新

关于 cal-auto-python

cal-auto-python 是 Python 命令行工具和 MCP 服务,可将 GitHub Projects 待办项结合 Google Calendar 与 Tasks 排入工作日程。创建事件和待办前可先预览计划。

主要功能

  1. 01读取 GitHub Projects 待办项
  2. 02查看日历事项和未完成任务
  3. 03按承诺和工作时间安排任务
  4. 04预览或创建日历事件与任务
  5. 05通过命令行或 MCP 使用排程功能

适用场景

  1. 01将待办项目排入每周日程
  2. 02查看日历事件和未完成待办
  3. 03同步到 Google 前预览计划
  4. 04根据排程创建事件和任务

MCP 相关

默认通过 stdio 运行,也可选择 HTTP 传输。它提供读取待办和日历数据、规划工作以及创建日历事件和任务的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"danielsousaoliveira-cal-auto-python": {
"command": "uvx",
"args": [
"cal-auto-python"
],
"env": {
"GITHUB_TOKEN": "<GITHUB_TOKEN>",
"GITHUB_PROJECT_ID": "<GITHUB_PROJECT_ID>",
"CAL_AUTO_TIMEZONE": "<CAL_AUTO_TIMEZONE>",
"CAL_AUTO_CONFIG_DIR": "<CAL_AUTO_CONFIG_DIR>",
"CAL_AUTO_WORKING_DAY_START": "<CAL_AUTO_WORKING_DAY_START>",
"CAL_AUTO_WORKING_DAY_END": "<CAL_AUTO_WORKING_DAY_END>",
"CAL_AUTO_CALENDAR_ID": "<CAL_AUTO_CALENDAR_ID>",
"CAL_AUTO_TASK_LIST_ID": "<CAL_AUTO_TASK_LIST_ID>",
"CAL_AUTO_ATTENDEES": "<CAL_AUTO_ATTENDEES>",
"CAL_AUTO_SCHEDULABLE_STATUSES": "<CAL_AUTO_SCHEDULABLE_STATUSES>",
"CAL_AUTO_COUNT_ALL_DAY_EVENTS": "<CAL_AUTO_COUNT_ALL_DAY_EVENTS>"
}
}
}
}
启动命令uvx cal-auto-python
需要配置的环境变量
GITHUB_TOKEN密钥GitHub personal access token used to query the GitHub Project.
GITHUB_PROJECT_IDGitHub Projects V2 node ID of the board to read.
CAL_AUTO_TIMEZONEIANA timezone name used to schedule events, e.g. Europe/Lisbon.
CAL_AUTO_CONFIG_DIRDirectory holding Google OAuth credentials and token. Defaults to the platform config directory.
CAL_AUTO_WORKING_DAY_STARTStart of the working day as HH:MM. Defaults to 09:00.
CAL_AUTO_WORKING_DAY_ENDEnd of the working day as HH:MM. Defaults to 17:00.
CAL_AUTO_CALENDAR_IDGoogle Calendar ID to schedule events into. Defaults to primary.
CAL_AUTO_TASK_LIST_IDGoogle Tasks list ID to create tasks in. Defaults to @default.
CAL_AUTO_ATTENDEESComma-separated email addresses to invite to scheduled events.
CAL_AUTO_SCHEDULABLE_STATUSESComma-separated GitHub Project status names to schedule. Defaults to Backlog.
CAL_AUTO_COUNT_ALL_DAY_EVENTSWhether all-day events count against free/busy slots. Defaults to false.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypical-auto-python0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Python 自动日历

mcp-name: io.github.danielsousaoliveira/cal-auto-python

PyPI Python CI License: MIT MCP Registry

一个 MCP 服务,可将你的 GitHub Projects 待办事项连接到 Google Calendar 和 Google Tasks。让你的助手连接它,就可以询问日历上有哪些安排、列出待办事项、利用空闲时间规划一周的工作,或将计划转化为实际事件和待办事项。

询问 Claude Code 本周的安排

左侧的待办事项看板会变成右侧的日程安排,每个 Markdown 复选框都会保留为独立的待办事项:

之前之后
GitHub Projects 待办事项在 Google Calendar 中安排的相同事项

安装

$ pip install cal-auto-python

这会安装 cal-auto-python 命令,它既可运行 CLI,也可运行 MCP 服务。

一次性授权

服务读取或写入你的日历之前,需要先通过 Google 账号授权一次:

$ cal-auto-python authorize

这会打开浏览器窗口,提示你登录并授予日历和任务访问权限,然后将生成的令牌保存在磁盘上(即下方配置目录中的 token.json)。首次启动服务前请执行此操作;授权过期时也需重新执行,详见故障排除。

授权需要 Google OAuth 客户端:

  1. 在 Google Cloud Console 中创建项目(或使用现有项目),并启用 Google Calendar API 和 Google Tasks API。
  2. 在 APIs & Services → Credentials 下,创建类型为 Desktop app 的 OAuth 客户端 ID,并下载生成的 JSON 文件。
  3. 将其保存为配置目录中的 credentials.json(配置目录位置及修改方法请参阅配置)。

将它连接到你的助手

默认情况下,服务通过 stdio 使用 MCP 通信,这正是这些客户端所需的方式。无论使用哪个客户端,各项功能的行为都相同。

Claude Code

运行一条命令即可注册:

$ claude mcp add auto-calendar \
    -e GITHUB_TOKEN=your_github_token_here \
    -e GITHUB_PROJECT_ID=PVT_xxxxxxxxxx \
    -e CAL_AUTO_TIMEZONE=Europe/Lisbon \
    -- cal-auto-python server

添加 -s user,即可让它在每个项目中都可用,而不只是当前项目。若要避免将令牌写入 ~/.claude.json 或显示在进程列表中,请将设置放入文件并传入该文件。请注意,路径必须是绝对路径,因为 Claude Code 会从你启动它时所在的目录运行服务:

$ claude mcp add auto-calendar -- cal-auto-python server --env-file /absolute/path/to/.env

然后,/mcp 会列出服务及其工具,提示词则会显示为 /auto-calendar:plan-week 和 /auto-calendar:whats-scheduled。使用 claude mcp list 检查注册状态,使用 claude mcp remove auto-calendar 撤销注册。

Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "auto-calendar": {
      "command": "cal-auto-python",
      "args": ["server"],
      "env": {
        "GITHUB_TOKEN": "your_github_token_here",
        "GITHUB_PROJECT_ID": "PVT_xxxxxxxxxx",
        "CAL_AUTO_TIMEZONE": "Europe/Lisbon"
      }
    }
  }
}
Cursor

添加到项目中的 .cursor/mcp.json(或全局文件 ~/.cursor/mcp.json):

{
  "mcpServers": {
    "auto-calendar": {
      "command": "cal-auto-python",
      "args": ["server"],
      "env": {
        "GITHUB_TOKEN": "your_github_token_here",
        "GITHUB_PROJECT_ID": "PVT_xxxxxxxxxx",
        "CAL_AUTO_TIMEZONE": "Europe/Lisbon"
      }
    }
  }
}
通用(任何支持 stdio 的 MCP 客户端)
{
  "command": "cal-auto-python",
  "args": ["server"],
  "env": {
    "GITHUB_TOKEN": "your_github_token_here",
    "GITHUB_PROJECT_ID": "PVT_xxxxxxxxxx",
    "CAL_AUTO_TIMEZONE": "Europe/Lisbon"
  }
}

无需客户端即可试用该服务:将 MCP Inspector 指向它:

$ npx @modelcontextprotocol/inspector cal-auto-python server

在 MCP Inspector 中预览 sync_backlog 计划

基于 Web 的客户端,或想在一台机器上运行服务、再从另一台机器与其通信的用户,无法启动 stdio 子进程。对他们来说,请改用 HTTP 运行服务:

$ cal-auto-python server --transport http --host 127.0.0.1 --port 8000

HTTP 模式为单用户模式,仅供本地使用。 服务会从磁盘读取一个人的 Google 授权信息,并且没有独立用户的概念;除了 HTTP 端点本身,它不提供任何额外授权机制。在共享或公共网络上公开该服务,会让所有能够访问它的人都能访问这一个日历,因此只能将其绑定到 127.0.0.1 或私有、可信的网络。

前置条件

  • 一个 GitHub 个人访问令牌,对你要用于排程的 Projects V2 看板具有读取权限:可以使用具有 read:project 范围的经典令牌(如果看板会追踪私有仓库中的项目,还需添加 repo),也可以使用已授予 Projects 读取权限的细粒度令牌。将其设为 GITHUB_TOKEN。
  • 看板的 Projects V2 节点 ID,例如 PVT_xxxxxxxxxx。可通过查询 GitHub GraphQL API 获取项目的 ID,也可根据项目 URL 和 Projects API 文档查找。 将其设为 GITHUB_PROJECT_ID。
  • 一个 Google OAuth 客户端(Desktop app 类型),如上文一次性授权所述。

功能

工具参数功能说明
status—报告已配置的集成,以及是否已完成 Google 授权。不泄露任何密钥。
list_calendar_entriesstart、end(YYYY-MM-DD,含起止日期)列出日期范围内的日历活动和全天事项。
list_todos—列出已配置的 Google Tasks 列表中尚未完成的事项。
list_tracker_itemsstatuses(可选列表,例如 ["Backlog", "In Progress"])列出 GitHub Projects 看板中的工作项,可按状态筛选。省略则列出所有项。
plan_weekitems、start_date、end_date、working_day_start、working_day_end、timezone(可选)、commitments(可选)根据给定事项和现有安排,将工作安排到空闲的工作时段。仅执行计算,不会访问任何已配置的账号。
sync_backlogstart_date、end_date、apply(默认值为 false)获取可安排的待办事项,在现有日历安排中穿插安排,并返回结果。默认仅预览;传入 apply=true 即可创建活动和待办事项。跳过已安排的事项。
create_calendar_entrysummary、start、end、timezone、description(可选)、attendees(可选)创建一项日历活动。不会安排活动,也不会去重。
create_todotitle、note(可选)、due(可选)创建一项 Google Task。不会去重。

两个提示词封装了常见工作流,因此在支持它们的客户端中会显示为一键启动项(例如 Claude Code 和 Claude Desktop 中的斜杠命令)。两者均可选填 start_date 和 end_date(YYYY-MM-DD),默认范围为接下来的 7 天。

提示词功能说明
plan-week读取待办事项和现有安排,预览日程,并在写入任何内容前等待你的确认。
whats-scheduled按天汇总日历活动和未完成的待办事项,并标出安排过满的日期以及没有日历时段的待办事项。

Claude Code 中以斜杠命令形式提供的提示词

CLI 可直接使用相同的日程安排逻辑:

$ cal-auto-python sync --start 2026-08-17 --end 2026-08-21 --apply

sync 默认仅预览;传入 --apply 可创建活动和任务。也可传入 --start/--end(YYYY-MM-DD)或 --working-day-start/--working-day-end(HH:MM),以覆盖默认日期范围(今天加接下来的 2 天)和工作时间。

cal-auto-python sync 规划并创建活动

配置

除 GITHUB_TOKEN、GITHUB_PROJECT_ID 和没有默认值、必须设置的 CAL_AUTO_TIMEZONE 外,以下变量均为可选项。

配置从进程环境中读取。MCP 客户端会在服务器配置的 env 块中传入这些变量。使用 CLI 时,你可以导出这些变量,也可以将 .env.example 复制为 .env,并显式指定命令使用该文件:

$ cal-auto-python sync --env-file .env

--env-file 会加载指定文件(仅在传入该参数时加载——不会自动从工作目录读取任何文件)。只会应用 CAL_AUTO_* 和 GITHUB_* 键;文件中的其他内容都会被忽略,并显示警告。环境中已设置的变量优先于文件中的变量。

变量默认值用途
GITHUB_TOKEN(必填)用于查询 Projects 看板的 GitHub 令牌。
GITHUB_PROJECT_ID(必填)要读取的看板的 GitHub Projects V2 节点 ID。
CAL_AUTO_TIMEZONE(必填)用于安排事件的 IANA 时区名称,例如 Europe/Lisbon。
CAL_AUTO_CONFIG_DIR%APPDATA%\cal-auto-python (Windows)、$XDG_CONFIG_HOME/cal-auto-python 或 ~/.config/cal-auto-python存放 credentials.json 和 token.json 的目录。
CAL_AUTO_WORKING_DAY_START09:00工作日开始时间,格式为 HH:MM。
CAL_AUTO_WORKING_DAY_END17:00工作日结束时间,格式为 HH:MM。
CAL_AUTO_CALENDAR_IDprimary要向其中安排事件的 Google Calendar ID。
CAL_AUTO_TASK_LIST_ID@default要在其中创建任务的 Google Tasks 列表 ID。
CAL_AUTO_ATTENDEES(无)以逗号分隔的电子邮件地址,将受邀参加已安排的事件。
CAL_AUTO_SCHEDULABLE_STATUSESBacklog以逗号分隔的 GitHub Project 状态名称。必须与看板上的状态名称完全一致。
CAL_AUTO_COUNT_ALL_DAY_EVENTSfalse全天事件是否计入空闲/忙碌时段。

故障排除

授权错误 / “Google 账号尚未获授权”
再次运行 cal-auto-python authorize。这也可以修复无法自动刷新的过期授权(Google 会在长期未活动或你在 Google 账号设置中撤销访问权限后撤销刷新令牌)——服务器会明确报告此问题,而不是静默失败。

事件显示的时间不符合预期
检查 CAL_AUTO_TIMEZONE。它必须是有效的 IANA 名称(例如 Europe/Lisbon,不能是 CET 或 UTC 偏移量),并且必须与你实际工作的时区一致——调度器使用此值安排事件,而不是使用系统时区。

看板上明明有卡片,但 list_tracker_items 或 sync_backlog 没有返回任何内容
CAL_AUTO_SCHEDULABLE_STATUSES(默认值为 Backlog)必须与看板的状态列名称完全一致,包括大小写。打开看板并逐字复制状态名称,或者向 list_tracker_items 传入显式的 statuses 参数,以确认看板实际报告的内容。

路线图

[x] 从 github 获取项目数据
[x] 将事件和任务添加到 google calendar
[x] 根据优先级安排
[x] 修复重复的事件和任务
[x] 将硬编码的入口点替换为真正的 CLI
[x] 作为 MCP 服务运行(cal-auto-python server)
[x] 优化事件分配
[x] 在计划变更时更新或移动事件

贡献

想要添加其他任务跟踪器或日历后端?请参阅 docs/ARCHITECTURE.md 了解各层结构和操作说明,并参阅 CONTRIBUTING.md 了解如何运行测试、代码检查工具和类型检查器。

参考资料

Google Calendar API
Github Projects API

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。