Dingtalk Robot Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Dingtalk Robot Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
钉钉机器人 MCP 服务器。通过 MCP 协议实现 AI 助手发送钉钉单聊和群聊消息,支持 文本、Markdown、图片、链接、ActionCard、文件、语音、视频 共 8 种消息类型,可通过 userId、姓名 或 批量 userId 发送,最多单次 20 人。
| 功能 | 说明 |
|---|---|
| 多消息类型 | 文本、Markdown、图片、链接、ActionCard、文件、语音、视频 |
| 单聊消息 | 发送多种类型消息给指定用户 |
| 群聊消息 | 发送多种类型消息到指定群 |
| 媒体上传 | 上传本地文件获取 mediaId,用于图片/文件/语音/视频消息 |
| 按 userId 发送 | 直接指定钉钉用户 ID(兼容旧用法) |
| 按姓名发送 | 输入中文姓名,自动查找 userId 并发送 |
| 批量发送 | 一次发送给最多 20 个用户 |
| 重名检测 | 多人同名时拒绝发送,列出所有重复的 userId |
| 项目 | 要求 |
|---|---|
| Node.js | >= 18.0.0 |
| 钉钉应用 | 企业内部应用(机器人) |
确保应用已开通 「企业机器人消息推送」 权限。这是发送消息的基础权限,通常在创建机器人应用时默认开通。
验证方法:在应用详情页 → 「权限管理」 → 确认存在「企业机器人消息推送」。
如果希望通过中文姓名发送消息(非必须,仅 userId 发送不需要),还需开通:
| 权限名称 | 说明 | 操作路径 |
|---|---|---|
| 通讯录部门信息读权限 | 获取企业部门列表 | 权限管理 → 搜索「通讯录」→ 点击开通 |
| 通讯录成员信息读权限 | 获取部门成员信息 | 权限管理 → 搜索「通讯录」→ 点击开通 |
注意:「权限管理」入口在钉钉开放平台应用详情页的左侧菜单中,不同版本后台界面可能略有不同。如果找不到,试试「开发管理」→「权限管理」。
npm install -g dingtalk-mcp-server安装后运行配置向导:
dingtalk-mcp-server-config向导会引导你输入 AppKey / AppSecret 并自动写入 WorkBuddy 配置。
编辑 ~/.workbuddy/mcp.json:
{
"mcpServers": {
"dingtalk": {
"command": "node",
"args": [
"C:\\path\\to\\dingtalk-mcp-server\\dist\\index.js"
],
"env": {
"DINGTALK_APP_KEY": "你的AppKey",
"DINGTALK_APP_SECRET": "你的AppSecret"
}
}
}
}| 环境变量 | 必填 | 说明 |
|---|---|---|
DINGTALK_APP_KEY | ✅ | 钉钉应用 AppKey |
DINGTALK_APP_SECRET | ✅ | 钉钉应用 AppSecret |
配置完成后,断开并重新启用钉钉连接器即可生效。
| 工具名 | 功能 |
|---|---|
send_dingtalk_single_message | 发送单聊消息(支持 8 种消息类型) |
send_dingtalk_group_message | 发送群聊消息(支持 8 种消息类型) |
upload_dingtalk_media | 上传媒体文件,获取 mediaId |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
msgtype | string | 否(默认 text) | 消息类型:text / markdown / image / link / actionCard_single / actionCard_multi / file / audio / video |
userId | string | 三选一 | 单个用户 ID |
userIds | string[] | 三选一 | 多个用户 ID(最多 20 个) |
userName | string | 三选一 | 用户中文姓名(精确匹配) |
各消息类型额外参数:
| msgtype | 额外必填参数 | 可选参数 |
|---|---|---|
| text | content (文本内容) | — |
| markdown | title (标题), text (Markdown正文) | — |
| image | photoURL (图片URL或mediaId) | — |
| link | title, text, messageUrl | picUrl (预览图) |
| actionCard_single | title, text, singleTitle, singleURL | btnOrientation (0竖/1横) |
| actionCard_multi | title, text, btns[] (按钮数组, 1-6个) | btnOrientation |
| file | mediaId, fileName, fileType | — |
| audio | mediaId, duration (毫秒) | — |
| video | videoMediaId, picMediaId, duration (秒) | videoType, width, height |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
chatId | string | ✅ | 群聊 openConversationId |
msgtype | string | 否(默认 text) | 消息类型(同单聊) |
其余参数与单聊消息各类型一致。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
filePath | string | ✅ | 本地文件绝对路径 |
mediaType | string | ✅ | image / voice / video / file |
| mediaType | 支持格式 | 大小限制 |
|---|---|---|
| image | jpg, png, gif, bmp | 20MB |
| voice | amr, mp3, wav | 2MB |
| video | mp4 | 20MB |
| file | doc, docx, xls, xlsx, ppt, pptx, zip, pdf, rar | 20MB |
示例 1:发送文本(向后兼容)
给张三发消息,userId: "204457105626433998",内容:明天的会议改到下午3点示例 2:按姓名发送
通过钉钉给朱育敏发消息,内容是:请查收本周的测试报告示例 3:发送 Markdown
通过钉钉给 userId "011950195121139389" 发 markdown 消息,标题:周报提醒,text:**请于周五前提交周报**\n\n- 本周工作总结\n- 下周计划示例 4:上传并发送图片
先把 D:\screenshot.png 上传到钉钉(mediaType: image),拿到 mediaId 后通过钉钉发给朱育敏,msgtype 用 image示例 5:发送 ActionCard
给 userId "011950195121139389" 发 actionCard,msgtype: actionCard_single,title:新版本发布,text:## v2.0 已上线\n\n新增多消息类型支持,singleTitle:查看详情,singleURL:https://github.com示例 6:批量发送
通过钉钉给以下用户发消息:
userIds: ["204457105626433998", "481029384729103847"]
msgtype: text, content:全员通知:明天下午3点系统升级维护用户 "张伟" 在企业中有 3 个重名记录
→ 发送失败,错误信息列出 3 个 userId
→ 用户需改用 userId 指定具体接收人单次最多发送给 20 个用户,超出会报错。如需发送给更多人,请分批调用。
最常见的场景是给自己发消息。在钉钉客户端中:
~/.workbuddy/mcp.json 路径是否正确node 命令可用(node --version)| 操作 | API |
|---|---|
| 获取 Token | POST /v1.0/oauth2/accessToken |
| 单聊消息 | POST /v1.0/robot/oToMessages/batchSend |
| 群聊消息 | POST /v1.0/robot/groupMessages/send |
| 上传媒体 | POST /oapi.dingtalk.com/media/upload |
| 部门列表 | GET /oapi.dingtalk.com/department/list |
| 部门成员 | GET /oapi.dingtalk.com/user/simplelist |
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.