Dingtalk Ai Table
钉钉 AI 表格(多维表)操作技能。使用 mcporter CLI 连接钉钉官方新版 AI 表格 MCP server,基于 baseId / tableId / fieldId / recordId 体系执行 Base、Table、Field、Record 的查询与增删改。适用于创建 AI 表格、搜索表格、读取...
钉钉 AI 表格(多维表)操作技能。使用 mcporter CLI 连接钉钉官方新版 AI 表格 MCP server,基于 baseId / tableId / fieldId / recordId 体系执行 Base、Table、Field、Record 的查询与增删改。适用于创建 AI 表格、搜索表格、读取...
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
mcporter call '<DINGTALK_MCP_URL>' .list_bases limit=5
mcporter call '<DINGTALK_MCP_URL>' .create_base baseName='我的项目'
mcporter call '<DINGTALK_MCP_URL>' .create_records \ --args '{"baseId":"base_xxx","tableId":"tbl_xxx","records":[{"cells":{"fld_name":"张三"}}]}'
mcporter call '<DINGTALK_MCP_URL>' .query_records \ --args '{"baseId":"base_xxx","tableId":"tbl_xxx","limit":10}'
python3 scripts/import_records.py base_xxx tbl_xxx data.csv
按 新版 MCP schema 工作:
baseIdtableIdfieldIdrecordId不要再用旧版
dentryUuid / sheetIdOrName / fieldIdOrName。
推荐使用
mcporter 0.8.1 及以上版本。
输出模式兼容说明:
mcporter 0.8.1+ 可直接调用--output textmcporter 的输出处理方式在真正开始任何 AI 表格操作前,必须先检查当前
mcporter 注册的 dingtalk-ai-table MCP server 实际返回的 tools schema。但这个检查不该每次都重复做;同一个 MCP Server 地址只需要强制检查一次。
mcporter 里 dingtalk-ai-table 对应的 MCP Server 地址。~/.openclaw/workspace/.cache/dingtalk-ai-table/
建议文件名模式:
schema-check-<url-hash>.json
mcporter 里的 MCP Server 地址变了mcporter list dingtalk-ai-table --schema
如果返回的 tools 仍然是旧版这一套,例如出现:
get_root_node_of_my_documentcreate_base_applist_base_tablesadd_base_recordsearch_base_recordlist_base_field或者整体仍然基于:
dentryUuidsheetIdOrNamefieldIdOrName那么说明:虽然 skill 文件已经是新版,但 mcporter 里注册的 MCP server 地址还是旧的,不能继续操作。
此时必须明确提示用户:
https://mcp.dingtalk.com/#/detail?mcpId=9555&detailType=marketMcpDetailmcporter 里已经注册的 dingtalk-ai-table 地址mcporter list dingtalk-ai-table --schema
只有当返回的 tools 已经变成新版 schema,例如出现:
list_basesget_baseget_tablesget_fieldsquery_recordscreate_recordsupdate_recordsdelete_recordsprepare_attachment_upload才允许继续真正的 AI 表格操作。
一旦确认当前 MCP Server 地址返回的是新版 schema,就把结果写入本地检查标记。后续只要
mcporter 里的 dingtalk-ai-table 地址没变,就不要再重复做这一步守门检查。
当前 mcporter 里注册的 dingtalk-ai-table 还是旧版 MCP schema,暂时不能按新版技能操作。 请打开 https://mcp.dingtalk.com/#/detail?mcpId=9555&detailType=marketMcpDetail ,点击右侧“获取 MCP Server 配置”按钮,复制新的 MCP Server 地址,并替换 mcporter 里已注册的 dingtalk-ai-table 地址。替换后重新检查 schema,确认出现 list_bases / get_base / create_records 等新版 tools 后,再继续操作 AI 表格。
npm install -g mcporter # 或 bun install -g mcporter
验证:
mcporter --version
在钉钉 MCP 广场 https://mcp.dingtalk.com/#/detail?mcpId=9555&detailType=marketMcpDetail 获取新版钉钉 AI 表格 MCP 的
Streamable HTTP URL。
方式一:直接配置到 mcporter
mcporter config add dingtalk-ai-table --url "<Streamable_HTTP_URL>"
方式二:使用环境变量
export DINGTALK_MCP_URL="<Streamable_HTTP_URL>"
这个 URL 带访问令牌,等同密码,不要泄露。
脚本读取本地文件时,会优先使用
OPENCLAW_WORKSPACE 作为允许根目录:
export OPENCLAW_WORKSPACE="$HOME/.openclaw/workspace"
未设置时默认使用当前工作目录。
list_basessearch_basesget_basecreate_baseupdate_basedelete_basesearch_templatesget_tablescreate_tableupdate_tabledelete_tableget_fieldscreate_fieldsupdate_fielddelete_fieldquery_recordscreate_recordsupdate_recordsdelete_recordsprepare_attachment_uploadmcporter call dingtalk-ai-table list_bases limit=10 mcporter call dingtalk-ai-table search_bases query="销售"
mcporter call dingtalk-ai-table get_base baseId="base_xxx"
mcporter call dingtalk-ai-table get_tables \ --args '{"baseId":"base_xxx","tableIds":["tbl_xxx"]}'
mcporter call dingtalk-ai-table get_fields \ --args '{"baseId":"base_xxx","tableId":"tbl_xxx","fieldIds":["fld_xxx"]}'
mcporter call dingtalk-ai-table query_records \ --args '{"baseId":"base_xxx","tableId":"tbl_xxx","limit":20}'mcporter call dingtalk-ai-table create_records
--args '{"baseId":"base_xxx","tableId":"tbl_xxx","records":[{"cells":{"fld_name":"张三"}}]}'
attachment 字段支持三种写法:
方式一:先上传,再写 fileToken(推荐,可靠)
# Step 1:申请上传地址(返回 uploadUrl 和 fileToken) mcporter call dingtalk-ai-table prepare_attachment_upload \ --args '{"baseId":"base_xxx","fileName":"report.pdf","size":102400,"mimeType":"application/pdf"}'Step 2:把文件 PUT 到 uploadUrl(必须带 Content-Type,值必须与 mimeType 完全一致)
curl -X PUT "<uploadUrl>"
-H "Content-Type: application/pdf"
--data-binary @report.pdfStep 3:把 fileToken 写入记录
mcporter call dingtalk-ai-table create_records
--args '{"baseId":"base_xxx","tableId":"tbl_xxx","records":[{"cells":{"fld_attach":[{"fileToken":"ft_xxx"}]}}]}'
方式二:直接传外链 URL(异步转存,best-effort)
mcporter call dingtalk-ai-table create_records \ --args '{"baseId":"base_xxx","tableId":"tbl_xxx","records":[{"cells":{"fld_attach":[{"url":"https://example.com/file.pdf"}]}}]}'
URL 转存是 best-effort 异步链路,返回成功仅表示已受理,不保证立即可读。可靠写入请用 fileToken 方式。
方式三:原样回传已有附件数据(保留 / 追加已有附件时使用)
从
query_records 读出的 attachment 单元格数据是完整对象数组,字段形状如下:
[ { "filename": "a.xlsx", "size": 92250, "type": "xls", "resourceId": "<id>", "resourceUrl": "<resourceUrl>" } ]
其中
type 是文件类别枚举,常见值为 "xls"、"image" 等;resourceUrl 通常为有时效的下载链接。
如需保留已有附件,把读出的值原样塞回即可。如需追加新附件,把新的
{"fileToken":"ft_xxx"} 与已有对象合并成一个数组一起传入。
update_records 的 attachment 字段格式相同,传入后会整体覆盖该字段。
python3 scripts/bulk_add_fields.py <baseId> <tableId> fields.json
fields.json 示例:
[ {"fieldName":"任务名","type":"text"}, {"fieldName":"优先级","type":"singleSelect","config":{"options":[{"name":"高"},{"name":"中"},{"name":"低"}]}} ]
兼容项:
name 会自动映射为 fieldNamephone 会自动映射为 telephonepython3 scripts/import_records.py <baseId> <tableId> data.csv python3 scripts/import_records.py <baseId> <tableId> data.json 50
说明:
fieldId 解释[{"cells": {...}}][{"fld_xxx": "value"}]OPENCLAW_WORKSPACE 沙箱限制.json / .csv 文件create_fields:最多 15get_tables / get_fields:最多 10create_records / update_records / delete_records:最多 100get_base,再 get_tables,必要时 get_fieldsfieldId--args JSONsingleSelect / multipleSelect 过滤时必须传 option ID,不是 option namereferences/api-reference.mdreferences/error-codes.mdNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.