Self-contained MCP server providing access control and real-time event subscription for Feishu (飞书/Lark) messaging platform. Supports pairing, allowlists, group-chat with mention-triggering, and file operations. State managed locally via ~/.claude/channels/feishu/access.json.
9 tools with reasonable naming (verb_noun pattern) but critical gaps in schema completeness and parameter descriptions. Most tools lack explicit input schema validation in code. Descriptions are present but generic (avg ~100 chars, below 194-char baseline). Parameters documented in descriptions but not formally typed in visible schema definitions. No output schemas documented. Error handling minimal, no recovery guidance or actionable error messages. Security concerns: file operations lack path validation; no permission gates on destructive tools (feishu:access, feishu:send, feishu:upload-file).
Manage Feishu channel access control: set DM policy (pairing/allowlist/disabled), manage allowlists, configure group chats, set mention patterns, and configure emoji reactions.
Download a file from Feishu by file key. Saves to local inbox directory.
Retrieve Feishu group chat information by chat_id. Returns group name, members, owner, and settings.
Retrieve Feishu user information by open_id or user_id. Returns name, email, avatar, and other profile details.
List all Feishu chats (DMs and groups) the bot is a member of. Returns chat IDs, names, and types.
List recent messages from a Feishu chat or group. Returns message history with sender info, timestamps, and content.
No output schemas documented for any tool. LLMs cannot predict response structure, forcing them to parse unstructured output or make assumptions about available fields.
feishu:access combines 9 distinct actions (set-dm-policy, add-user, remove-user, add-group, remove-group, set-mention-patterns, set-ack-reaction, approve-pairing, list-pending, list-access) in one tool. Should split into separate tools (set_dm_policy, add_user_to_allowlist, remove_user_from_allowlist, etc.) so agent can compose them independently.
feishu:send accepts 6 mutually exclusive content types (text, richText, imageUrl, filePath, card) but does not document which combinations are valid or what happens if multiple are provided. LLMs will guess and pass conflicting parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | 2026-07-28+ | v2 |
Add or remove an emoji reaction to a Feishu message.
Send a message to a Feishu user or group chat. Supports text, rich text with mentions, images, files, and cards. Automatically chunks large text messages.
Upload a file to Feishu and return the file key for use in messages. Supports images, documents, and other file types up to 25MB.
feishu:upload-file and feishu:download-file lack path traversal validation in visible code. assertSendable() checks only outbound files; inbound downloads to INBOX_DIR are not validated against symlink attacks or directory escape.
No error handling guidance. Tools return raw API errors or exceptions without actionable recovery hints. E.g., 'User not found' should suggest 'Try feishu:list-chats to find valid user IDs' or 'Use feishu:get-user-info with a partial name'.