Skip to main content

feishu-interaction

Feishu/Lark platform interaction via MCP - documents, tasks, calendar, Bitable, messaging

Source facts

Repository
markus-global/markus
Last source activity
July 27, 2026 at 10:18
Detected SKILL.md language
English
Stars
201
Forks
15

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions ยท Read-only preview
name
feishu-interaction
description
Feishu/Lark platform interaction via MCP - documents, tasks, calendar, Bitable, messaging
# Feishu/Lark Platform Interaction You have access to the Feishu/Lark platform via MCP tools (prefixed `feishu-lark__`). This enables you to interact with the user's Feishu workspace: search and read documents, manage tasks, create calendar events, operate Bitable databases, and send messages. ## Available Capabilities ### Documents (ๆ–‡ๆกฃ) - `docx.v1.document.rawContent` โ€” Read document content - `docx.builtin.import` โ€” Import documents (create new docs from content) - `docx.builtin.search` โ€” Search documents by keyword - `wiki.v2.space.getNode` โ€” Get Wiki node content - `wiki.v1.node.search` โ€” Search Wiki nodes ### Tasks (ไปปๅŠก) - `task.v2.task.create` โ€” Create a new task with title, description, due date - `task.v2.task.patch` โ€” Update an existing task - `task.v2.task.addMembers` โ€” Add members to a task - `task.v2.task.addReminders` โ€” Add reminders to a task ### Calendar (ๆ—ฅๅކ) - `calendar.v4.calendarEvent.create` โ€” Create a calendar event - `calendar.v4.calendarEvent.patch` โ€” Modify a calendar event - `calendar.v4.calendarEvent.get` โ€” Get calendar event details - `calendar.v4.freebusy.list` โ€” Query free/busy status - `calendar.v4.calendar.primary` โ€” Get primary calendar info ### Bitable (ๅคš็ปด่กจๆ ผ) - `bitable.v1.appTable.list` โ€” List tables in a base - `bitable.v1.appTableField.list` โ€” List fields in a table - `bitable.v1.appTableRecord.search` โ€” Search records - `bitable.v1.appTableRecord.create` โ€” Create records - `bitable.v1.appTableRecord.update` โ€” Update records ### Messaging (ๆถˆๆฏ) - `im.v1.message.create` โ€” Send a message to a chat or user - `im.v1.message.list` โ€” List messages in a chat - `im.v1.chat.create` โ€” Create a new group chat - `im.v1.chat.list` โ€” List chats the bot is in ### Contacts (้€š่ฎฏๅฝ•) - `contact.v3.user.batchGetId` โ€” Batch get user IDs by email/mobile ## Best Practices ### Document Operations 1. **Search before read** โ€” Always search for documents first to find the correct `document_id` 2. **Prefer Wiki nodes** โ€” If the user mentions "็Ÿฅ่ฏ†ๅบ“" or "Wiki", use wiki APIs 3. **Cite sources** โ€” When referencing document content in replies, include the document title ### Task Management 1. **Match user intent** โ€” When user says "ๅธฎๆˆ‘ๅˆ›ๅปบไธ€ไธชไปปๅŠก", use `task.v2.task.create` 2. **Set due dates** โ€” Always ask for or infer a due date when creating tasks 3. **Add members** โ€” If the user mentions specific people, resolve their user IDs via contacts API first ### Calendar Events 1. **Check availability** โ€” Before creating an event, use `freebusy.list` to check conflicts 2. **Time zones** โ€” Default to Asia/Shanghai unless the user specifies otherwise 3. **Include details** โ€” Set description, location, and attendees when provided ### Bitable Operations 1. **Discover structure** โ€” List tables and fields before searching records 2. **Filter queries** โ€” Use search with filter conditions rather than fetching all records 3. **Batch operations** โ€” For multiple records, prefer batch create/update when available ### Messaging 1. **Format appropriately** โ€” Use markdown formatting for rich messages 2. **Respect context** โ€” Only send messages when the user explicitly asks to notify someone 3. **Interactive cards** โ€” For structured information, use `msg_type: 'interactive'` with card JSON 4. **Send text** โ€” Prefer native tool `feishu_send_message` (or MCP `im.v1.message.create`) 5. **Send local images** โ€” Use native tool `feishu_send_image` with the absolute file path. Feishu MCP **cannot** upload images/files. Never claim an image was sent via MCP alone. 6. **Empty chat list** โ€” `im.v1.chat.list` only returns groups the bot has joined. If it returns `items: []`, do **not** give up: resolve the user's `open_id` (e.g. via `calendar.v4.calendar.primary` โ†’ `user_id`, or `contact.v3.user.batchGetId`) and send with `receive_id_type=open_id` (p2p / "ๅ‘ๅˆฐๆˆ‘็š„้ฃžไนฆ"). ## Important Notes - Tool names are prefixed with `feishu-lark__` (e.g., `feishu-lark__docx.builtin.search`) - Document editing is NOT supported โ€” you can only read and import - File/image upload via MCP is NOT supported โ€” use `feishu_send_image` for local images - Always handle API errors gracefully and report them to the user - Respect rate limits: 1000 requests/minute per API endpoint ## Permission Error Handling When a tool call returns an error containing `code: 99991672` or "Access denied...scopes required", it means the Feishu application has not been granted the necessary API permissions. In this case: 1. **Extract the authorization URL** from the error message (starts with `https://open.feishu.cn/app/`) 2. **Present the link to the user** clearly, explaining they need to click it to authorize the required permissions 3. **Do NOT retry** the same tool call โ€” it will continue to fail until permissions are granted 4. **List the missing scopes** mentioned in the error so the user knows what to authorize Example response format: > The Feishu app needs additional permissions to perform this operation. > Please open the following link to authorize, then try again: > > [https://open.feishu.cn/app/cli_xxx/auth?q=docs:doc,drive:drive,...](https://open.feishu.cn/app/cli_xxx/auth?q=docs:doc,drive:drive,...) > > Missing scopes: docs:doc, drive:drive Always use the full URL as both the link text AND the href (i.e. `[full_url](full_url)`), so the user can both see the complete URL and click it directly.
View on GitHub