mcpField
C
calendar

calendar

本地服务
mcp.zovo.one生产力21 天前更新

关于 calendar

面向跨时区协作的本地优先 MCP 服务,可转换时间、安排跨国会议并生成日历邀请。它还支持夏令时查询、工作日计算和联系人保存。

主要功能

  1. 01转换不同地区的时间
  2. 02按公平度排列会议时段
  3. 03查询重叠时段和夏令时
  4. 04计算工作日
  5. 05生成 .ics 邀请
  6. 06保存联系人及工作时间

适用场景

  1. 01为跨国团队寻找工作时间内的会议时段
  2. 02查询当地时间和时钟变更
  3. 03生成 .ics 日历邀请

MCP 相关

向 MCP 客户端提供时间、会议、日历文件和联系人相关工具,并提供联系人资源与排期提示词。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbtimezone.mcpb0.22.5

工具

还没有获取到工具列表

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

详细介绍

mcp-timezone

与其他国家的客户协作时,无需在脑中计算时区。询问“里斯本的 Maria 现在几点了”“将华沙时间下午 3 点换算成纽约和班加罗尔时间”,或“帮我找出下周一个适合我、纽约客户和伦敦设计师的时段”,即可获得可直接使用的答案:为所有人都处于各自工作时间内的会议时段排序、准确的每日重叠时段、时钟变更时间、交付日期前的工作日数,以及可发送的日历文件。已保存的联系人、工作时间及其他所有数据都以纯 JSON 格式保存在你自己的设备上。

由 theluckystrike 构建。

已收录于 官方 MCP Registry(io.github.theluckystrike/timezone-world-clock-meeting-slots-overlap-ics)。

时区演示

为身处海外的所有人寻找合适的会议时间,在城市之间转换任意时间,并生成邀请函;无需设置,所有操作都在本地完成。

60 秒安装

@theluckystrike/mcp-timezone 尚待发布到 npm。在此之前,可使用 .mcpb 一键安装包,或克隆并构建;以下两种方式均已验证。

一键安装(.mcpb):从最新版本中下载 timezone.mcpb,然后在 Claude Desktop 中双击: https://github.com/theluckystrike/mcp-servers/releases/latest

(claude_desktop_config.json):

{
  "mcpServers": {
    "timezone": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-timezone"]
    }
  }
}

Claude Code:

claude mcp add timezone -- npx -y @theluckystrike/mcp-timezone

(.cursor/mcp.json):

{
  "mcpServers": {
    "timezone": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-timezone"]
    }
  }
}

上述 npx 命令会在软件包发布后立即生效。在此之前,请使用上面的 .mcpb 安装包,或严格运行以下三条命令从源代码构建:

git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/timezone

然后将客户端的 command 指向 node,并传入一个参数:servers/timezone/dist/index.js 的绝对路径。

要以 Pro 模式运行,请在同一个配置块中设置 MCP_LICENSE_KEY,或使用你的密钥调用一次 license_activate。

工具

工具功能
now获取任意地点列表中的当前时间,以及时区缩写和 UTC 偏移量。不带参数时:显示本机时区和 UTC 时间。
convert_time将一个地点的时间转换为任意数量其他地点的时间。将 "2026-09-10 15:00"、ISO 时间戳或 "3pm tomorrow" 作为 from_zone 中的当地时钟时间读取;末尾的 Z 或明确指定的偏移量优先于 from_zone。标明结果是次日还是前一日,并说明在夏令时重叠(gap、fold)时采用了哪一次。
find_meeting_slots按排名列出所有参与者都在各自工作时间内的时段,间隔为 30 分钟,并跳过周末。按公平性排序(见下文)。
overlap计算所有列出地点都处于工作时间内的每日时段,显示 UTC 时间和各地当地时间;基于真实日期计算,确保夏令时周的结果准确。
dst_changes列出某地点一年中的每次时钟变更:准确的 UTC 时刻、变更前后的偏移量,以及变更前后的当地时间。
business_days计算某地点两个日期之间的工作日数,不包括周末和你提供的节假日。日期必须严格有效:2026-02-30 会被拒绝,不会自动顺延。
ics_create为一场会议创建 .ics 日历文件并返回路径。有邮箱的参会者会收到邀请;没有邮箱的姓名会列在描述中。organizer_email 会写入 ORGANIZER 行。
contacts_set保存客户或队友的时区和工作时间。
contacts_list列出所有已保存的联系人、他们当前的当地时间,以及他们是否处于工作时间内。
license_status显示 Free 或 Pro 状态及升级方式。
license_activate激活 Pro 密钥(离线验证)。

此外还提供资源 tz://contacts(已保存联系人及其当前当地时间)和提示词 schedule_with(为已保存的联系人推荐时间,然后提供创建邀请函的选项)。

你可以这样说

无需指定工具名称。

你说工具
“现在华沙、纽约和班加罗尔分别是几点?”now
“将 9 月 10 日华沙时间下午 3 点转换为纽约和印度时间。”convert_time
“下周帮我在华沙、纽约的客户端和伦敦的设计师之间找一个小时的时间。”find_meeting_slots
“华沙和纽约什么时候都在工作时间内?”overlap
“我们 3 月的电话会议之前,华沙会调整时钟吗?”dst_changes
“9 月 1 日到 30 日之间有多少个工作日,不包括 15 日?”business_days
“帮我为华沙时间周四下午 3 点创建一个 45 分钟的 .ics,并邀请 [email protected]。”ics_create
“记住 Maria 在里斯本,工作时间是 10 点到 6 点。”contacts_set
“现在谁醒着?”contacts_list

示例

You: Find an hour next week for me in Warsaw, my client in New York and my designer in London.

  find_meeting_slots { participants: [{name:"Me",zone:"Warsaw"},{name:"Client",zone:"New York"},
                                     {name:"Designer",zone:"London"}], duration_minutes: 60, days: 5 }

Assistant: 15 slots fit all 3 participants. Best first:
  1. 2026-09-07T13:30:00.000Z  fairness 3.00h
     Me 15:30-16:30 | Client 09:30-10:30 | Designer 14:30-15:30

公平性评分为 3 小时并非排名中的缺陷,而是华沙和纽约之间的实际情况:如果两地的工作时间都是 09:00-17:00,共同时段就只有华沙时间 15:00-17:00,因此总有人要在远离自己一天中段的时间开会。评分如实呈现这一点,而不是将其隐藏。延长某人的工作时间,评分就会改善。

You: Write the invite for that one, 45 minutes, and send it to [email protected].

  ics_create { title:"Kickoff with Acme", start:"2026-09-10 15:00", zone:"Warsaw",
               duration_minutes:45, attendees:[{name:"Maria Nowak", email:"[email protected]"}],
               organizer_email:"[email protected]" }

Assistant: Wrote /Users/you/.local/share/mcp-servers/timezone/meeting.ics
Kickoff with Acme: 2026-09-10 15:00 Thu (CEST, UTC+02:00) for 45 min
DTSTART 2026-09-10T13:00:00.000Z (UTC)

排名方式

find_meeting_slots 会根据每位参与者距离当地时间 13:00 的差值(以小时计),为每个候选时段评分,并按升序排列。评分依据的是最不方便的那位参与者,而非平均值,这是有意为之:一个对两人来说很合适、却要让第三人早上 07:00 参加的时段,绝不能排在一个对所有人来说都是 10:00 的时段之前。公平性评分为 0,意味着会议对所有人来说都在正午时分;低于约 2 则比较舒适。

只有当整个会议从开始到结束都处于每位参与者各自本地日历日的工作时间内时,才会提供该时段。系统会跳过第一位参与者所在时区的周末。提供 earliest_date 后,时段不会早于该日期;如果还提供了时间,则不会推荐当天早于该时间的时段。

如果没有合适的时段,服务会说明情况、显示各时区的时间窗口,然后列出最接近的时段,并按总计超出工作时间的分钟数排序,同时显示每个人的当地时间,以及让该时段适合每个人所需的工作时间。免费套餐下,超过 5 天的搜索会缩短为 5 天,答复会说明这一点;系统绝不会直接拒绝请求。

地点解析方式

城市和国家/地区名称通过内置的 490 条目表解析(包含 300 多个城市、所有常用国家/地区名称和美国州缩写)。启动时,每个条目都会通过 Intl.supportedValuesOf("timeZone") 验证;如果当前 Node 构建无法解析某个条目,就会将其丢弃,并在 stderr 中输出一行提示,而不是悄悄返回错误的时区。

  • 跨越多个时区的国家/地区会映射到其主要商务时区:美国 -> America/New_York,澳大利亚 -> Australia/Sydney,加拿大 -> America/Toronto,巴西 -> America/Sao_Paulo,俄罗斯 -> Europe/Moscow,墨西哥 -> America/Mexico_City,印度尼西亚 -> Asia/Jakarta。需要其他时区时,请指定城市。
  • IANA ID 始终有效,且优先级最高:传入 America/Denver,就会得到该时区。
  • UTC+2 这类偏移量会解析为相应的固定时区(Etc 符号在 IANA 数据库中是反向的,而不是由此服务反转)。
  • 固定缩写表示偏移量,而不是地点。 EST 是 Etc/GMT+5(UTC-05:00),全年不变;PST 是 Etc/GMT+8,CET 是 Etc/GMT-1,JST 是 Etc/GMT-9。如果将它们映射到遵循夏令时的时区,EST 就会在每年夏天表示 EDT(UTC-04:00),半年时间都会差一小时。每个回答都会附带提示,指出应改为传入哪个地点("New York"、"Los Angeles"、"Paris")。地区缩写 ET、CT、MT、PT 仍表示地点,并会随季节调整时钟。IST 会被视为印度时间(UTC+05:30,Asia/Kolkata,不实行夏令时),提示也会说明这一点,因为 IST 也可以表示爱尔兰和以色列时间。
  • 对于未知名称,绝不会猜测。系统会返回错误并提供建议: unknown time zone or place: "Warsawa". Did you mean: warsaw (Europe/Warsaw)?

这里完全不存储夏令时信息。所有偏移量都来自 Node 构建内的 ICU 数据,通过 Intl.DateTimeFormat 获取,因此随着 Node 更新,规则也会保持最新,不会像打包在表中的数据那样过时。

免费版与 Pro 版

免费版Pro 版
now、convert_time、overlap、dst_changes、business_days不限量不限量
find_meeting_slots 参与者最多 3 人不限量
find_meeting_slots 搜索时段最多 5 天(更长的请求会缩短,而不是拒绝)不限量
循环时段搜索(recurring: true)--支持
已保存的联系人5 个不限量
.ics 文件每月 3 个不限量

Pro 版售价为一次性支付 $19,或购买套装中每个服务 $39:获取 Pro 版。 激活过程离线完成:密钥是 Ed25519 签名,由编译进软件包的公钥进行验证。

数据存储方式

联系人和每月 .ics 计数器存储在同一个 JSON 文件中: ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/timezone/data.json。

每次写入都会在 .../timezone/.lock 的咨询锁保护下进行;整个加载、修改、保存周期都持有该锁,因此,共用一个数据目录的两个客户端不会互相丢弃对方的联系人。保存时会写入临时文件,再将其重命名到目标位置,因此即使写入过程中崩溃,留下的也只会是旧文件或新文件。

如果 data.json 无法读取或不是有效的 JSON,服务不会将其视为“尚无联系人”。它会逐字节将文件移至一旁,命名为 data.json.corrupt-<timestamp>,写入 data.json.corrupt 标记;此后每次调用都会失败,并返回 data file is corrupt; moved to ...; nothing was written,直到你恢复有效副本并删除该标记。

日期、时间与坦诚说明

  • 没有偏移量的时间是 from_zone 中的墙上时间,不是 UTC。2026-09-10 15:00 搭配 from_zone: "Warsaw" 表示华沙时间 15:00。末尾的 Z 或显式的 +05:30 会被原样采用,此时 from_zone 仅用于显示。
  • 日历日期会经过验证,不会被规范化。 无论在哪里读取日期,2026-02-30 都会被拒绝并说明原因(2026 年 2 月 有 28 天):convert_time、overlap、business_days、ics_create 和节假日列表。日期绝不会被顺延到 3 月。
  • 春季跳时缺口内的墙上时间不存在,因此会被拒绝。 华沙 2026-03-29 的 02:30 会返回错误,并列出两个有效的相邻时间(2026-03-29 01:30 和 2026-03-29 03:30)。 传入 gap:"forward" 可取跳时后的时间,传入 gap:"backward" 可取跳时前的时间;回答会说明采用了哪一个。默默猜测,正是会议每年有一次会偏移一小时的原因。
  • 秋季回拨时段中的模糊时间会返回第一次出现的时间,并明确说明:华沙 2026-10-25 的 02:30 对应 00:30Z,即 CEST 时间。传入 fold:"second" 可取 01:30Z,即 CET 时间。两种回答都会注明所用的缩写和偏移量。
  • .ics 参与者是日历地址。 有电子邮件地址的参与者会写成 ATTENDEE;CN="Name";RSVP=TRUE:mailto:addr,其中 CN 会以带引号的 RFC 5545 参数值形式书写。没有电子邮件地址的姓名会列在 DESCRIPTION 中,而不会被写成无法路由的地址。任何字段中出现 CR、LF 或控制字符都会被拒绝,而不是转义后继续使用:这正是内容行注入的表现。organizer_email 会写入 ORGANIZER 行;未提供时不会写入 ORGANIZER,回答也会说明这一点,因为届时回复将无处发送。
  • .ics 文件使用 UTC 时间(DTSTART:20260910T130000Z),且不包含 VTIMEZONE 块。这是有意为之:手写但 DST 规则过时的 VTIMEZONE,是邀请时间偏差一小时的经典原因。
  • 本服务唯一了解的日历是工作时间。 它不了解你现有的会议、公共假日(请自行传给 business_days)或任何人的午餐时间。如果未传入节假日列表,business_days 会在自己的回答中说明这一点,避免把“22 个工作日”误认为已扣除公共假日的天数。
  • 参数大小设有上限,防止失控的调用方让单次调用挂起或返回巨量内容: 地点和日期字符串为 100 个字符,活动标题为 200 个字符,描述为 5000 个字符,最多 50 个时区、 100 位参与者、100 位与会者、400 个节假日;days <= 366,duration_minutes <= 1440,且 business_days 的范围最多为 3700 天(更长的范围会被拒绝,绝不会静默截断)。
  • out_path 会写入你指定的位置。 ics_create 会根据进程工作目录解析相对路径,不会将路径限制在数据目录内;如果路径不可写,会返回明确的 EACCES,且不扣除每月免费额度。
  • 跳过周末时使用第一位参与者所在的时区,并采用星期六/星期日作为周末。系统不支持周五至周六的周末安排;请设置 work_start/work_end 或读取日期。

故障排除

  • npx 挂起或找不到包:npm 发布尚未完成。请使用上文的 .mcpb 捆绑包或克隆并构建的方式。
  • 无法识别城市:错误信息会列出建议。任何 IANA ID 都始终可用,因此即使表格中没有城市名称,也可以使用 America/Argentina/Cordoba。
  • Node 版本:需要 Node >= 18。使用 node -v 检查。较旧的构建版本包含较旧的 DST 规则。
  • 没有显示内容/静默失败:本服务只向 stderr 写入内容,从不写入 stdout。在 Claude Desktop 中,查看 Settings -> Developer -> 服务日志;在 Claude Code 中,使用 --mcp-debug 运行。
  • 无法识别 Pro 密钥:运行 license_status,并确认 MCP_LICENSE_KEY 已设置在客户端启动的进程中,而不只是你的 shell 环境中。

隐私

所有数据都保留在本地:联系人存储在 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/timezone/data.json。 服务不会发起网络请求、不会收集遥测数据,也不需要账户。时区数据来自 Node 内置的 ICU 数据库。

配套工具

  • mcp-time-tracker,跟踪你在这些客户身上花费的时间并生成报告。
  • mcp-invoice,将跟踪的时间转换为给海外客户的编号 PDF 发票。
  • office-suite,一次安装即可运行多个服务,只需一个配置项。

常见问题

是的,而且它不会存储任何自己的夏令时规则。每个时差都根据你的 Node 构建中的 ICU 数据读取,因此,华沙和纽约在 2026 年 3 月 8 日至 29 日期间相差 5 小时(而不是 6 小时)也能正确处理。

因为实际的重叠时段可能长达两小时。公平性评分会显示离每个人正午时刻最远的距离,让你了解代价并决定由谁承担。

可以。印度(+05:30)、尼泊尔(+05:45)、阿德莱德(+09:30)和查塔姆与其他时区一样都能处理;时段网格间隔为 30 分钟,因此,半小时时区会生成当地时间 :00 和 :30 开始的时段。

不可以。它只知道你提供的工作时间。它会写入 .ics 文件,但绝不会读取或连接日历服务。

不会。它完全不会进行网络调用,包括许可证激活。

许可证

MIT

整个套件共用一份企业资料

你的身份信息只存储一次,路径为 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json, 套件中的每个服务都会读取它:发票开具方、docx 信头、定期发票开具方、expense-tracker 的默认增值税税率、time-tracker 和 timezone 的所在地时区,以及简历和合同信头。只需用 business_set(invoice 或 docx)设置一次——其他地方无需重复设置。电子邮件地址只会从这份资料或明确提供的参数中获取;如果没有存储邮箱,文档会显示 [add: email],工具也会明确提示,而不是让任何人随意填写地址。

将这些文档用作 MCP 服务

任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档,无需安装:

评论

支持 Markdown

第一次接触 MCP?

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

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