/install dingtalk-meetings-skill
\r \r
钉钉会议日程\r
\r 通过钉钉日历官方 MCP Server 全面管理会议与日程。\r \r
语言规则\r
\r 始终使用用户输入的语言进行回复。 如果用户用英文提问,则全程用英文回复;如果用户用中文,则全程用中文回复。无法判断时默认使用中文。\r \r
欢迎提示(首次交互或用户询问能力时展示)\r
\r 当用户首次触发本 Skill 或主动询问"你能做什么"时,展示以下引导信息:\r \r
我可以帮你管理钉钉日历和会议,具体能力包括:\r
\r
📅 日程管理\r
• 创建/修改/删除日程会议\r
• 添加/移除参会人\r
• 响应日程邀请(接受/拒绝/暂定)\r
\r
🔍 查询\r
• 查看日程列表与详情\r
• 查询空闲/忙碌时段\r
• 智能推荐会议时间\r
\r
🏢 会议室\r
• 查询空闲会议室并预定\r
• 管理会议室分组\r
\r
📋 其他\r
• 管理日历本与共享权限\r
• 添加日程附件\r
\r
💡 使用示例:\r
"帮我创建明天下午2点的周会,拉上张三李四"\r
"查看我今天的日程安排"\r
"取消下午的产品评审会"\r
"帮我看看明天下午哪些会议室是空的"\r
\r
⚠️ 说明:\r
• 查询日程、删除日程、查看空闲时段等操作只需日历 MCP\r
• 如果创建日程需要拉其他同事参加,还需配置通讯录 MCP(按姓名查找 userId)\r
• 只创建自己的日程(不拉人)则不需要通讯录 MCP\r
```\r
\r
根据用户语言调整展示内容。非首次交互时不重复展示,除非用户主动询问。\r
\r
## 能力范围\r
\r
**日程管理**\r
- 创建日程(标题、时间、地点、参与人、描述、提醒、循环规则等)\r
- 修改日程信息(标题、时间、地点、描述等)\r
- 删除/取消日程\r
- 响应日程邀请(接受/拒绝/暂定)\r
\r
**查询**\r
- 列出指定时间范围内的日程\r
- 查看日程详情(标题、时间、地点、参与人、描述、会议室等)\r
- 查询用户空闲/忙碌时段\r
- 推荐会议时间(基于参会人空闲情况)\r
\r
**参会人管理**\r
- 添加/移除日程参与人\r
- 查看日程参与人列表及响应状态\r
\r
**会议室管理**\r
- 查询空闲会议室\r
- 为日程预定会议室\r
- 移除日程中的会议室\r
- 查询会议室分组和标签\r
\r
**日历本管理**\r
- 列出/搜索日历本\r
- 查看日历本信息\r
- 管理日历共享权限(添加/删除/查看 ACL)\r
\r
**附件**\r
- 为日程添加附件(需先上传到钉盘获取 fileId)\r
\r
**不负责:**\r
- 飞书、Google Calendar、Outlook 等其他平台\r
- 只操作本地日历文件(无云端操作)\r
- 钉钉 IM 消息、文档操作、企业成员管理(查人请用钉钉通讯录 MCP)\r
\r
## 前置条件\r
\r
### 必须:日历 MCP\r
\r
钉钉日历 MCP Server 必须已配置到当前 Agent 的 MCP 设置中,服务名称为 `dingtalk-calendar`。\r
\r
如果日历 MCP 工具不可用,先走**初始化流程**,再执行任何操作。\r
\r
### 按需:通讯录 MCP\r
\r
钉钉通讯录 MCP Server(服务名 `dingtalk-contacts`,mcpId=2400)**仅在以下场景需要**:\r
\r
| 场景 | 是否需要通讯录 MCP | 原因 |\r
|------|------------------|------|\r
| 创建日程并拉其他人参加 | **需要** | 需要通过姓名/手机号查找参会人 userId |\r
| 创建仅自己的日程 | 不需要 | 不涉及其他人 |\r
| 查询/列出日程 | 不需要 | 只读操作 |\r
| 删除日程 | 不需要 | 只需 eventId |\r
| 修改日程时间/标题/地点 | 不需要 | 只需 eventId |\r
| 添加参会人到已有日程 | **需要** | 需要查找参会人 userId |\r
| 移除参会人 | 不需要 | 可从日程详情获取已有参会人 userId |\r
| 查询空闲/忙碌 | 不需要 | 使用 userId 查询,如已知则不需查找 |\r
| 预定会议室 | 不需要 | 不涉及人员查找 |\r
\r
**判断规则**:当用户要创建或修改日程且涉及"拉其他人"时,检查通讯录 MCP 是否可用。如不可用,告知用户:\r
> 创建包含其他参会人的日程需要通讯录 MCP 来查找同事的 userId。你可以:\r
> 1. 配置通讯录 MCP(推荐,后续可按姓名查找同事)\r
> 2. 直接提供参会人的 userId(如果你已知的话)\r
> 3. 先创建只有自己的日程,稍后再添加参会人\r
\r
## 初始化流程(首次使用或 MCP 不可用时)\r
\r
1. 告知用户访问帮助手册页面并完成开通:\r
> 请打开以下链接,使用钉钉账号登录后,点击页面上的【开通服务】按钮:\r
> https://aihub.dingtalk.com/#/detail?mcpId=1050&detailType=marketMcpDetail\r
\r
2. 开通后复制页面右侧 **StreamableHttp URL**(不是 JSON Config)\r
\r
3. 请用户将 URL 粘贴给你\r
\r
4. 收到 URL 后,按以下顺序尝试注册 MCP 服务(`dingtalk-calendar` 为服务名,必须为 ASCII)。\r
\r
如果用户还需要通讯录 MCP(用于按姓名查找参会人 userId),同样流程为 `dingtalk-contacts` 注册(mcpId=2400 的 URL)。\r
\r
**方案 A — Claude Code**(优先尝试,运行命令看是否成功):\r
```bash\r
claude mcp add --transport http --scope user dingtalk-calendar "\x3C用户提供的 URL>"\r
```\r
成功则跳到步骤 5。\r
\r
**方案 B — 写入配置文件**(通用方案,大多数 Agent 均可用):\r
\r
检测当前环境存在哪些配置文件,找到第一个匹配项写入:\r
\r
| Agent | 配置文件(全局) | 配置文件(项目级) | `mcpServers` 键名 |\r
|-------|---------------|----------------|-----------------|\r
| Cursor | `~/.cursor/mcp.json` | `.cursor/mcp.json` | `mcpServers` |\r
| VS Code Copilot | `~/Library/Application Support/Code/User/mcp.json`(Mac)\x3Cbr>`%APPDATA%\Code\User\mcp.json`(Win) | `.vscode/mcp.json` | `servers` |\r
| Roo Code | — | `.roo/mcp.json` | `mcpServers` |\r
| Gemini CLI | `~/.gemini/settings.json` | — | `mcpServers` |\r
| OpenAI Codex | `~/.codex/config.json` | — | `mcpServers` |\r
\r
向目标文件追加(若文件已有 `mcpServers`/`servers`,只添加新条目,不覆盖原有内容):\r
\r
```json\r
{\r
"mcpServers": {\r
"dingtalk-calendar": {\r
"type": "http",\r
"url": "\x3C用户提供的 URL>"\r
}\r
}\r
}\r
```\r
> VS Code Copilot 的 `.vscode/mcp.json` 使用 `"servers"` 而非 `"mcpServers"`,写入时注意区分。\r
\r
成功写入则跳到步骤 5。\r
\r
**方案 C — 手动兜底**(方案 A/B 均不适用时):\r
\r
向用户展示以下信息,请其参照所用 Agent 的文档手动添加 MCP 服务,完成后回来继续:\r
```\r
传输类型:StreamableHttp(HTTP)\r
服务名称:dingtalk-calendar\r
URL:\x3C用户提供的 URL>\r
```\r
用户手动配置完成后,本 Skill 只需确认 MCP 工具可用即可继续。\r
\r
> URL 中含有个人 API Key,写入配置后不要在回复中重复显示完整 URL。\r
\r
5. MCP 配置写入后,提示用户重启 Agent 客户端以使 MCP 生效,重启后回来继续操作即可。\r
\r
### 安全规则\r
\r
- MCP 服务 URL 含有个人 API Key,**不得出现在任何版本控制文件中**;写入配置后不要在回复中重复显示完整 URL\r
- 如果用户将 URL 粘贴到聊天中,立即写入配置后不再引用\r
\r
## 默认路径\r
\r
1. 确认日历 MCP 工具可用(若不可用,进入初始化流程)\r
2. 理解用户意图,映射到对应 MCP 工具(见工具映射表)\r
3. 如需要 eventId 但用户未提供:调用 `list_calendar_events` 列出近期日程,让用户确认后再操作\r
4. 如需添加参会人但用户只提供了姓名/手机号:\r
- 先检查 `references/contacts.cache` 是否有缓存的 userId(见参会人缓存机制)\r
- 缓存未命中时,通过通讯录 MCP 的 `search_user_by_key_word` 或 `search_user_by_mobile` 查找 userId\r
- 查到后写入缓存供下次使用\r
5. 创建日程时:为所有未指定的参数填充推荐值(见参数推荐值表)\r
6. **执行前确认**(只读操作除外):向用户展示**完整日程详情**,收到明确同意后再调用 MCP 工具\r
7. 执行操作\r
8. 报告结果:操作类型、日程标题、日程时间(如有)\r
\r
### 创建日程参数推荐值\r
\r
创建日程时,用户未明确指定的参数应按以下规则填充推荐值:\r
\r
| 参数 | 推荐值规则 | 示例 |\r
|------|----------|------|\r
| `summary` | 根据上下文推断 | "项目周会"、"需求评审" |\r
| `startDateTime` | 用户提到的时间,未提则取明天 14:00 | `2026-06-12T14:00:00+08:00` |\r
| `endDateTime` | 默认开始时间 +1 小时 | `2026-06-12T15:00:00+08:00` |\r
| `timeZone` | `Asia/Shanghai` | — |\r
| `freeBusy` | `busy` | — |\r
| `location` | 空(不填) | — |\r
| `description` | 空(不填),用户提及时才填 | — |\r
| `calendarId` | `primary` | — |\r
| `recurrence` | 不填(非循环日程) | — |\r
\r
> **注意**:推荐值必须填入后在确认摘要中完整展示给用户,用户可修改任何字段。\r
\r
### 执行前确认规则\r
\r
**需要确认的操作**(所有会写入或修改云端数据的操作):\r
`create_calendar_event`、`update_calendar_event`、`delete_calendar_event`、`add_calendar_participant`、`remove_calendar_participant`、`add_meeting_room`、`delete_meeting_room`、`add_acl`、`delete_acl`、`add_attachments`、`respond`\r
\r
**无需确认的操作**(只读):\r
`list_calendar_events`、`get_calendar_detail`、`get_calendar_participants`、`query_busy_status`、`list_suggested_event_times`、`query_available_meeting_room`、`list_calendars`、`get_calendar`、`search_calendar`、`list_acls`、`list_meeting_room_groups`、`list_org_room_labels`\r
\r
**确认摘要格式 — 创建日程(必须展示完整详情):**\r
\r
```\r
即将创建以下日程,请确认:\r
\r
标题:\x3Csummary>\r
时间:\x3CstartDateTime> ~ \x3CendDateTime>\r
时区:\x3CtimeZone>\r
忙碌状态:\x3CfreeBusy>\r
地点:\x3Clocation,未填则显示"无">\r
描述:\x3Cdescription,未填则显示"无">\r
参与人:\x3C参会人姓名列表,或"仅自己">\r
会议室:\x3CroomIds,未填则显示"无">\r
循环:\x3Crecurrence,未填则显示"不循环">\r
\r
如需修改任何字段,请直接告诉我要改什么。\r
确认请回复「是」或「确认」,取消请回复「否」或「取消」。\r
```\r
\r
**确认摘要格式 — 其他操作:**\r
\r
```\r
即将执行以下操作,请确认:\r
\r
操作:\x3C修改 / 取消 / 邀请参会人 / 移除参会人 / 预定会议室 / 移除会议室>\r
日程:\x3C日程标题>\r
时间:\x3C开始时间> ~ \x3C结束时间>(如有)\r
变更详情:\x3C具体修改内容或操作说明>\r
\r
确认请回复「是」或「确认」,取消请回复「否」或「取消」。\r
```\r
\r
收到取消时:停止操作,不重试,告知用户已取消。\r
\r
## MCP 工具映射\r
\r
详见 `references/mcp-tools.md`。常用映射如下:\r
\r
| 用户意图 | MCP 工具 |\r
|---------|---------|\r
| 创建日程/会议 | `create_calendar_event` |\r
| 修改日程信息 | `update_calendar_event` |\r
| 删除/取消日程 | `delete_calendar_event` |\r
| 查看近期日程列表 | `list_calendar_events` |\r
| 查看日程详情 | `get_calendar_detail` |\r
| 查看日程参与人 | `get_calendar_participants` |\r
| 添加参会人 | `add_calendar_participant` |\r
| 移除参会人 | `remove_calendar_participant` |\r
| 响应日程(接受/拒绝/暂定) | `respond` |\r
| 查询空闲/忙碌时段 | `query_busy_status` |\r
| 推荐会议时间 | `list_suggested_event_times` |\r
| 查询空闲会议室 | `query_available_meeting_room` |\r
| 预定会议室 | `add_meeting_room` |\r
| 移除会议室 | `delete_meeting_room` |\r
| 添加日程附件 | `add_attachments` |\r
| 管理日历共享权限 | `add_acl` / `delete_acl` / `list_acls` |\r
| 列出/搜索日历本 | `list_calendars` / `search_calendar` |\r
| 按姓名查找参会人 userId | 通讯录 MCP:`search_user_by_key_word` |\r
| 按手机号查找参会人 userId | 通讯录 MCP:`search_user_by_mobile` |\r
\r
## 失败处理\r
\r
- **MCP 工具不可用**:停止,进入初始化流程,不要猜测或尝试其他方式调用\r
- **未提供目标日程**:先用 `list_calendar_events` 列出近期日程,让用户确认后再操作\r
- **参会人查找失败**:当通过姓名或手机号无法找到用户时,告知用户并请其确认参会人的准确信息。可使用通讯录 MCP 的 `search_user_by_key_word`(按姓名)或 `search_user_by_mobile`(按手机号)辅助查找 userId\r
- **时间冲突**:创建日程前可用 `query_busy_status` 检查参会人是否空闲,如有冲突展示给用户。也可直接用 `list_suggested_event_times` 推荐空闲时段\r
- **会议室不可用**:用 `query_available_meeting_room` 查询空闲会议室,展示可用选项给用户选择\r
- **API 报错(权限/鉴权类)**:当 API 返回权限不足、无权限、鉴权失败、Forbidden、Unauthorized 等错误时,除了展示原文错误信息外,提示用户可能尚未开通所在组织的钉钉开发者权限,引导用户参考以下链接完成开通:\r
> 请访问钉钉开发者入门文档,确认你已在所在组织中开通了开发者权限:\r
> https://open.dingtalk.com/document/dingstart/dingtalk-developer\r
>\r
> 开通步骤简述:登录钉钉开放平台 → 选择对应组织 → 完成开发者认证/开通。完成后重新尝试操作。\r
- **其他 API 报错**:原文展示错误信息,不猜测原因,不自动重试\r
\r
## 关键约束\r
\r
- `delete_calendar_event`:组织者删除将通知所有参与者,参与者删除仅从自己日历移除。执行前**必须**明确告知用户,获得确认后再执行\r
- 时间格式:`create_calendar_event` 和 `update_calendar_event` 使用 ISO-8601 格式(如 `2026-06-11T14:00:00+08:00`)\r
- `list_calendar_events` 使用**毫秒级时间戳**(如 `1718100000000`),注意与 ISO-8601 区分\r
- `query_busy_status` 和 `query_available_meeting_room` 也使用**毫秒级时间戳**\r
- 创建日程时如用户未指定时区,默认使用 `Asia/Shanghai`(UTC+8)\r
- 创建日程时如用户未指定时长,默认 1 小时\r
- 日程参与人最多 500 人,支持 userId 或 openDingTalkId\r
- 每个日程最多预定 5 个会议室\r
- 修改日程参与人需使用 `add_calendar_participant` / `remove_calendar_participant`,不能用 `update_calendar_event`\r
- `add_attachments` 需要先将文件上传到钉盘获取 fileId\r
- 操作完成后,从返回值中提取关键信息(日程标题、时间、参与人数等)简明展示给用户\r
\r
## 参会人缓存机制\r
\r
为了减少重复查询,通过通讯录 MCP 查到的 userId 会缓存到 `references/contacts.cache` 文件中。\r
\r
### 缓存文件格式\r
\r
`references/contacts.cache` 为 JSON 格式,已被 `.gitignore` 排除,不会进入版本控制:\r
\r
```json\r
{\r
"contacts": {\r
"张三": { "userId": "user123", "name": "张三", "updatedAt": "2026-06-11T10:00:00+08:00" },\r
"李四": { "userId": "user456", "name": "李四", "updatedAt": "2026-06-11T10:00:00+08:00" }\r
}\r
}\r
```\r
\r
### 读取顺序\r
\r
当需要查找参会人 userId 时:\r
\r
1. 先读取 `references/contacts.cache`,按姓名或手机号模糊匹配\r
2. 缓存命中 → 直接使用缓存的 userId,不再调用通讯录 MCP\r
3. 缓存未命中 → 调用通讯录 MCP 查询,查到后写入缓存\r
4. 缓存文件不存在或为空 → 直接调用通讯录 MCP 查询\r
\r
### 缓存更新规则\r
\r
- 每次通过通讯录 MCP 成功查到 userId 后,立即写入缓存\r
- 如果 API 返回 userId 无效(人已离职等),从缓存中删除该条目\r
- 缓存文件不存在时,首次写入会自动创建\r
\r
### 用户主动管理缓存\r
\r
- 用户可以说"记住张三是 user123",直接写入缓存\r
- 用户可以说"删除缓存中的李四",从缓存中移除\r
- 用户可以说"显示已缓存的联系人",展示缓存内容\r
\r
## 资源导航\r
\r
- `references/mcp-tools.md` — 全部 MCP 工具详细说明,按场景分组\r
- `references/contacts.cache` — 参会人 userId 缓存(自动维护,不入版本控制)\r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install dingtalk-meetings-skill - After installation, invoke the skill by name or use
/dingtalk-meetings-skill - Provide required inputs per the skill's parameter spec and get structured output
What is Dingtalk Meetings Skill?
当用户想要操作钉钉日历/会议时使用本 Skill。支持:创建日程/会议、修改日程、删除/取消日程、查询日程列表与详情、添加/移除参会人、查询参会人列表、查询空闲/忙碌时段、预定会议室、查询空闲会议室、推荐会议时间、响应日程邀请、管理日历权限。当用户想操作飞书、Google Calendar、Outlook 等其他... It is an AI Agent Skill for Claude Code / OpenClaw, with 29 downloads so far.
How do I install Dingtalk Meetings Skill?
Run "/install dingtalk-meetings-skill" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Dingtalk Meetings Skill free?
Yes, Dingtalk Meetings Skill is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Dingtalk Meetings Skill support?
Dingtalk Meetings Skill is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Dingtalk Meetings Skill?
It is built and maintained by Sean Liu (@cpsean); the current version is v1.0.0.