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.md
source 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 (

![](url)
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

  1. Start with
    action: "read"
    - get plain text + statistics
  2. Check
    block_types
    in response for Table, Image, Code, etc.
  3. 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