← Back to Skills Marketplace
cpsean

Dingtalk Meetings Skill

by Sean Liu · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
29
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install dingtalk-meetings-skill
Description
当用户想要操作钉钉日历/会议时使用本 Skill。支持:创建日程/会议、修改日程、删除/取消日程、查询日程列表与详情、添加/移除参会人、查询参会人列表、查询空闲/忙碌时段、预定会议室、查询空闲会议室、推荐会议时间、响应日程邀请、管理日历权限。当用户想操作飞书、Google Calendar、Outlook 等其他...
README (SKILL.md)

\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
Usage Guidance
Install only if you are comfortable granting DingTalk calendar access and, if enabled, contacts access to your agent. Use the contacts MCP only when attendee lookup is needed, review any MCP config changes, avoid sharing the API URL, and periodically inspect or delete references/contacts.cache if colleague identifiers should not be retained.
Capability Tags
requires-sensitive-credentials
Capability Assessment
Purpose & Capability
Calendar creation, deletion, attendee changes, room booking, and ACL management fit the stated purpose and require confirmation in SKILL.md, but the contacts reference also documents org-directory enumeration, current-user profile, special followings, and QR-code tools that are not clearly needed for scheduling.
Instruction Scope
The main workflow scopes contacts use to attendee userId lookup, but references/mcp-tools.md exposes broader contacts capabilities without strong purpose limitation or handling rules.
Install Mechanism
Setup asks the user for a DingTalk StreamableHttp URL containing an API key and may run a Claude MCP command or write known MCP config files. This is disclosed and purpose-aligned for MCP setup, and the skill warns not to repeat or commit the URL.
Credentials
Calendar write authority is proportionate to a meeting assistant and gated by confirmation, but optional contacts access reaches sensitive organizational identity data beyond attendee resolution.
Persistence & Privilege
The skill automatically persists attendee names and userIds in references/contacts.cache for reuse. It is disclosed and gitignored, but it stores organizational identifiers by default without an explicit opt-in or retention limit.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install dingtalk-meetings-skill
  3. After installation, invoke the skill by name or use /dingtalk-meetings-skill
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
dingtalk-meetings-skill v1.0.0 - Initial release with comprehensive DingTalk calendar and meetings management via official MCP Server. - Supports creating, editing, deleting, and querying events and meetings, managing participants, and scheduling meeting rooms. - Smart language adaptation: always replies in user's language (Chinese or English). - Detailed onboarding and MCP configuration guide, covering both calendar and contacts MCP setup. - Operation confirmation flow: previews all changes before writing to cloud, with clear modification and cancellation options. - Includes error handling for missing info, MCP tool unavailability, time and room conflicts, and user lookup.
Metadata
Slug dingtalk-meetings-skill
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

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.

💬 Comments