Dingtalk Docs Skill

API key required
MCP Tools

当用户想要操作钉钉文档时使用本 Skill。支持:推送本地 markdown 到钉钉知识库、拉取云端文档到本地、覆盖/追加更新文档内容、块级精确编辑、搜索与列出知识库文档、下载文件与附件、导出文档为 PDF/Word、管理节点权限、创建/重命名/移动/复制/删除文档与文件夹、初始化钉钉文档 MCP 配置。当用户想操作飞书、语雀、Notion 等其他平台、只修改本地文件、管理钉钉 IM 消息或群组时,不要使用本 Skill。

Install

openclaw skills install dingtalk-docs-skill

钉钉文档

通过钉钉文档官方 MCP Server 全面操作云端文档。

语言规则

始终使用用户输入的语言进行回复。 如果用户用英文提问,则全程用英文回复;如果用户用中文,则全程用中文回复。无法判断时默认使用中文。

能力范围

  • 拉取云端文档正文为 markdown(保存到本地)
  • 列出知识库/文件夹下的文档节点
  • 按关键词搜索文档
  • 获取文档元信息(标题、类型、创建时间等)
  • 下载钉盘文件或文档内嵌附件

  • 将本地 markdown 推送为钉钉文档(adoc 类型)
  • 覆盖或追加内容到已有文档
  • 按块精确编辑(插入/更新/删除段落、标题、表格等)
  • 上传本地文件(PDF、图片、Word 等)到知识库

管理

  • 创建文件夹
  • 重命名/移动/复制/删除文档和文件夹
  • 导出文档为 PDF 或 Word 格式
  • 查看/添加/修改知识库节点的成员权限

不负责:

  • 飞书、语雀、Notion 等其他平台
  • 只修改本地文件(无云端操作)
  • 钉钉 IM 消息、企业成员管理

前置条件

钉钉文档 MCP Server 必须已配置到当前 Agent 的 MCP 设置中,服务名称为 dingtalk-doc

如果 MCP 工具不可用,先走初始化流程,再执行任何文档操作。

初始化流程(首次使用或 MCP 不可用时)

  1. 告知用户访问帮助手册页面并完成开通:

    请打开以下链接,使用钉钉账号登录后,点击页面上的【开通服务】按钮: https://aihub.dingtalk.com/#/detail?mcpId=9629&detailType=marketMcpDetail

  2. 开通后复制页面右侧 StreamableHttp URL(不是 JSON Config)

  3. 请用户将 URL 粘贴给你

  4. 收到 URL 后,按以下顺序尝试注册 MCP 服务(dingtalk-doc 为服务名,必须为 ASCII):

    方案 A — Claude Code(优先尝试,运行命令看是否成功):

    claude mcp add --transport http --scope user dingtalk-doc "<用户提供的 URL>"
    

    成功则跳到步骤 5。

    方案 B — 写入配置文件(通用方案,大多数 Agent 均可用):

    检测当前环境存在哪些配置文件,找到第一个匹配项写入:

    Agent配置文件(全局)配置文件(项目级)mcpServers 键名
    Cursor~/.cursor/mcp.json.cursor/mcp.jsonmcpServers
    VS Code Copilot~/Library/Application Support/Code/User/mcp.json(Mac)<br>%APPDATA%\Code\User\mcp.json(Win).vscode/mcp.jsonservers
    Roo Code.roo/mcp.jsonmcpServers
    Gemini CLI~/.gemini/settings.jsonmcpServers
    OpenAI Codex~/.codex/config.jsonmcpServers

    向目标文件追加(若文件已有 mcpServers/servers,只添加新条目,不覆盖原有内容):

    {
      "mcpServers": {
        "dingtalk-doc": {
          "type": "http",
          "url": "<用户提供的 URL>"
        }
      }
    }
    

    VS Code Copilot 的 .vscode/mcp.json 使用 "servers" 而非 "mcpServers",写入时注意区分。

    成功写入则跳到步骤 5。

    方案 C — 手动兜底(方案 A/B 均不适用时):

    向用户展示以下信息,请其参照所用 Agent 的文档手动添加 MCP 服务,完成后回来继续:

    传输类型:StreamableHttp(HTTP)
    服务名称:dingtalk-doc
    URL:<用户提供的 URL>
    

    用户手动配置完成后,本 Skill 只需确认 MCP 工具可用即可继续。

    URL 中含有个人 API Key,写入配置后不要在回复中重复显示完整 URL。

  5. 询问用户的默认知识库地址:

    请在浏览器中打开你常用的钉钉知识库,把地址栏的 URL 粘贴给我(格式类似 https://alidocs.dingtalk.com/i/spaces/xxxxx/overview)。 如果暂时不设默认知识库,可以跳过,后续每次操作时再指定。

  6. 收到知识库 URL 后,写入 references/dingtalk.config

    DINGTALK_DEFAULT_WORKSPACE_URL=<用户提供的知识库 URL>
    

    此文件已被 .gitignore 排除,不会进入版本控制。无需重启,下次操作时直接读取生效。

  7. MCP 配置写入后,提示用户重启 Agent 客户端以使 MCP 生效,重启后回来继续操作即可。

使用默认知识库

  • 当用户说"列出我的知识库文档"、"推送到知识库"等未指明位置的操作时,优先使用默认知识库 URL
  • 读取顺序:① 读取 references/dingtalk.config 中的 DINGTALK_DEFAULT_WORKSPACE_URL;② 若文件不存在或值为空,检查环境变量 $DINGTALK_DEFAULT_WORKSPACE_URL(兼容已有 Claude Code 配置);③ 两者均无则询问用户
  • 获得 URL 后,调用 get_document_info 传入该 URL 解析出 nodeId,再用 nodeId 调用 list_nodes 或作为 parentNodeId

更改默认知识库

当用户说"更换默认知识库"、"修改知识库地址"等时:

  1. 请用户在浏览器打开目标钉钉知识库,复制地址栏 URL
  2. 收到新 URL 后,覆盖写入 references/dingtalk.config
    DINGTALK_DEFAULT_WORKSPACE_URL=<新的知识库 URL>
    
  3. 无需重启,下次操作时读取新值即生效

安全规则

  • MCP 服务 URL 含有个人 API Key,不得出现在任何版本控制文件中;写入配置后不要在回复中重复显示完整 URL
  • references/dingtalk.config 保存知识库 URL,已被 .gitignore 排除,不会提交到版本控制
  • 如果用户将 URL 粘贴到聊天中,立即写入配置后不再引用

默认路径

  1. 确认 MCP 工具可用(若不可用,进入初始化流程)
  2. 理解用户意图,映射到对应 MCP 工具(见工具映射表)
  3. 如需要 dentryUuid/nodeId 但用户未提供:优先读取 references/dingtalk.config(或环境变量 $DINGTALK_DEFAULT_WORKSPACE_URL)获取默认知识库 URL,调用 get_document_info 解析出 nodeId;否则调用 search_documentslist_nodes 定位目标,让用户确认后再操作
  4. 执行前确认(只读操作除外,见下方说明):向用户展示操作摘要,收到明确同意后再调用 MCP 工具
  5. 执行操作
  6. 报告结果:操作类型、文档标题、文档链接(如有)

执行前确认规则

需要确认的操作(所有会写入或修改云端数据的操作): create_documentupdate_documentcreate_foldercreate_filedelete_documentrename_documentmove_documentcopy_documentinsert_document_blockupdate_document_blockdelete_document_block、文件上传(get_file_upload_info + commit_uploaded_file)、submit_export_jobadd_permissionupdate_permission

无需确认的操作(只读): search_documentslist_nodesget_document_infoget_document_contentlist_document_blockslist_permissionquery_export_jobdownload_filedownload_doc_attachment

确认摘要格式(根据操作类型调整):

即将执行以下操作,请确认:

操作:<创建 / 更新(覆盖)/ 更新(追加)/ 删除 / 重命名 / 移动 / 复制 / 创建文件夹>
目标:<文档标题或文件夹名>
位置:<知识库名或文件夹路径>
说明:<一句话描述本次变更,例如"将以本地文件 xxx.md 的内容覆盖云端文档全文">

确认请回复「是」或「确认」,取消请回复「否」或「取消」。

收到取消时:停止操作,不重试,告知用户已取消。

MCP 工具映射

详见 references/mcp-tools.md。常用映射如下:

用户意图MCP 工具
推送/创建文档(含 markdown 内容)create_document
拉取云端文档内容到本地get_document_content
覆盖或追加文档内容update_document
精确块级编辑(段落/标题/表格等)list_document_blocksinsert/update/delete_document_block
列出知识库/文件夹下的文档list_nodes
按关键词搜索文档search_documents
获取文档元信息(标题、类型等)get_document_info
下载钉盘文件download_file
下载文档内嵌附件download_doc_attachment
导出文档为 PDF/Wordsubmit_export_jobquery_export_job(轮询至完成)
创建文件夹create_folder
删除文档节点delete_document
重命名节点rename_document
移动节点到其他文件夹move_document
复制节点到其他文件夹copy_document
查看节点成员权限list_permission
添加/修改节点成员权限add_permission / update_permission

失败处理

  • MCP 工具不可用:停止,进入初始化流程,不要猜测或尝试其他方式调用
  • 未提供目标文档:先用 search_documentslist_nodes 找到目标,让用户确认后再操作
  • update_document 报错:确认目标是否为 adoc(文字类型)文档,非 adoc 文档不支持此操作
  • delete_document 前:确认摘要中必须注明"将移入回收站,30 天内可恢复",收到确认后再执行
  • API 报错(权限/鉴权类):当 API 返回权限不足、无权限、鉴权失败、Forbidden、Unauthorized 等错误时,除了展示原文错误信息外,提示用户可能尚未开通所在组织的钉钉开发者权限,引导用户参考以下链接完成开通:

    请访问钉钉开发者入门文档,确认你已在所在组织中开通了开发者权限: https://open.dingtalk.com/document/dingstart/dingtalk-developer

    开通步骤简述:登录钉钉开放平台 → 选择对应组织 → 完成开发者认证/开通。完成后重新尝试操作。

  • 其他 API 报错:原文展示错误信息,不猜测原因,不自动重试

关键约束

  • update_documentcreate_document 仅支持 adoc(文字类型) 文档,不支持表格、演示、脑图等
  • delete_document 是移入回收站,不是永久删除,30 天内可从回收站恢复
  • list_nodes 只返回直接子节点,不递归。需要深层列表时需要多次调用
  • 导出为异步操作submit_export_job 返回 jobId 后需轮询 query_export_job 直到状态完成,再将下载链接告知用户;轮询间隔建议 1-2 秒
  • Mermaid 文本绘图:通过 create_document 推送的 ```mermaid 代码块会被解析为普通代码块,而非钉钉原生文本绘图块。钉钉的文本绘图是私有块类型,API 层未暴露,无法通过 MCP 创建或转换。推送前告知用户此限制,建议推送后在钉钉编辑器中手动将代码块转换为文本绘图
  • 操作完成后,从返回值中提取文档链接告知用户,方便直接点击查看

对话中上传文件的处理

用户可能在对话中直接上传 markdown 文件并要求推送到钉钉。

已知限制

  • 对话上传的文件内容是临时的,不会持久保存到磁盘,上下文压缩或会话结束后内容即丢失
  • 非 ASCII 文件(如中文 markdown)通过对话上传时,0x80-0x9F 范围的字节会被文本处理层丢弃,导致不可逆乱码。这是客户端文本传输的固有限制,编码修复无法还原丢失的字节

处理规则

  1. 优先使用本地文件路径:当用户要推送含非 ASCII 内容(中文、日文等)的文件时,请用户提供本地磁盘路径,直接读取文件内容,避免编码问题
  2. 对话上传的文件先检查编码:如果用户直接在对话中上传了文件,先检查内容是否出现乱码。如果存在乱码,立即告知用户并请其提供本地文件路径
  3. 纯 ASCII 内容可直接处理:如果上传的文件内容全是 ASCII(英文、代码等),可以直接处理,在同一轮回复中完成:读取内容 -> 确认摘要 -> (用户确认后)调用 create_document
  4. 文档命名:默认使用上传文件名(去掉扩展名)作为钉钉文档标题。如果用户要求修改名字,按用户指定的名字创建
  5. 仅支持 markdown / 纯文本:对话上传的二进制文件(PDF、图片、Word 等)当前不支持直接推送,需要用户提供本地磁盘路径后走文件上传三步流程

资源导航

  • references/mcp-tools.md — 全部 MCP 工具详细说明,按场景分组