Feishu Document Tool
Single tool feishu_doc with action parameter for all document operations, including table creation for Docx.
Token Extraction
From URL https://xxx.feishu.cn/docx/ABC123def → doc_token = ABC123def
Actions
Read Document
{ "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 .
Write Document (Replace All)
{ "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.
Append Content
{ "action": "append", "doc_token": "ABC123def", "content": "Additional content" }
Appends markdown to end of document.
Create 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.
List Blocks
{ "action": "list_blocks", "doc_token": "ABC123def" }
Returns full block data including tables, images. Use this to read structured content.
Get Single Block
{ "action": "get_block", "doc_token": "ABC123def", "block_id": "doxcnXXX" }
Update Block Text
{ "action": "update_block", "doc_token": "ABC123def", "block_id": "doxcnXXX", "content": "New text" }
Delete Block
{ "action": "delete_block", "doc_token": "ABC123def", "block_id": "doxcnXXX" }
Create Table (Docx Table Block)
{ "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.
Write Table Cells
{ "action": "write_table_cells", "doc_token": "ABC123def", "table_block_id": "doxcnTABLE", "values": [ ["A1", "B1"], ["A2", "B2"] ] }
Create Table With Values (One-step)
{ "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.
Upload Image to Docx (from URL or local file)
{ "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.
Upload File Attachment to Docx (from URL or local file)
{ "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:
-
exactly one of url / file_path
-
optional filename override
-
optional parent_block_id
Reading Workflow
-
Start with action: "read"
-
get plain text + statistics
-
Check block_types in response for Table, Image, Code, etc.
-
If structured content exists, use action: "list_blocks" for full data
Configuration
channels: feishu: tools: doc: true # default: true
Note: feishu_wiki depends on this tool - wiki page content is read/written via feishu_doc .
Permissions
Required: docx:document , docx:document:readonly , docx:document.block:convert , drive:drive