Thin lark-cli wrapper that pushes Feishu messages into Claude Code via MCP channel and lets Claude reply with markdown / image / file / interactive cards through lark-cli.
Five tools with complete input schemas and descriptions. Naming follows verb_noun pattern (feishu_reply, feishu_send_markdown, feishu_allowlist, feishu_pair). Descriptions are adequate (80-180 chars) but lack actionable context for LLM selection. Parameters are typed and mostly described, but several lack format/constraint guidance. No output schemas documented. Error handling is minimal, no recovery guidance or categorization. feishu_allowlist has a conditional parameter (open_id required only for add/remove) that is underdocumented. feishu_pair lacks context on how to obtain the pairing code.
Manage the Feishu sender allowlist (list/add/remove). When empty, accepts all senders.
Complete pairing via 5-char code. Un-allowlisted senders get a pairing code via DM; run this tool with that code to authorize them.
Reply to a Feishu message with plain text. Wraps `lark-cli im +messages-reply --text`.
Reply to a Feishu message with markdown (auto-converted to Feishu post format: bold, italics, lists, code blocks, image URLs inlined). Wraps `lark-cli im +messages-reply --markdown`.
Send a fresh markdown message to a chat (NOT a reply to a specific message). Use for proactive notifications. Wraps `lark-cli im +messages-send --markdown`.
No output schemas documented. LLMs cannot infer what fields to expect from tool responses, forcing them to guess at downstream data extraction and chaining.
feishu_allowlist has conditional required parameters: open_id is required for 'add' and 'remove' actions but not for 'list'. This dependency is not documented in the schema or parameter descriptions.
feishu_pair description lacks context on how to obtain the 5-char pairing code. LLMs cannot determine when to call this tool or what preconditions must be met.
No error handling guidance. Tool descriptions do not explain what errors are possible, whether they are retryable, or what the LLM should do next (e.g., 'If message_id is invalid, try searching recent messages first').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Parameter descriptions lack format constraints. message_id and chat_id are described as 'om_xxx' and 'oc_xxx' but no regex pattern or length constraint is provided. LLMs may pass invalid formats.