# Lark Calendar

> 飞书日历：管理日历日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。当用户需要查看日程安排、创建/修改会议、查询/预定会议室时使用。不负责：查询过去的视频会议记录（走 lark-vc）、待办任务（走 lark-task）。

- **Type:** Skill
- **Install:** `agentstack add skill-ddpie-lark-mcp-on-agentcore-lark-calendar`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ddpie](https://agentstack.voostack.com/s/ddpie)
- **Installs:** 0
- **Category:** [Cloud & Infrastructure](https://agentstack.voostack.com/c/cloud-infrastructure)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [ddpie](https://github.com/ddpie)
- **Source:** https://github.com/ddpie/lark-mcp-on-agentcore/tree/main/docker/skills/lark-calendar

## Install

```sh
agentstack add skill-ddpie-lark-mcp-on-agentcore-lark-calendar
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# calendar (v4)

**CRITICAL — 认证由 MCP server 自动处理，无需手动配置。**

**CRITICAL — 凡涉及预约日程/会议室、调整时间或查询/搜索会议室，第一步 MUST 调用 lark_get_skill(domain="calendar", section="schedule-meeting")。仅编辑字段（改标题/描述）或增删参会人（不涉及时间和会议室）时可跳过，直接调用 lark_get_skill(domain="calendar", section="update")。**

## 身份

日程操作默认使用当前用户身份（查看和管理当前用户的日程）。bot 身份只能访问 bot 自己的（空）日历，会拿到空结果——不要用 bot 身份查用户日程。

## Shortcuts

| Shortcut | 说明 |
|----------|------|
| `lark_calendar_agenda` | 查看日程安排（默认今天） |
| `lark_calendar_meeting` | 通过日程事件 ID 获取关联的视频会议信息（meeting_id、meeting_note），日程开过视频会议才会有meeting_id |
| `lark_calendar_create` | 创建日程并邀请参会人（ISO 8601 时间） |
| `lark_calendar_update` | 更新既有日程字段，或独立增量添加/移除参会人和会议室 |
| `lark_calendar_freebusy` | 查询用户主日历的忙闲信息和 RSVP 状态（纯查询场景；预约场景走 `lark_calendar_suggestion`） |
| `lark_calendar_room_find` | 针对一个或多个**明确的**时间块查找可用会议室（无明确时间时禁止直接调用，需先走 lark_calendar_suggestion） |
| `lark_calendar_rsvp` | 回复日程（接受/拒绝/待定） |
| `lark_calendar_suggestion` | 根据非明确时间或一段时间范围，推荐多个可用时间块方案 |

### `lark_calendar_get` — 单日程详情

通过 `calendar_id` + `event_id` 获取**单个日程**详情。

```
# calendar_id 不传，默认 primary
lark_calendar_get(calendar_id="", event_id="")
```

### `lark_calendar_search_event` — 按关键词、时间范围和参会人搜索日程

仅返回基础字段（`event_id`/`summary`/`start`/`end` 等），需要详情请走 `lark_calendar_get`。

```
# query 按关键词 可选
# start/end 按时间范围（ISO 8601 或 YYYY-MM-DD）可选
# attendee_ids 按参会人（自动识别 ou_ 用户 / oc_ 群聊 / omm_ 会议室前缀）可选
# page_token 分页游标，用于继续翻页 可选
# page_size 每页数量，默认 30 可选
lark_calendar_search_event(query="周会", start="2026-04-20", end="2026-04-27", attendee_ids="ou_user1,oc_chat1,omm_room1", page_token="", page_size="30")
```

### `lark_calendar_agenda` — 查看近期日程安排

默认查询当天。结果应整理为按日期分组、按开始时间升序的易读时间线。

```
# start/end 时间范围（ISO 8601 / YYYY-MM-DD / Unix 秒），均可选；默认当天
# calendar_id 日历 ID（默认 primary）可选
lark_calendar_agenda(start="2026-03-10", end="2026-03-17", calendar_id="")
```

注意：
- 已取消的日程自动过滤；无日程时直接告知"日程清空"。
- 时间范围超过 40 天会自动拆分查询并合并结果。

### `lark_calendar_freebusy` — 查询主日历忙闲时段和 RSVP 状态

仅返回忙碌时段起止时间，不含日程标题等隐私信息；其他订阅日历不在范围内。

```
# start/end 时间范围（ISO 8601 / YYYY-MM-DD / Unix 秒），均可选；默认当天
# user_id 目标用户 open_id（ou_ 前缀）可选；默认当前登录用户
lark_calendar_freebusy(start="2026-03-11", end="2026-03-12", user_id="ou_xxx")
```

用法提示：
- **仅判断是否有空** → `lark_calendar_freebusy`；**需要日程详情** → `lark_calendar_agenda`。
- 检查多人可用性：分别调用并对比，找共同空闲。
- 预约/改约场景下，调用规则（参与人过多、含群组、来自 `lark_calendar_suggestion` 等）详见 lark_get_skill(domain="calendar", section="schedule-clear-time")（§ 查询忙闲）。

## 前置条件路由

| 场景 | 前置要求 |
|------|----------|
| 预约日程/会议、调整时间、查会议室 | 先调用 lark_get_skill(domain="calendar", section="schedule-meeting") |
| 仅编辑字段（标题/描述）或增删参会人 | 先定位 `event_id`，再调用 lark_get_skill(domain="calendar", section="update") |
| 编辑已有日程（涉及时间或会议室） | 先定位目标日程 `event_id`；若是重复性日程，必须定位到具体实例的 `event_id`（禁止使用原重复日程 ID） |
| 编辑/删除重复性日程 | 先调用 lark_get_skill(domain="calendar", section="recurring")，按操作范围（仅此次/全部/此次及后续）执行 |
| 调用任何 Shortcut | 先调用 lark_get_skill(domain="calendar", section="...") 读取其对应说明文档 |

## 写操作反馈

创建、更新、删除、RSVP 等写操作完成后，直接基于工具返回结果反馈用户；不要为了"确认是否生效"主动发起二次查询。只有用户明确要求复查，或返回信息不足以回答用户问题时，才需要再查询。

## 核心概念

- **日程实例（Instance）**：重复性日程展开后的具体时间实例。「仅此次」操作时使用具体实例的 `event_id`；「全部」或「此次及后续」操作时需对原重复性日程操作（使用原日程 `event_id`），并按需处理例外。
- **重复性日程例外（Exception）**：对重复性日程某次实例做过「仅此次」编辑后产生的独立日程（拥有独立 `event_id`）。删除/更新「全部」时必须同时处理例外，否则例外会残留。
- **全天日程（All-day Event）**：只按日期占用、没有具体起止时刻的日程，结束日期是包含在日程时间内的。
- **时间块 vs 时间范围**：时间块是具体确定的连续时间段（如 `14:00~15:00`），时间范围是泛指（如"今天下午"）。`lark_calendar_room_find` 必须基于确定时间块，不能基于模糊范围。
- **会议室（Room）**："room"不是"房间"，是"会议室"。会议室是日程的一种参与人（resource attendee），不能脱离日程单独预定。
- **日程会议 ID（Meeting ID）**：日程的历史视频会议 ID，在日程上开过视频会议才会有。

## 术语映射

用户日常说的"帮我约个日历""查一下今天的日历"，实际意图是针对**日程（Event）**的创建或查询，而非操作日历（Calendar）容器本身。自动将口语化的"日历"意图映射为"日程"操作。

## 意图路由

| 用户意图 | 路由到 |
|----------|--------|
| 查询过去的会议（"昨天的会议""上周的会"） | lark_get_skill(domain="vc")（会议数据含即时会议，仅查日程会遗漏） |
| 查询日历/日程或未来时间的会议 | 本 skill |
| 按关键词搜索日程 | 本 skill（`lark_calendar_search_event`） |
| 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill（`lark_calendar_meeting`） |
| 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先用 `lark_calendar_meeting` 取 `meeting_id`，再用 `lark_vc_detail`（lark_get_skill(domain="vc")）→ `lark_note_detail`（lark_get_skill(domain="note")） / `lark_minutes_detail`（lark_get_skill(domain="minutes")） |
| 预约/改约日程、调整时间、添加/更换会议室、查会议室 | 先判断新建 vs 编辑，再进入 lark_get_skill(domain="calendar", section="schedule-meeting") 工作流 |
| 仅编辑日程字段（标题/描述）或增删参会人（不涉及时间和会议室） | 先定位 `event_id`，再调用 lark_get_skill(domain="calendar", section="update") 执行变更 |
| 编辑/删除重复性日程（「改这个重复日程」「删掉后面的」「全部取消」等） | 先调用 lark_get_skill(domain="calendar", section="recurring")，确认操作范围后执行 |

## 任务类型分流

处理"预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间"时，必须先判断新建 vs 编辑：

- **编辑已有日程的强信号**：用户提到已存在的日程锚点（标题、时间段、`这个日程`、`这场会`）并表达修改动作（添加、移除、改到、换会议室、调整时间）。默认走编辑流，绝不能按新建处理。
- **新建日程**：用户表达新增意图（"新约一个会""创建一个日程""安排一次会议"），且没有指向既有日程的修改动作。

## 时间推断规范

- **星期的定义**：周一是一周的第一天，周日是最后一天。计算"下周一"等相对日期时，基于当前真实日期推算。
- **一天的范围**：用户提到"明天""今天"等泛指某天时，时间范围应覆盖整天，不要自行缩减。
- **历史时间约束**：不能预约已经完全过去的时间。唯一例外是"跨越当前时间"的日程（开始在过去、结束在未来）。

## 会议室规则

- 凡是"预定/查询/搜索可用会议室"，都必须进入 lark_get_skill(domain="calendar", section="schedule-meeting") 工作流处理，会议室参数规范详见 lark_get_skill(domain="calendar", section="room-find")。
- `lark_calendar_room_find` 的时间输入必须是确定时间块，不能是时间区间搜索。
- 用户仅要求"查会议室"但未提供明确时间时，必须先调用 `lark_calendar_suggestion` 获取可用时间块，再将时间块交给 `lark_calendar_room_find`。严禁猜测时间盲目调用。
- 编辑已有日程时，"添加会议室"默认是增量语义，保留已有会议室；只有用户明确说"更换会议室""移除会议室"时才删除旧会议室。

## API Resources

未被 Shortcut 覆盖的资源方法，通过 `lark_invoke` 调用 `lark_calendar__`：

```
# 查询用户主日历
lark_invoke(tool_name="lark_calendar_calendars_primary")

# 获取日程分享链接
lark_invoke(tool_name="lark_calendar_events_share_info", args={params: {"calendar_id": "", "event_id": ""}})

# 删除日程
lark_invoke(tool_name="lark_calendar_events_delete", args={params: {"calendar_id": "", "event_id": ""}})
```

> `calendar_id` 可以直接传 `primary`，代表当前调用身份的主日历 ID。

### 查询资源的方法列表以及方法的使用方式

- 列出某域下的工具：`lark_discover(category="calendar")`
- 查看方法 API 参数：`lark_discover(query="calendar..")`

`` 为 `calendars`（日历本身）/ `events`（日程）/ `event.attendees`（参与人）/ `freebusys`（忙闲）。例：`lark_discover(query="calendar.events.delete")`。

## 常用其他域命令

```
# 搜索用户，更多参数详见 lark_get_skill(domain="contact")
lark_contact_search_user(query="")

# 搜索群聊，更多参数详见 lark_get_skill(domain="im")
lark_im_chat_search(query="")
```

## 不在本 skill 范围

- 查询过去的视频会议记录 → lark_get_skill(domain="vc")
- 待办任务管理 → lark_get_skill(domain="task")
- 通讯录 → lark_get_skill(domain="contact")
- 即时通讯 → lark_get_skill(domain="im")
- 会议室物理设施管理 → 管理员后台

**注意（强制性）：**
- 涉及日期（时间）字符串与时间戳的相互转换时，务必调用系统命令或脚本代码等外部工具进行处理，以确保转换的绝对准确。违者将导致严重的逻辑错误！

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ddpie](https://github.com/ddpie)
- **Source:** [ddpie/lark-mcp-on-agentcore](https://github.com/ddpie/lark-mcp-on-agentcore)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-ddpie-lark-mcp-on-agentcore-lark-calendar
- Seller: https://agentstack.voostack.com/s/ddpie
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
