Model Context Protocol server for LeetCode using GraphQL
The LeetCode MCP server provides 7 tools with reasonable naming conventions (all verb-prefixed: get-*, search-*) and consistent parameter schemas using Zod. However, tool descriptions are universally too brief (7-20 characters), falling below the 34-character minimum baseline for quality tools. Parameter descriptions are present and mostly clear, but output schemas are completely undocumented, responses are returned as raw JSON without formal schema declaration. Error handling is present but generic ('Error: <message>'), lacking actionable recovery guidance. The server implements all tools with Zod validation and explicit error try-catch blocks, which is good, but descriptions fail to meet the 10-1024 character requirement and do not explain WHEN to use each tool or what field names appear in responses.
Get contest details
Get daily challenge
Get problem details
Get user contest ranking
Get user profile
Get user submissions
Search problems
All tool descriptions are critically short (7-20 characters), far below the 34-character (p10) baseline. Examples: 'Get contest details', 'Get daily challenge', 'Get user profile'. These lack context for LLM tool selection and do not explain WHEN to use each tool, what fields are returned, or how it differs from related tools.
Output schemas are completely undocumented. Tools return `{ content: [{ type: 'text', text: JSON.stringify(data) }] }` with raw API responses, but there is no formal schema declaration telling LLMs what fields to expect. Without documented response structure, agents cannot plan chaining calls or extract specific fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Error handling is generic and non-actionable. All tools catch errors and return `{ content: [{ type: 'text', text: 'Error: <message>' }], isError: true }`. This tells the LLM nothing about whether the error is retryable, user-fixable, or fatal, or what recovery steps exist.
search-problems accepts optional parameters (tags, difficulty, limit, skip) but the description does not explain the valid format for tags ('+' separator is mentioned once but not reinforced), nor does it document pagination behavior or the total count field returned.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are declared. All tools are read-only (appropriate for LeetCode API), but the MCP server does not signal this via tool annotations, forcing LLMs to infer from descriptions alone.