Single tool feishu_doc with action parameter for all document operations, including table creation for Docx.
From URL https://xxx.feishu.cn/docx/ABC123def → doc_token = ABC123def
{ "action": "read", "doc_token": "ABC123def" }Returns: title, plain text content, block statistics. Check hint field - if present, structured content (tables, images) exists that requires list_blocks.
{ "action": "write", "doc_token": "ABC123def", "content": "# Title\n\nMarkdown content..." }Replaces entire document with markdown content. Supports: headings, lists, code blocks, quotes, links, images ( auto-uploaded), bold/italic/strikethrough.
Limitation: Markdown tables are NOT supported.
{ "action": "append", "doc_token": "ABC123def", "content": "Additional content" }Appends markdown to end of document.
{ "action": "create", "title": "New Document", "owner_open_id": "ou_xxx" }With folder:
{
"action": "create",
"title": "New Document",
"folder_token": "fldcnXXX",
"owner_open_id": "ou_xxx"
}Important: Always pass owner_open_id with the requesting user's open_id (from inbound metadata sender_id) so the user automatically gets full_access permission on the created document. Without this, only the bot app has access.
{ "action": "list_blocks", "doc_token": "ABC123def" }Returns full block data including tables, images. Use this to read structured content.
{ "action": "get_block", "doc_token": "ABC123def", "block_id": "doxcnXXX" }{
"action": "update_block",
"doc_token": "ABC123def",
"block_id": "doxcnXXX",
"content": "New text"
}{ "action": "delete_block", "doc_token": "ABC123def", "block_id": "doxcnXXX" }{
"action": "create_table",
"doc_token": "ABC123def",
"row_size": 2,
"column_size": 2,
"column_width": [200, 200]
}Optional: parent_block_id to insert under a specific block.
{
"action": "write_table_cells",
"doc_token": "ABC123def",
"table_block_id": "doxcnTABLE",
"values": [
["A1", "B1"],
["A2", "B2"]
]
}{
"action": "create_table_with_values",
"doc_token": "ABC123def",
"row_size": 2,
"column_size": 2,
"column_width": [200, 200],
"values": [
["A1", "B1"],
["A2", "B2"]
]
}Optional: parent_block_id to insert under a specific block.
{
"action": "upload_image",
"doc_token": "ABC123def",
"url": "https://example.com/image.png"
}Or local path with position control:
{
"action": "upload_image",
"doc_token": "ABC123def",
"file_path": "/tmp/image.png",
"parent_block_id": "doxcnParent",
"index": 5
}Optional index (0-based) inserts the image at a specific position among sibling blocks. Omit to append at end.
Note: Image display size is determined by the uploaded image's pixel dimensions. For small images (e.g. 480x270 GIFs), scale to 800px+ width before uploading to ensure proper display.
{
"action": "upload_file",
"doc_token": "ABC123def",
"url": "https://example.com/report.pdf"
}Or local path:
{
"action": "upload_file",
"doc_token": "ABC123def",
"file_path": "/tmp/report.pdf",
"filename": "Q1-report.pdf"
}Rules:
url / file_pathfilename overrideparent_block_idaction: "read" - get plain text + statisticsblock_types in response for Table, Image, Code, etc.action: "list_blocks" for full datachannels:
feishu:
tools:
doc: true # default: trueNote: feishu_wiki depends on this tool - wiki page content is read/written via feishu_doc.
Required: docx:document, docx:document:readonly, docx:document.block:convert, drive:drive
npx skills add openclaw/openclaw/extensions/feishu/skills/feishu-docCopy the installation command above and run it in your terminal to install globally.
Add the required environment variables to your MCP client according to the skill description.
Configure and enable this skill in any MCP-compatible app (e.g. Claude or Cursor).