Openclaw feishu-doc
install
source · Clone the upstream repo
git clone https://github.com/openclaw/openclaw
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/openclaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/extensions/feishu/skills/feishu-doc" ~/.claude/skills/openclaw-openclaw-feishu-doc && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/openclaw "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/extensions/feishu/skills/feishu-doc" ~/.openclaw/skills/openclaw-openclaw-feishu-doc && rm -rf "$T"
manifest:
extensions/feishu/skills/feishu-doc/SKILL.mdsource content
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
/urlfile_path - optional
overridefilename - optional
parent_block_id
Reading Workflow
- Start with
- get plain text + statisticsaction: "read" - Check
in response for Table, Image, Code, etc.block_types - If structured content exists, use
for full dataaction: "list_blocks"
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