MCP server that renames/moves TypeScript files and updates all imports via tsserver
This TypeScript/tsserver MCP server exposes 40 tools wrapping the TypeScript language server. While tool names are generally clear (getApplicableRefactors, completionInfo, definition), the server has critical gaps: 17 of 40 tools (42%) lack visible descriptions in the source code provided, making them unscoreable. Of the 23 tools with descriptions, most are well-written (50-200 chars, LLM-optimized). However, parameter schemas are inconsistently documented, some tools like completionInfo have full schemas with type and description; others like getMoveToRefactoringFileSuggestions, getOutliningSpans, and getSupportedCodeFixes have no visible schema definitions. Error handling is present but generic (try/catch returning String(err)). No tool annotations (readOnlyHint/destructiveHint) are visible in the code, despite the server declaring toolAnnotations=true in features. Output schemas are not documented. The server is STDIO-only, which is a hard transport limitation.
Get full details for specific completion entries. Follow-up to completion_info for richer information including documentation, full type signature, JSDoc tags, and code actions (like auto-imports). Can request details for multiple entries at once.
Get autocomplete suggestions at a position. Returns all possible completions with their kinds, sort text, and insert text. Useful for understanding what symbols, methods, or properties are available at a specific location in code.
Returns the file location(s) where a symbol is defined. The fundamental 'where is this thing declared?' query.
Like 'definition', but also returns the span of the symbol at the cursor. Useful for understanding exactly which characters constitute the symbol being queried. Returns both the definition locations and the textSpan of the queried symbol.
Generate a JSDoc comment template for a function, method, or class at a position. Returns the template text with @param, @returns, etc. based on the function signature. The returned text can be inserted above the function declaration.
17 of 40 tools (42%) have no visible description in source code. Examples: getMoveToRefactoringFileSuggestions, getOutliningSpans, getSupportedCodeFixes, selectionRange, implementation, inferReturnType, inlineVariable, moveSymbol, navtree, navto, organizeImports, prepareCallHierarchy, projectInfo, provideCallHierarchyIncomingCalls, provideCallHierarchyOutgoingCalls, provideInlayHints, quickinfo, renameFileOrDirectory, rename, signatureHelp, todoComments, typeDefinition, references, mapCode.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Find all occurrences of a symbol within a file (or set of files). Distinguishes between read and write references. More efficient than find_all_references when you only need local occurrences within specific files.
Extract the selected expression into a named constant. TypeScript infers the type. The response includes renameFilename/renameLocation so you can follow up with rename_symbol to give the constant a meaningful name.
Extract the selected code range into a new function. TypeScript auto-detects parameters and return type. The response includes renameFilename/renameLocation so you can follow up with rename_symbol to give the function a meaningful name.
Extract an inline type annotation into a named type alias. Select the type span to extract. The response includes renameFilename/renameLocation so you can follow up with rename_symbol to give the type a meaningful name.
Finds every file that imports or references a given file. The reverse dependency graph for a single file.
Navigate to the actual TypeScript source instead of .d.ts declaration files. Useful when working with libraries that have source maps or when you want to see the implementation rather than just the type declarations.
Format a range of code according to TypeScript's formatting rules. Applies consistent indentation, spacing, and line breaks. Specify a range or use the full file length to format the entire file.
Discover what refactorings are available at a position or selection. Use before attempting a refactor to see what's possible. Returns a list of available refactors with their actions, descriptions, and any reasons why certain actions may not apply.
Get available code fixes for specific error codes at a range in a TypeScript/JavaScript file. Returns the raw list of code actions tsserver suggests for the given diagnostics. Use getDiagnostics first to discover error codes and ranges, then pass them here.
Get a combined code fix that applies all instances of a fix across a file in one action. For example, "Add all missing imports" or "Remove all unused variables". Returns the full set of file edits as a CombinedCodeActions response. Use getCodeFixes first to discover available fixId values, then pass the fixId here to get the combined fix for the whole file.
Get all errors, warnings, and suggestions for a TypeScript/JavaScript file. Reports type errors, unused variables, unused imports, unreachable code, and more. Requires the file to be part of a tsconfig.json project. Unused-code diagnostics only appear if tsconfig has noUnusedLocals/noUnusedParameters enabled.
Tool annotations declared in features (toolAnnotations=true) but not visible in source code. No readOnlyHint, destructiveHint, or idempotentHint annotations found on tool definitions. This breaks the contract with clients expecting to see which tools are safe vs destructive.
STDIO-only transport. Hard cap of 50 on protocolReadiness score applies.
Output schemas not documented. Tools return complex TypeScript protocol responses (RefactorEditInfo, CompletionInfo, etc.) but no schema documentation visible for LLMs to understand result structure. Baseline: 100% of A+ tools document return types.
Error handling is generic (try/catch returning String(err)). No recovery guidance, error classification, or actionable messages.