MCP server for integrating with Lark (DingTalk) to manage calendar events, send messages, and search users
The server defines 5 tools with complete input schemas and descriptions visible in src/index.ts. However, there are several quality issues that prevent a higher score: (1) Output schemas are completely undocumented, no tool declares what it returns, forcing LLMs to infer structure from tool execution. (2) Parameter descriptions contain anti-patterns like example values ('2024-03-20T10:00:00+08:00') that LLMs tend to reuse literally. (3) Two tools (list_events, create_event) have timezone-specific requirements buried in descriptions rather than enforced via constraints. (4) The search_user_in_supabase tool has a vague description ('Search for a user') that doesn't explain what fields are searchable or what the response contains. (5) No error handling guidance, tools describe success paths but not failure recovery. (6) The add_attendees tool has complex conditional parameter logic (type enum determines which ID field applies) that is documented but not enforced by schema. Average tool quality is fair but not production-ready.
Add attendees to a calendar event on Lark
Create a calendar event on Lark
List events from the user on Lark
Search for a user in Supabase database by partial name and get their user ID and calendar ID
Send a message to the user on Lark
Output schemas completely undocumented. No tool declares what fields are returned, forcing LLMs to infer structure and plan downstream calls without knowing what data is available.
Parameter descriptions contain example values (e.g., '2024-03-20T10:00:00+08:00') that LLMs commonly reuse literally instead of adapting to context. Timezone requirement should be enforced via schema constraints, not example text.
No error handling guidance or recovery instructions. Tools describe happy-path behavior but do not tell the LLM what to do if a call fails (e.g., 'User not found, try search_user_in_supabase').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
add_attendees has undocumented conditional parameter logic: the 'type' enum determines which ID field (user_id, chat_id, resource_id, third_party_email) is valid. LLMs may pass invalid combinations unless schema enforces mutual exclusivity.
search_user_in_supabase description is too generic ('Search for a user in Supabase database'). Does not explain which fields are searchable (user_name only?), what the response contains (user_id + calendar_id?), or when to call this vs direct ID lookup.
Timezone requirement (UTC+8 only) is stated in parameter descriptions but not in a schema constraint or enum. LLMs may pass other timezones, expecting the server to handle them.