An MCP server that provides integration with DingTalk (钉钉) API for retrieving organizational information including departments, users, and user details.
Server has 5 tools with basic schemas and descriptions, but significant quality gaps. All tools have descriptions (10-80 chars, below 194-char baseline), and input schemas are present but minimal. Parameters lack descriptions in most cases (e.g., get_access_token has empty required array with no param docs). Tool names follow verb_noun pattern (get_*, search_*) but descriptions are terse and lack WHEN/WHY context. No output schemas documented. Error handling returns generic strings ('Error: ...') rather than actionable recovery guidance. No tool annotations (readOnlyHint, etc.). Composition is reasonable (single responsibility per tool), but parameter naming could be more explicit (e.g., 'userid' vs 'user_id').
Retrieves an access token from the DingTalk API for authentication purposes.
Retrieves a list of all departments in the organization.
Retrieves a list of users in a specific department.
Retrieves detailed information about a specific user.
Searches for a user by their name across all departments and returns their detailed information.
Output schemas not documented. Tools return unstructured strings (e.g., 'Department ID: X\nName: Y\n---') or raw dicts. LLMs cannot plan downstream calls or extract structured data reliably.
Parameter descriptions missing or minimal. 'fetch_child' has a description, but 'department_id' and 'userid' lack context. LLMs cannot infer whether to pass IDs, names, or emails.
Tool descriptions are terse (10 - 80 chars, well below 194-char baseline). Missing WHEN/WHY context. E.g., 'Retrieves an access token' does not explain when to call it or what it enables.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | <=2025-11-25 | v2 |
Error handling returns generic strings ('Error: ...') with no recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety.