MCP server for running Vitest tests and TypeScript type checking on a project
The server defines 2 tools with clear action verbs (run_tests, type_check) and reasonable descriptions (156 - 198 chars, within baseline 34 - 392). However, parameter descriptions are sparse and lack actionable detail, input schemas lack type constraints (enums, min/max), and output format is unstructured plain text rather than typed objects. Tool definitions are explicitly visible in code via ListToolsRequestSchema handler, so inference penalty does not apply. Error handling returns isError: true with text, but lacks recovery guidance. No tool annotations (readOnlyHint, etc.) present despite both tools being read-only. STDIO transport caps protocol score at 50, but definition quality is mid-range due to schema incompleteness and lack of parameter rigor.
Run Vitest tests for the project. Can run specific test files or all tests.
Run TypeScript type checking on the project. Returns any type errors found.
Parameter descriptions lack actionable detail and constraint information. 'Optional test file or array of test files to run' does not specify: format of file paths (relative to projectDir? glob patterns?), max count of files, or examples. LLMs cannot infer validity rules.
Input schemas lack type constraints. Zod schema accepts union of [string | array | null | undefined], but the JSON Schema does not express min/max file count, path format regex, or glob pattern rules. Enums or pattern constraints would prevent LLM hallucination of invalid paths.
Output is unstructured plain text. Neither tool documents its return format. run_tests returns formatTestResults() output (inferred as 'Test Run Summary' text block) and type_check returns formatTypeErrors() output (also plain text). LLMs cannot parse structured results or extract specific test/error details for downstream reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
No tool annotations despite both tools being strictly read-only. MCP spec supports readOnlyHint (and destructiveHint for write tools). Absence means client cannot optimize caching or parallelization for safe tools.
Error handling returns a text message in isError=true response but does not guide the LLM toward recovery. For example, if Vitest fails to start, the error 'Failed to start Vitest' gives no hint about what the LLM should try next (retry? check project structure? switch tools?).
No documented return schema. The source shows formatTestResults and formatTypeErrors produce plain-text summary blocks, but there is no schema definition visible in tool registration. LLMs must infer output structure from trial-and-error.