dws-driven, dynamic, full-coverage DingTalk MCP server. Host-agnostic. Auto-syncs with dws upgrades, zero maintenance.
Two tools registered. dingtalk.bootstrap has a clear description (95 chars) and empty input schema (correct for no-arg tool). dynamic_dws_tools is critically problematic: it is a meta-tool that dynamically loads schemas at runtime from an external binary (dws), making static schema validation impossible. The description (156 chars) explains the pattern but does not document what individual tools do, what parameters they accept, or what they return. No per-tool schema visibility in source code. Tool names lack action verbs (dynamic_dws_tools is generic). No parameter descriptions for dynamically loaded tools. No output schema documentation. Error handling returns formatted text but lacks recovery guidance.
DingTalk MCP bootstrap diagnostic. Returns dws version & auth status. If not authenticated, run `dws auth login` in a terminal then restart this MCP server.
Dynamic tools registered from DingTalk Workspace (dws) schema. Tool names, descriptions, and input schemas are loaded at runtime from dws binary output. Each tool invokes dws command-line with user-provided arguments.
dynamic_dws_tools has no visible input schema in source code. Schemas are loaded at runtime from external dws binary output, making static validation and LLM planning impossible. Tool names, descriptions, and parameter types are not declared in the MCP server code.
dynamic_dws_tools uses a generic, non-verb name that does not convey action. LLMs cannot infer intent from 'dynamic_dws_tools'. Should be split into specific action-verb tools (e.g., create_dingtalk_*, send_dingtalk_*, list_dingtalk_*) or documented with explicit tool discovery.
No output schema documentation for either tool. dingtalk.bootstrap returns text; dynamic_dws_tools returns stdout/stderr as text. LLMs cannot plan downstream calls or extract structured data.
Error handling returns isError=true with formatted text but no recovery guidance. 'User not found' should suggest 'Try search_users() first.' Errors lack categorization (retryable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
dynamic_dws_tools invokes external dws binary with user-provided arguments. No visible input sanitization against command injection, path traversal, or malicious payloads in dispatch.ts.