mcpField
I
ics-generator

ics-generator

github.com/johnlarkin1生产力2143 次安装13 周前更新
代码仓库

关于 ics-generator

ics-generator 可将自然语言事件描述转换为符合 iCalendar RFC 5545 的 `.ics` 日历文件,适合需要创建单次或重复日程的人使用,并提供时区、提醒和格式处理规则。

主要功能

  1. 01解析自然语言事件信息
  2. 02生成 RFC 5545 日历文件
  3. 03处理重复事件与排除日期
  4. 04添加提醒和事件属性
  5. 05应用时区及格式规则

适用场景

  1. 01根据会议描述创建日历文件
  2. 02安排带排除日期的重复日程
  3. 03制作全天或多日活动条目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/johnlarkin1/claude-code-extensions --skill ics-generator

安装后在 Claude Code 中输入/ics-generator确认已加载。

附带文件references/ics-format.md

详细介绍

ICS 日历文件生成器

根据自然语言事件描述生成有效的 .ics(iCalendar RFC 5545)文件。生成的文件可直接在 Apple Calendar 中打开。

快速开始

最简有效的单事件文件:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
SUMMARY:Team Meeting
UID:[email protected]
DTSTAMP:20250115T120000Z
END:VEVENT
END:VCALENDAR

工作流

  1. 解析用户的自然语言描述,提取:标题、日期/时间、时长、地点、重复规则、参与者、提醒
  2. 解析日期指代,例如相对于当前日期的“下周二”“本周五下午 3 点”
  3. 默认时区设为 America/New_York,除非用户另有指定
  4. 为 UID 字段生成 UUID v4:<uuid4>@claude.ai
  5. 将 DTSTAMP 设为当前 UTC 时间戳
  6. 构建 VEVENT 块,包含所有适用属性
  7. 为提醒添加 VALARM(若未指定,默认提前 15 分钟)
  8. 为重复事件添加 RRULE
  9. 使用标准头信息封装为 VCALENDAR
  10. 将 .ics 文件写入当前工作目录,并使用 open <filename>.ics 打开文件

默认值

  • 时区:America/New_York(美国东部时间)——除非事件显然位于其他时区,否则不要询问用户时区
  • 自动打开:写入文件后始终运行 open <filename>.ics
  • 保存位置:当前工作目录
  • 时长:若未指定,则为 1 小时
  • 提醒:若未指定,则提前 15 分钟
  • 文件名:根据事件摘要使用 kebab-case,例如 team-meeting.ics

VCALENDAR 封装

每个 .ics 文件都以以下内容开头和结尾:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
<VTIMEZONE blocks>
<VEVENT blocks>
END:VCALENDAR

日期/时间格式

定时事件(含时区)
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
全天事件(仅 DATE,不含时间部分)
DTSTART;VALUE=DATE:20250115
DTEND;VALUE=DATE:20250116

注意:全天事件的 DTEND 为排他性日期——1 月 15 日的单日全天事件使用 1 月 16 日作为 DTEND。

UTC 时间
DTSTART:20250115T190000Z

事件属性

必需
属性描述示例
DTSTART开始日期/时间DTSTART;TZID=America/New_York:20250115T140000
DTEND 或 DURATION结束时间或时长DTEND;TZID=America/New_York:20250115T150000 或 DURATION:PT1H
SUMMARY事件标题SUMMARY:Team Standup
UID唯一标识符UID:[email protected]
DTSTAMP创建时间戳(UTC)DTSTAMP:20250115T120000Z
可选
属性描述示例
DESCRIPTION事件详情/备注DESCRIPTION:Discuss Q1 roadmap
LOCATION事件地点LOCATION:Conference Room A
URL相关链接URL:https://meet.google.com/abc-defg-hij
ORGANIZER事件组织者ORGANIZER;CN=John:mailto:[email protected]
ATTENDEE受邀者ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Jane:mailto:[email protected]
STATUS事件状态STATUS:CONFIRMED(或 TENTATIVE、CANCELLED)
TRANSP时间透明度TRANSP:OPAQUE(忙碌)或 TRANSP:TRANSPARENT(空闲)
CATEGORIES事件类别CATEGORIES:MEETING,WORK
PRIORITY优先级(0-9)PRIORITY:1(1=最高,9=最低,0=未定义)
DURATION 格式
DURATION:PT1H          → 1 hour
DURATION:PT30M         → 30 minutes
DURATION:PT1H30M       → 1 hour 30 minutes
DURATION:P1D           → 1 day
DURATION:P1W           → 1 week

文本转义

对文本属性值中的以下字符进行转义:

  • 反斜杠:\\
  • 分号:\;
  • 逗号:\,
  • 换行符:\n

示例:

DESCRIPTION:Agenda:\n1. Review\n2. Planning\nLocation: Room 4\, Building A

提醒(VALARM)

在 VEVENT 块内添加:

BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
常见触发时长
自然语言TRIGGER 值
事件开始时TRIGGER:PT0S
提前 5 分钟TRIGGER:-PT5M
提前 10 分钟TRIGGER:-PT10M
提前 15 分钟TRIGGER:-PT15M
提前 30 分钟TRIGGER:-PT30M
提前 1 小时TRIGGER:-PT1H
提前 2 小时TRIGGER:-PT2H
提前 1 天TRIGGER:-P1D
提前 1 周TRIGGER:-P1W

重复事件(RRULE)

在 VEVENT 中添加 RRULE 属性:

RRULE:FREQ=WEEKLY;BYDAY=TU,TH;COUNT=10
常见模式
模式RRULE
每天RRULE:FREQ=DAILY
每个工作日RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
每周RRULE:FREQ=WEEKLY
每 2 周RRULE:FREQ=WEEKLY;INTERVAL=2
每月(同一日期)RRULE:FREQ=MONTHLY
每月(例如,每月第 2 个星期二)RRULE:FREQ=MONTHLY;BYDAY=2TU
每年RRULE:FREQ=YEARLY
每周,直到某个日期RRULE:FREQ=WEEKLY;UNTIL=20250630T235959Z
每周,重复 10 次RRULE:FREQ=WEEKLY;COUNT=10
排除日期(EXDATE)
EXDATE;TZID=America/New_York:20250219T140000
EXDATE;TZID=America/New_York:20250226T140000

时区处理

默认值:America/New_York

使用东部时间时,请始终包含此 VTIMEZONE 区块:

BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
常见时区名称映射
用户说TZID
Eastern、ET、EST、EDTAmerica/New_York
Central、CT、CST、CDTAmerica/Chicago
Mountain、MT、MST、MDTAmerica/Denver
Pacific、PT、PST、PDTAmerica/Los_Angeles
ArizonaAmerica/Phoenix
Hawaii、HSTPacific/Honolulu
London、GMT、BSTEurope/London
Paris、CET、CESTEurope/Paris
Tokyo、JSTAsia/Tokyo

有关所有常见时区的完整 VTIMEZONE 定义,请参阅 references/ics-format.md。

行折叠

超过 75 个八位字节的行 MUST 通过插入 CRLF 后跟一个空白字符(空格或制表符)进行折叠。实际使用时,请尽可能将属性行控制在 75 个字符以内。

DESCRIPTION:This is a very long description that would exceed the seventy-f
 ive octet limit so it is folded onto the next line with a leading space.

关键注意事项

  1. 换行符:整个文件使用 CRLF(\r\n)换行符
  2. DTEND 为排他性:1 月 15 日的全天事件需要使用 DTEND;VALUE=DATE:20250116
  3. UID 必须全局唯一:为每个事件生成全新的 UUID v4
  4. DTSTAMP 为必需项:始终设为当前 UTC 时间
  5. VTIMEZONE 必须位于 VEVENT 之前:在文件中将时区定义放在事件之前
  6. 末尾不得有空白字符:行末不能有空格或制表符
  7. 属性名称不区分大小写,但惯例上使用大写
  8. 空行:组件内的属性之间不得有空行
  9. RRULE 中的 UNTIL 必须为 UTC:UNTIL=20250630T235959Z(带 Z 后缀)
  10. 多值属性:使用逗号分隔:EXDATE;TZID=America/New_York:20250219T140000,20250226T140000

完整示例

简单会议
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
SUMMARY:Team Standup
DESCRIPTION:Weekly sync to review progress and blockers
LOCATION:Conference Room B
UID:[email protected]
DTSTAMP:20250115T120000Z
STATUS:CONFIRMED
TRANSP:OPAQUE
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
全天事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20250220
DTEND;VALUE=DATE:20250221
SUMMARY:Company Holiday
UID:[email protected]
DTSTAMP:20250115T120000Z
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
多日事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20250310
DTEND;VALUE=DATE:20250313
SUMMARY:Team Offsite
DESCRIPTION:Annual team offsite in Austin
LOCATION:Austin\, TX
UID:[email protected]
DTSTAMP:20250115T120000Z
END:VEVENT
END:VCALENDAR
带例外日期的每周重复会议
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250107T100000
DTEND;TZID=America/New_York:20250107T103000
SUMMARY:1:1 with Manager
RRULE:FREQ=WEEKLY;BYDAY=TU;UNTIL=20250701T035959Z
EXDATE;TZID=America/New_York:20250218T100000
EXDATE;TZID=America/New_York:20250527T100000
UID:[email protected]
DTSTAMP:20250115T120000Z
STATUS:CONFIRMED
BEGIN:VALARM
TRIGGER:-PT10M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
单个文件中的多个事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250120T090000
DTEND;TZID=America/New_York:20250120T091500
SUMMARY:Morning Standup
UID:[email protected]
DTSTAMP:20250115T120000Z
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250120T140000
DTEND;TZID=America/New_York:20250120T150000
SUMMARY:Design Review
LOCATION:Zoom
UID:[email protected]
DTSTAMP:20250115T120000Z
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

参考

有关完整的属性表、完整的 RRULE 语法、所有时区定义和验证清单,请参阅 references/ics-format.md。

评论

支持 Markdown