Skip to main content
Glama
AndyLiner13

ts-mcp-server

by AndyLiner13

ts-mcp-server

TypeScript npm version npm downloads license

A lightweight Model Context Protocol (MCP) server for TypeScript and JavaScript refactoring and code intelligence. Every tool maps directly to a tsserver protocol command — the output is the raw, unmodified response from TypeScript's compiler. Rename symbols, extract functions, move declarations between files, reorganize imports, navigate type hierarchies, explore call graphs, search symbols across your workspace, map AI-generated code into the right locations, discover which error codes have automatic fixes, and more — with every import, require, re-export, and reference updated automatically across your entire codebase.

Why

AI coding assistants can read and write code, but they struggle with structural changes that ripple across many files. Renaming a function, extracting a helper, moving a React component, or reorganizing a folder means updating every reference and import that touches it. Miss one and the build breaks.

ts-mcp-server gives any MCP-compatible client — VS Code Copilot, Claude Desktop, Cursor, Windsurf, Continue, and others — the ability to perform these refactors correctly and completely, using TypeScript's own compiler infrastructure.

Related MCP server: TypeScript Tools MCP

Features

  • 40 tools — each a 1:1 mapping to a native tsserver protocol command

Refactoring (14 tools)

  • Rename symbols — variables, functions, classes, types, properties, interfaces, enums — all references updated across every file

  • Rename / move files and folders — all import paths updated automatically

  • Extract function — extract a code range into a new function with auto-detected parameters and return type

  • Extract constant — extract an expression into a named constant with inferred type

  • Extract type — extract an inline type annotation into a named type alias

  • Infer return type — add an explicit return type annotation to a function, inferred by TypeScript

  • Move symbol — move top-level declarations to another file, all imports rewired automatically

  • Inline variable — replace all references with the variable's initializer and delete the declaration

  • Organize imports — sort, coalesce, and remove unused imports

  • Format — format a range of code according to TypeScript's formatting rules

  • Get code fixes — retrieve available auto-fixes for specific diagnostics (missing imports, type mismatches, etc.)

  • Get combined code fix — apply a fix-all action for a specific error code across a file

  • Get diagnostics — retrieve type errors, warnings, and suggestions for any file

  • Find all references — locate every usage of a symbol across the project

  • Map code — map AI-generated code snippets into a file, replacing matching declarations by name or appending new ones

  • Get supported code fixes — list every error code that has an available automatic fix, optionally scoped to a project

Code Intelligence (24 tools)

  • Quick info — full type information, documentation, and JSDoc tags for any symbol (hover info)

  • Navigation tree — complete hierarchical structure of a file (all declarations and their nesting)

  • Go to definition — jump to where a symbol is declared

  • Definition and bound span — like definition, but also returns the text span of the queried symbol

  • Find source definition — navigate to actual TypeScript source instead of .d.ts declaration files

  • Go to type definition — jump to the type's definition, not the variable's declaration

  • Go to implementation — find concrete implementations of an interface or abstract class

  • Navigate to symbol — workspace-wide symbol search by name

  • File references — find every file that imports a given file (reverse dependency graph)

  • Prepare call hierarchy — get call hierarchy entry point for a function/method

  • Incoming calls — find all callers of a function ("who calls this?")

  • Outgoing calls — find all callees of a function ("what does this call?")

  • Project info — get tsconfig.json path, file list, and language service status

  • Completion info — autocomplete suggestions at a position

  • Completion entry details — full documentation and type signature for a completion item

  • Signature help — function parameter info and overloads at a call site

  • Document highlights — all occurrences of a symbol within a file, with read/write distinction

  • Get applicable refactors — discover what refactorings are available at a position or selection

  • Selection range — get semantically meaningful selection ranges for smart expand/shrink selection

  • Move to refactoring suggestions — get suggested target files when moving a symbol

  • Doc comment template — generate JSDoc comment template for a function/method

  • Outlining spans — get foldable regions in a file

  • Inlay hints — get inlay hints (parameter names, inferred types) for a range

  • TODO comments — find all TODO/FIXME/HACK comments in a file

Design Principles

  • Pure tsserver output — every tool returns the raw, unmodified tsserver response as JSON

  • Preview mode — see exactly what would change before applying anything

  • Automatic project discoverytsconfig.json is detected automatically; no configuration needed

  • Multi-project support — monorepos, project references, and composite builds work out of the box

  • Cross-platform — Windows, macOS, and Linux

How It Works

Under the hood, ts-mcp-server communicates with TypeScript's tsserver over Node IPC — the same protocol that VS Code uses. Every tool is a thin wrapper that:

  1. Passes your input directly to a tsserver protocol command

  2. Returns the raw response — no formatting, no grouping, no filtering

Refactoring tools:

Tool

tsserver command(s)

rename

rename-fullrenameLocations-full

renameFileOrDirectory

getEditsForFileRename-full

references

references

getDiagnostics

semanticDiagnosticsSync + suggestionDiagnosticsSync

organizeImports

organizeImports-full

getCodeFixes

getCodeFixes

extractFunction

getEditsForRefactor-full

extractConstant

getEditsForRefactor-full

extractType

getEditsForRefactor-full

inferReturnType

getEditsForRefactor-full

moveSymbol

getEditsForRefactor-full

inlineVariable

getEditsForRefactor-full

format

format

mapCode

mapCode

getSupportedCodeFixes

getSupportedCodeFixes

Code intelligence tools:

Tool

tsserver command

quickinfo

quickinfo

navtree

navtree

definition

definition

typeDefinition

typeDefinition

implementation

implementation

navto

navto

fileReferences

fileReferences

prepareCallHierarchy

prepareCallHierarchy

provideCallHierarchyIncomingCalls

provideCallHierarchyIncomingCalls

provideCallHierarchyOutgoingCalls

provideCallHierarchyOutgoingCalls

projectInfo

projectInfo

completionInfo

completionInfo

completionEntryDetails

completionEntryDetails

signatureHelp

signatureHelp

documentHighlights

documentHighlights

getApplicableRefactors

getApplicableRefactors

getCombinedCodeFix

getCombinedCodeFix

getOutliningSpans

getOutliningSpans

todoComments

todoComments

docCommentTemplate

docCommentTemplate

provideInlayHints

provideInlayHints

definitionAndBoundSpan

definitionAndBoundSpan

findSourceDefinition

findSourceDefinition

selectionRange

selectionRange

getMoveToRefactoringFileSuggestions

getMoveToRefactoringFileSuggestions

There is no regex, no custom path resolution, no heuristics, no output formatting. The TypeScript compiler does all the work.

Quick Start

Install

npx ts-mcp-server

Configure Your MCP Client

Add ts-mcp-server to your client's MCP configuration.

VS Code (.vscode/mcp.json):

{
  "servers": {
    "ts-mcp-server": {
      "command": "npx",
      "args": ["ts-mcp-server"]
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "ts-mcp-server": {
      "command": "npx",
      "args": ["ts-mcp-server"]
    }
  }
}

Cursor, Windsurf, Continue — follow each client's MCP server documentation using the same npx ts-mcp-server command.

Disabling Individual Tools

Every tool can be disabled individually by setting its name to "false" in the env block of your MCP configuration. Tools are enabled by default; only tools explicitly set to "false" are skipped at startup.

VS Code (.vscode/mcp.json):

{
  "servers": {
    "ts-mcp-server": {
      "command": "npx",
      "args": ["ts-mcp-server"],
      "env": {
        "todoComments": "false",
        "getOutliningSpans": "false",
        "docCommentTemplate": "false"
      }
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "ts-mcp-server": {
      "command": "npx",
      "args": ["ts-mcp-server"],
      "env": {
        "todoComments": "false",
        "getOutliningSpans": "false",
        "docCommentTemplate": "false"
      }
    }
  }
}

The tool name in env must exactly match the tool name as listed in the Tool Reference below (e.g., "quickinfo", "getDiagnostics", "extractFunction"). Any other value — including omitting the key entirely — leaves the tool enabled.

Tool Reference

rename

Rename a TypeScript/JavaScript symbol and update all references across the project.

Parameter

Type

Required

Description

file

string

File path containing the symbol (absolute or relative to cwd)

line

number

1-based line number where the symbol appears

offset

number

1-based character offset on the line

newName

string

New name for the symbol

preview

boolean

If true, return changes without applying

Examples:

rename  file="src/utils/helpers.ts"  line=5  offset=17  newName="formatCurrency"
rename  file="src/components/Button.tsx"  line=10  offset=17  newName="PrimaryButton"
rename  file="src/types.ts"  line=3  offset=11  newName="UserProfile"
rename  file="src/utils/helpers.ts"  line=5  offset=17  newName="formatCurrency"  preview=true

renameFileOrDirectory

Rename or move a TypeScript/JavaScript file or directory and update all import paths across the project.

Parameter

Type

Required

Description

from

string

Current file or directory path (absolute or relative to cwd)

to

string

New file or directory path (absolute or relative to cwd)

preview

boolean

If true, return changes without applying

Examples:

renameFileOrDirectory  from="src/utils/helpers.ts"  to="src/utils/string-helpers.ts"
renameFileOrDirectory  from="src/Button.tsx"  to="src/components/ui/Button.tsx"
renameFileOrDirectory  from="src/components/primitives"  to="src/components/ui"
renameFileOrDirectory  from="src/old-name.ts"  to="src/new-name.ts"  preview=true

references

Find all usages of a symbol across the project.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number where the symbol appears

offset

number

1-based character offset on the line

Examples:

references  file="src/utils/helpers.ts"  line=5  offset=17
references  file="src/types.ts"  line=3  offset=11

getDiagnostics

Get all errors, warnings, and suggestions for a file. Returns semantic diagnostics and suggestion diagnostics as separate arrays.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

Examples:

getDiagnostics  file="src/utils/helpers.ts"
getDiagnostics  file="src/components/Button.tsx"

Note: Unused-code diagnostics (unused variables, unused imports) only appear if your tsconfig.json has noUnusedLocals and/or noUnusedParameters enabled.


organizeImports

Sort, coalesce, and remove unused imports in a file.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

preview

boolean

If true, return changes without applying

Examples:

organizeImports  file="src/utils/helpers.ts"
organizeImports  file="src/components/Button.tsx"  preview=true

getCodeFixes

Get available code fixes for specific error codes at a range in a file. Use getDiagnostics first to discover error codes and ranges, then pass them here.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the diagnostic range

startOffset

number

1-based start character offset

endLine

number

1-based end line of the diagnostic range

endOffset

number

1-based end character offset

errorCodes

number[]

Diagnostic error codes to get fixes for

Examples:

# Get fixes for a "Cannot find name" error (code 2304) at line 10
getCodeFixes  file="src/app.ts"  startLine=10  startOffset=1  endLine=10  endOffset=20  errorCodes=[2304]

# Get fixes for multiple error codes
getCodeFixes  file="src/app.ts"  startLine=5  startOffset=1  endLine=5  endOffset=30  errorCodes=[2304, 2552]

getCombinedCodeFix

Get a combined code fix that applies all instances of a fix across a file in one action. 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.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

fixId

string

The fixId from a code fix (e.g., "fixMissingImport", "unusedIdentifier", "inferFromUsage")

Examples:

# Get the combined "add all missing imports" fix for a file
getCombinedCodeFix  file="src/app.ts"  fixId="fixMissingImport"

# Get the combined "remove all unused variables" fix for a file
getCombinedCodeFix  file="src/app.ts"  fixId="unusedIdentifier"

extractFunction

Extract a 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 to give the function a meaningful name.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the selection

startOffset

number

1-based start character offset

endLine

number

1-based end line of the selection

endOffset

number

1-based end character offset

preview

boolean

If true, return changes without applying

Examples:

# Extract lines 10-15 into a function
extractFunction  file="src/app.ts"  startLine=10  startOffset=1  endLine=15  endOffset=1

# Preview the extraction
extractFunction  file="src/app.ts"  startLine=10  startOffset=1  endLine=15  endOffset=1  preview=true

extractConstant

Extract a selected expression into a named constant. TypeScript infers the type. The response includes renameFilename / renameLocation so you can follow up with rename to give the constant a meaningful name.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the expression

startOffset

number

1-based start character offset

endLine

number

1-based end line of the expression

endOffset

number

1-based end character offset

preview

boolean

If true, return changes without applying

Examples:

# Extract an expression into a constant
extractConstant  file="src/app.ts"  startLine=8  startOffset=12  endLine=8  endOffset=35

# Preview the extraction
extractConstant  file="src/app.ts"  startLine=8  startOffset=12  endLine=8  endOffset=35  preview=true

moveSymbol

Move top-level declarations (functions, classes, types, constants) to another file. All imports across the project are rewired automatically. If the target file doesn't exist, tsserver creates it.

Parameter

Type

Required

Description

file

string

Source file path (absolute or relative to cwd)

startLine

number

1-based start line of the declaration

startOffset

number

1-based start character offset

endLine

number

1-based end line of the declaration

endOffset

number

1-based end character offset

targetFile

string

Destination file path (absolute or relative to cwd)

preview

boolean

If true, return changes without applying

Examples:

# Move a function to a utility file
moveSymbol  file="src/app.ts"  startLine=20  startOffset=1  endLine=35  endOffset=2  targetFile="src/utils/helpers.ts"

# Move a type to a shared types file
moveSymbol  file="src/components/Button.tsx"  startLine=1  startOffset=1  endLine=5  endOffset=2  targetFile="src/types.ts"

# Preview the move
moveSymbol  file="src/app.ts"  startLine=20  startOffset=1  endLine=35  endOffset=2  targetFile="src/utils/helpers.ts"  preview=true

inlineVariable

Inline a variable — replace all references with the variable's initializer and delete the declaration. Position must be on the variable name in its declaration or any usage.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number of the variable

offset

number

1-based character offset on the line

preview

boolean

If true, return changes without applying

Examples:

# Inline a variable
inlineVariable  file="src/app.ts"  line=12  offset=7

# Preview the inlining
inlineVariable  file="src/app.ts"  line=12  offset=7  preview=true

extractType

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 to give the type a meaningful name.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the type span

startOffset

number

1-based start character offset

endLine

number

1-based end line of the type span

endOffset

number

1-based end character offset

preview

boolean

If true, return changes without applying

Examples:

# Extract an inline object type into a type alias
# Given: function process(user: { id: number; name: string }) { ... }
# Select the span "{ id: number; name: string }"
extractType  file="src/app.ts"  startLine=5  startOffset=26  endLine=5  endOffset=56

# Preview the extraction
extractType  file="src/app.ts"  startLine=5  startOffset=26  endLine=5  endOffset=56  preview=true

inferReturnType

Add an explicit return type annotation to a function, inferred by TypeScript. Position must be on the function name or declaration keyword (function, async, arrow function variable name).

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number of the function

offset

number

1-based character offset on the line

preview

boolean

If true, return changes without applying

Examples:

# Add return type to a function that currently has none
# Given: function greet(name: string) { return `Hello, ${name}!`; }
# After: function greet(name: string): string { return `Hello, ${name}!`; }
inferReturnType  file="src/app.ts"  line=10  offset=10

# Preview the change
inferReturnType  file="src/app.ts"  line=10  offset=10  preview=true

quickinfo

Get the full type information, documentation, and JSDoc tags for the symbol at a given position. This is the "hover" info.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

quickinfo  file="src/utils/helpers.ts"  line=5  offset=17
quickinfo  file="src/types.ts"  line=3  offset=11

navtree

Get the complete hierarchical structure of a file — all classes, functions, variables, interfaces, type aliases, enums, and their nesting.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

Examples:

navtree  file="src/utils/helpers.ts"
navtree  file="src/components/Button.tsx"

definition

Go to the definition of a symbol. Returns the file location(s) where the symbol is declared.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

definition  file="src/app.ts"  line=10  offset=5
definition  file="src/components/Button.tsx"  line=3  offset=15

typeDefinition

Navigate to the type's definition, not the variable's declaration. Given const user: UserProfile = ..., definition goes to the variable, but typeDefinition goes to the UserProfile interface.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

typeDefinition  file="src/app.ts"  line=10  offset=12
typeDefinition  file="src/services/api.ts"  line=5  offset=8

implementation

Find concrete implementations of an interface or abstract class. Given an interface Serializable, returns every class that implements it.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

implementation  file="src/types.ts"  line=1  offset=18
implementation  file="src/interfaces/repository.ts"  line=3  offset=18

navto

Workspace-wide symbol search by name. Takes a search string and returns matching symbols across all project files with their locations and kinds.

Parameter

Type

Required

Description

searchValue

string

Symbol name or prefix to search for

file

string

Optional file for project context (absolute or relative to cwd)

maxResultCount

number

Maximum number of results to return

currentFileOnly

boolean

If true, only search the specified file

Examples:

navto  searchValue="User"  file="src/app.ts"
navto  searchValue="handle"  file="src/app.ts"  maxResultCount=10
navto  searchValue="Button"  file="src/components/Button.tsx"  currentFileOnly=true

fileReferences

Find every file that imports or references a given file. The reverse dependency graph for a single file.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

Examples:

fileReferences  file="src/utils/helpers.ts"
fileReferences  file="src/types.ts"

prepareCallHierarchy

Get the call hierarchy item(s) at a position — the entry point for call hierarchy queries. Returns the function/method name, kind, file location, and spans.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

prepareCallHierarchy  file="src/services/api.ts"  line=10  offset=17
prepareCallHierarchy  file="src/utils/helpers.ts"  line=5  offset=17

provideCallHierarchyIncomingCalls

Find all functions/methods that call the function at the given position. Answers "who calls this?"

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

provideCallHierarchyIncomingCalls  file="src/services/api.ts"  line=10  offset=17
provideCallHierarchyIncomingCalls  file="src/utils/helpers.ts"  line=5  offset=17

provideCallHierarchyOutgoingCalls

Find all functions/methods that the function at the given position calls. Answers "what does this call?"

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

provideCallHierarchyOutgoingCalls  file="src/services/api.ts"  line=10  offset=17
provideCallHierarchyOutgoingCalls  file="src/utils/helpers.ts"  line=5  offset=17

projectInfo

Get the tsconfig.json path, the full list of files in the project, and whether the language service is active.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

needFileNameList

boolean

If true, include the list of all files in the project (default: true)

Examples:

projectInfo  file="src/app.ts"
projectInfo  file="src/app.ts"  needFileNameList=false

completionInfo

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 location.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

prefix

string

Optional prefix to filter completions

triggerCharacter

string

Character that triggered completion (e.g., ., ", ', `, /, @, <, #, )

Examples:

completionInfo  file="src/app.ts"  line=10  offset=15
completionInfo  file="src/app.ts"  line=10  offset=15  prefix="get"
completionInfo  file="src/app.ts"  line=10  offset=15  triggerCharacter="."

completionEntryDetails

Get full details for specific completion entries — documentation, full type signature, JSDoc tags, and code actions (like auto-imports). Use as a follow-up to completionInfo.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

entryNames

string[]

Names of completion entries to get details for

Examples:

completionEntryDetails  file="src/app.ts"  line=10  offset=15  entryNames=["map","filter"]
completionEntryDetails  file="src/app.ts"  line=5  offset=10  entryNames=["useState"]

signatureHelp

Get function/method signature information at a call site. Returns parameter names, types, and documentation for each overload. Use when the cursor is inside function call parentheses.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset (inside the function call parentheses)

triggerReason

object

Optional: { kind: "invoked" | "retrigger" | "characterTyped", triggerCharacter?: string }

Examples:

signatureHelp  file="src/app.ts"  line=12  offset=20
signatureHelp  file="src/app.ts"  line=12  offset=20  triggerReason={"kind":"invoked"}

documentHighlights

Find all occurrences of a symbol within a file (or set of files). Distinguishes between read and write references. More efficient than references when you only need local occurrences.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

filesToSearch

string[]

Optional: limit search to these files

Examples:

documentHighlights  file="src/app.ts"  line=10  offset=5
documentHighlights  file="src/app.ts"  line=10  offset=5  filesToSearch=["src/app.ts","src/utils.ts"]

getApplicableRefactors

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 action names and descriptions.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the selection

startOffset

number

1-based start character offset

endLine

number

1-based end line of the selection

endOffset

number

1-based end character offset

triggerReason

string

"invoked" or "implicit"

Examples:

getApplicableRefactors  file="src/app.ts"  startLine=10  startOffset=1  endLine=15  endOffset=1
getApplicableRefactors  file="src/app.ts"  startLine=8  startOffset=12  endLine=8  endOffset=35

docCommentTemplate

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.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

docCommentTemplate  file="src/utils/helpers.ts"  line=10  offset=1
docCommentTemplate  file="src/services/api.ts"  line=25  offset=10

getOutliningSpans

Get code folding regions for a file. Returns the hierarchical structure of code blocks including their kinds (comment, region, code, imports). Useful for understanding file structure and complexity.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

Examples:

getOutliningSpans  file="src/app.ts"
getOutliningSpans  file="src/components/Button.tsx"

provideInlayHints

Get inlay hints (inline type annotations) for a range. Shows inferred types, parameter names at call sites, and return types. Useful for understanding what TypeScript infers without explicit type annotations.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

start

number

Start offset (0-based character position)

length

number

Length of range in characters

Examples:

# Get inlay hints for the first 1000 characters of a file
provideInlayHints  file="src/app.ts"  start=0  length=1000

# Get inlay hints for a specific range
provideInlayHints  file="src/utils/helpers.ts"  start=500  length=200

todoComments

Find all TODO, FIXME, HACK, and other configured comment markers in a file. Returns the location and text of each matching comment.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

descriptors

{text: string, priority: number}[]

Array of comment markers to search for (e.g., TODO, FIXME)

Examples:

# Find all TODO and FIXME comments
todoComments  file="src/app.ts"  descriptors=[{"text":"TODO","priority":1},{"text":"FIXME","priority":0}]

# Find TODO, FIXME, and HACK comments
todoComments  file="src/app.ts"  descriptors=[{"text":"TODO","priority":2},{"text":"FIXME","priority":1},{"text":"HACK","priority":0}]

definitionAndBoundSpan

Like definition, but also returns the text span of the symbol being queried. Useful for understanding exactly which characters constitute the symbol.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

definitionAndBoundSpan  file="src/app.ts"  line=10  offset=5
definitionAndBoundSpan  file="src/types.ts"  line=3  offset=11

findSourceDefinition

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.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based line number

offset

number

1-based character offset on the line

Examples:

findSourceDefinition  file="src/app.ts"  line=10  offset=5
findSourceDefinition  file="src/services/api.ts"  line=3  offset=15

selectionRange

Get semantically meaningful selection ranges for smart expand/shrink selection. Returns nested spans that represent progressively larger syntactic constructs (expression → statement → block → function).

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

locations

{line: number, offset: number}[]

Array of positions to get selection ranges for

Examples:

selectionRange  file="src/app.ts"  locations=[{"line":10,"offset":5}]
selectionRange  file="src/app.ts"  locations=[{"line":10,"offset":5},{"line":20,"offset":10}]

format

Format a range of code according to TypeScript's formatting rules. Applies consistent indentation, spacing, and line breaks.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

line

number

1-based start line of the range

offset

number

1-based start character offset

endLine

number

1-based end line of the range

endOffset

number

1-based end character offset

options

object

Formatting options (tabSize, indentSize, etc.)

preview

boolean

If true, return changes without applying

Examples:

format  file="src/app.ts"  line=1  offset=1  endLine=50  endOffset=1
format  file="src/app.ts"  line=10  offset=1  endLine=20  endOffset=1  preview=true
format  file="src/app.ts"  line=1  offset=1  endLine=100  endOffset=1  options={"tabSize":4}

getMoveToRefactoringFileSuggestions

Get suggested target files when moving a symbol to another file. Returns both a suggested new file name and existing files that would be good destinations. Use this before moveSymbol to choose the best target location.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

startLine

number

1-based start line of the declaration

startOffset

number

1-based start character offset

endLine

number

1-based end line of the declaration

endOffset

number

1-based end character offset

Examples:

getMoveToRefactoringFileSuggestions  file="src/app.ts"  startLine=20  startOffset=1  endLine=35  endOffset=2
getMoveToRefactoringFileSuggestions  file="src/components/Button.tsx"  startLine=1  startOffset=1  endLine=5  endOffset=2

getSupportedCodeFixes

Returns the list of all error codes that have available automatic fixes. Use this as a discovery tool before calling getCodeFixes — it tells you which error codes tsserver can fix. Optionally scope the query to a specific file's project.

Parameter

Type

Required

Description

file

string

Optional file path (absolute or relative to cwd). If provided, scopes to the file's project.

Examples:

# Get all fixable error codes globally
getSupportedCodeFixes

# Get fixable error codes scoped to a specific project
getSupportedCodeFixes  file="src/app.ts"

mapCode

Map AI-generated code snippets into a file, replacing matching declarations by name or appending new ones. Designed for AI code generation workflows where you want to merge new code into an existing file without duplicating declarations.

Parameter

Type

Required

Description

file

string

File path (absolute or relative to cwd)

contents

string[]

Code snippets to map into the file. Each is parsed independently. Functions and classes are matched by name.

focusLocations

object[][]

Nested arrays of {start, end} spans (1-based line/offset) used to enable name-based matching. Without this, code is always appended to end of file.

preview

boolean

If true, return changes without applying

How matching works:

  • Without focusLocations → code is always appended to end of file (no matching attempted)

  • With focusLocations → TypeScript searches for declarations with matching names in the pointed-to scope

  • Matching works for: functions, classes, methods, interfaces (nodes with a .name property)

  • Matching does NOT work for: const/let/var declarations (VariableStatement has no .name)

  • When a match is found, the range from first to last matching statement is replaced

  • When no match is found, code is appended to the end of the scope

Limitations:

  • Calling with multiple contents entries only applies the first match — call once per declaration to replace multiple

  • const/let/var replacements are not supported; use standard file editing instead

Examples:

# Replace an existing function (focusLocations enables name-based matching)
mapCode  file="src/utils.ts"  contents=["export function add(a: number, b: number, c = 0) { return a + b + c; }"]  focusLocations=[[{"start":{"line":1,"offset":1},"end":{"line":1,"offset":1}}]]

# Append a new function (no focusLocations — always appends)
mapCode  file="src/utils.ts"  contents=["export function multiply(a: number, b: number) { return a * b; }"]

# Preview before applying
mapCode  file="src/utils.ts"  contents=["export function add(a: number, b: number) { return a + b; }"]  focusLocations=[[{"start":{"line":1,"offset":1},"end":{"line":1,"offset":1}}]]  preview=true

Supported Languages & Frameworks

ts-mcp-server works with any project that TypeScript's language service understands:

  • TypeScript (.ts, .tsx, .mts, .cts)

  • JavaScript (.js, .jsx, .mjs, .cjs)

  • React / Next.js / Remix / Astro

  • Vue (script blocks)

  • Node.js / Express / Fastify / NestJS

  • Angular

  • Svelte (script blocks)

  • Electron

  • React Native

  • Monorepos (Turborepo, Nx, Lerna, pnpm workspaces)

If your project has a tsconfig.json (or jsconfig.json), it works.

System Requirements

Requirement

Version

Node.js

22 or later (current LTS)

TypeScript

6.x (installed automatically as a dependency)

OS

Windows, macOS, Linux

No additional dependencies or global tools are required. The server bundles everything it needs.

FAQ

Does it work without a tsconfig.json? Yes. TypeScript will create an inferred project, but explicit configuration gives better results.

Does it update package.json or non-code files? No. It updates TypeScript/JavaScript import and export statements, and path-related entries in tsconfig.json (files, include, exclude, paths).

Can I use it with JavaScript-only projects? Yes. Add a jsconfig.json (which is equivalent to tsconfig.json with allowJs: true) and the server will discover your project.

Does it work with path aliases (@/components/...)? Yes. tsserver resolves path aliases defined in tsconfig.json's paths and baseUrl settings.

Is the output modified or formatted? No. Every tool returns the raw, unmodified tsserver response serialized as JSON. Nothing is truncated, simplified, grouped, or filtered.

Available Tools

40 tools
completionEntryDetailsCompletion Entry DetailsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset
entryNamesYesNames of completion entries to get details for

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only; description adds specifics about returned data (documentation, types, JSDoc, code actions) without contradicting annotations. Discloses additional behavioral traits beyond the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundant information. Front-loaded with verb and resource, then details. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description compensates by listing return values (documentation, type signature, etc.). For a 4-param tool with 100% schema coverage, the description provides sufficient context for an agent to invoke effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 4 parameters with descriptions; description adds minimal extra meaning (confirms multiple entries via entryNames). Baseline 3 is appropriate as schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves full details for completion entries, explicitly lists included information (documentation, type signature, JSDoc, code actions), and distinguishes itself as a follow-up to completionInfo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description positions it as a follow-up to completion_info, implying sequential usage. It does not explicitly mention when not to use or list alternatives, but the context is clear enough for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

completionInfoCompletion InfoA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset
prefixNoOptional prefix to filter completions
triggerCharacterNoCharacter that triggered completion (e.g., '.', '"', "'", '`', '/', '@', '<', '#', ' ')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's claim of returning completions adds limited behavioral context. It does not mention error handling, performance, or scope of input, making it adequate but not outstanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous words. The first sentence front-loads the core action and resource, and the second adds useful detail about return values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no output schema, and many siblings, the description adequately explains the return content and purpose. However, it could mention the output structure (array of completions) or edge cases like no completions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds no additional meaning to the parameters. It restates the overall purpose without enriching any parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'autocomplete suggestions at a position', and lists the returned fields (kinds, sort text, insert text). This precisely distinguishes it from sibling tools like completionEntryDetails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the tool is useful for understanding available symbols at a location, but does not explicitly mention when not to use it or name alternatives (e.g., completionEntryDetails). This leaves some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

definitionGo to DefinitionB
Read-only

Returns the file location(s) where a symbol is defined. The fundamental 'where is this thing declared?' query.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the 'fundamental query' context but doesn't detail behavior beyond what annotations (readOnlyHint) already convey. It doesn't mention multiple definitions, error handling, or output format. With annotations covering safety, minimal extra value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences, no redundant words. The question format in the second sentence front-loads the core query intent. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite good annotations and full schema, the description lacks completeness given the complex sibling toolset and absence of output schema. It doesn't explain the return format (e.g., array of locations) or edge cases (symbol not found). More context would improve decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the schema (100% coverage). The description adds nothing about parameters; schema already defines file, line, and offset, including their types and meanings. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns file location(s) where a symbol is defined, using the simple question 'where is this thing declared?' This distinguishes it from siblings like definitionAndBoundSpan and findSourceDefinition, making the purpose immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives like definitionAndBoundSpan or findSourceDefinition. In a toolset with many similar navigation tools, explicit usage context is missing, leaving the agent to guess.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

definitionAndBoundSpanDefinition and Bound SpanA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the tool is read-only. The description adds that it returns definition locations and the textSpan, which is useful but not extensive. No contradictions exist between description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with three short sentences. It front-loads the key comparison to 'definition', then adds usage context, and finally states the return values—all without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately explains the tool's purpose and its difference from 'definition'. However, since there is no output schema, more details about the exact structure of the returned textSpan would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all 3 required parameters, so baseline is 3. The description does not provide any additional information about the parameters beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Like 'definition', but also returns the span of the symbol at the cursor.' It names the specific verb 'returns' and resource (definition locations and textSpan), distinguishing it from the sibling 'definition' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly references the sibling 'definition' and explains the added value ('also returns the span'), implying when to use it. It also states 'Useful for understanding exactly which characters constitute the symbol,' providing clear context. However, it does not explicitly state when not to use it or mention alternatives beyond 'definition'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

docCommentTemplateDoc Comment TemplateA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds the detail that the returned text can be inserted above the function declaration, but does not provide further behavioral insights. Minimal additional value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the purpose and adding a usage hint. No wasted words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 3 required params, full schema coverage, no output schema, and read-only annotations, the description is sufficient. It communicates the core function and return value. Could mention that the function must be parseable, but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description has low burden. It mentions 'at a position' but offers no extra meaning beyond the schema definitions for file, line, and offset. Baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a JSDoc comment template for a function, method, or class, specifying the verb 'Generate' and resource 'JSDoc comment template'. It also mentions the output includes @param and @returns tags based on function signature, distinguishing it from sibling tools like signatureHelp.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. There is no mention of prerequisites or situations where this tool should not be used, leaving the agent to infer usage context from the description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

documentHighlightsDocument HighlightsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset
filesToSearchNoOptional: limit search to these files

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, confirming no mutation. The description adds behavioral nuance by stating it distinguishes between read and write references, which is valuable beyond annotations. No side effects or destructive behavior are present, so a score of 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with no fluff. Critical information (purpose, differentiation, efficiency) is front-loaded. Every sentence serves a clear purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain the return format (e.g., positions with read/write kind). While the purpose is clear, the absence of output details leaves the agent partially uninformed about what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so the schema already documents all parameters with descriptions. The description mentions 'file (or set of files)' which aligns with the file and filesToSearch parameters, but adds no extra semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds occurrences of a symbol within files, distinguishes between read and write references, and explicitly differentiates from a similar tool (find_all_references) by noting efficiency for local occurrences.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'More efficient than find_all_references when you only need local occurrences within specific files.' It also implies when not to use (avoid for broad searches) and distinguishes read/write references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extractConstantExtract ConstantA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
previewYesIf true, only preview changes
endOffsetYes1-based end character offset
startLineYes1-based start line
startOffsetYes1-based start character offset

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds some behavioral context beyond annotations: it mentions TypeScript infers the type and that the response includes rename info. However, the destructiveHint annotation already indicates modification, and the description does not elaborate on the effect on the file or other side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise and to the point, with no unnecessary words. It efficiently communicates the tool's purpose and a key follow-up detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential purpose and a crucial output detail (rename info) for follow-up. Since there is no output schema, the description compensates reasonably well. However, it could mention where the constant is placed or any default naming behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all parameters have descriptions). The description does not add additional meaning to the parameters beyond what the schema already provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Extract') and the resource ('selected expression into a named constant'). It distinguishes from sibling tools like extractFunction and extractType that extract into different constructs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool (to extract an expression into a constant) and suggests a follow-up action (rename_symbol). While it does not explicitly exclude other tools, the clear purpose implicitly differentiates it from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extractFunctionExtract FunctionA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
previewYesIf true, only preview changes
endOffsetYes1-based end character offset
startLineYes1-based start line
startOffsetYes1-based start character offset

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, but the description adds value by mentioning auto-detection of parameters and return type, and the response includes renameFilename/renameLocation for follow-up. This informs the agent about side effects and response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states the primary action, second provides key follow-up information. No redundant or unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 required params and no output schema, the description covers the core action, behavioral notes, and follow-up steps. It could mention that the original code is replaced with a function call, but the destructive hint implies that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 6 parameters. The description does not add additional semantics beyond what is already in the schema; it only reiterates the purpose in general terms.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Extract' and resource 'selected code range into a new function'. It distinguishes from sibling tools like extractConstant and extractType by specifying 'function'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides follow-up guidance to use rename_symbol for naming, which helps the agent understand the workflow. However, it does not explicitly contrast with other extraction tools or indicate when function extraction is preferred over constant/type extraction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extractTypeExtract TypeA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
previewYesIf true, only preview changes
endOffsetYes1-based end character offset
startLineYes1-based start line
startOffsetYes1-based start character offset

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, and the description adds that the response includes renameFilename/renameLocation, explaining the output behavior beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that efficiently convey purpose, usage, and follow-up steps with no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core functionality and response content, and the annotation fills in the destructive nature. It is sufficiently complete for a tool with six required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description mentions selecting the type span but does not add significant extra meaning beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts an inline type annotation into a named type alias, distinguishing it from sibling tools like extractConstant or extractFunction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells when to use ('Select the type span to extract') and suggests a follow-up action with rename_symbol, providing clear usage context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fileReferencesFile ReferencesA
Read-only

Finds every file that imports or references a given file. The reverse dependency graph for a single file.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds specific behavioral context (finding importing/referencing files). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no filler, front-loaded with purpose. Every word is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple one-parameter tool with annotations. Does not describe output format but implies a list of files. Could be more complete but sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents the 'file' parameter. Description does not add further meaning beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'finds' and resource 'every file that imports or references a given file'. Distinguishes from sibling 'references' by specifying it is the reverse dependency graph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context ('reverse dependency graph') but does not explicitly state when to use this tool versus alternatives like 'references'. No exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

findSourceDefinitionFind Source DefinitionA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so no contradiction. The description adds that the tool navigates to source instead of .d.ts, which is a key behavioral detail beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with three fully documented parameters and no output schema, the description sufficiently explains purpose and usage. Could optionally mention behavior when source maps are unavailable, but not necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter (file, line, offset) has clear descriptions. The description does not add extra meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Navigate' and the resource 'actual TypeScript source instead of .d.ts declaration files', distinguishing it from sibling tools like 'definition' which target declaration files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context ('when working with libraries that have source maps or when you want to see the implementation rather than just the type declarations') but does not explicitly state when not to use it or name specific alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

formatFormatA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYesStart line (1-based)
offsetYesStart offset (1-based)
endLineYesEnd line (1-based)
optionsNoFormatting options
previewYesIf true, return edits without applying
endOffsetYesEnd offset (1-based)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true. Description adds context about applying consistent indentation/spacing/line breaks and preview mode. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-loading purpose and usage. No redundant information; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, nested options, destructive behavior), description is adequate but not exhaustive. Lacks details on return value (no output schema) and effects beyond format, but schema and annotations cover much.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented. Description adds some context (range vs full file, preview behavior) but does not significantly enhance understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Format' and resource 'a range of code according to TypeScript's formatting rules.' It specifies the scope (range or full file) and distinguishes from sibling tools like 'organizeImports' or 'rename' by focusing on formatting behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage hint: specify a range or use full file length. Does not explicitly mention when not to use or alternatives, but the sibling list includes no other formatting tool, so omission is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getApplicableRefactorsGet Applicable RefactorsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
endOffsetYes1-based end column
startLineYes1-based start line
startOffsetYes1-based start column
triggerReasonNoOptional trigger reason

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds behavioral context by detailing the return value: 'list of available refactors with their actions, descriptions, and reasons why certain actions may not apply'. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no fluff. Every sentence adds value: first states purpose, second provides usage guidance and output description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description sufficiently explains the return value. Given the sibling tools, the description provides enough context for an agent to understand this is a read-only discovery tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description does not add any additional parameter semantics beyond what is in the schema, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Discover' and specifies 'refactorings available at a position or selection', clearly identifying the tool's purpose. It distinguishes from sibling refactoring tools like extractConstant by being the preliminary discovery step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States 'Use before attempting a refactor to see what's possible', providing clear when-to-use guidance. Does not explicitly mention alternatives, but the context of sibling tools implies this is the discovery step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCodeFixesGet Code FixesA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
endOffsetYes1-based end character offset
startLineYes1-based start line
errorCodesYesDiagnostic error codes to get fixes for
startOffsetYes1-based start character offset

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond readOnlyHint annotation by specifying it returns 'raw list of code actions' from tsserver and is for TypeScript/JavaScript. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. Front-loaded with the core action and immediately follows with usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, it adequately describes the return as a 'raw list of code actions'. Could mention structure or format, but sufficient for selection and invocation. Sibling differentiation is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for all 6 parameters. The description does not add new semantic information beyond the schema, but it reinforces the context of error codes and ranges.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'Get' and resource 'code fixes' for specific error codes at a range in TypeScript/JavaScript files. Distinguishes from sibling tools like getDiagnostics and getCombinedCodeFix by emphasizing it returns raw code actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to 'Use getDiagnostics first to discover error codes and ranges, then pass them here.', providing a clear prerequisite and usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCombinedCodeFixGet Combined Code FixA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
fixIdYesThe fixId from a code fix (e.g., "fixMissingImport", "unusedIdentifier", "inferFromUsage")

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and openWorldHint=false. The description adds that the tool returns the full set of file edits as a CombinedCodeActions response, which is useful behavioral context beyond the annotations. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs, front-loading the core purpose, followed by examples and workflow. Every sentence adds value without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description sufficiently explains the return type (CombinedCodeActions response). Context is adequate for the agent to understand the tool's role among many code fix siblings, though it could mention that the fix is not applied immediately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage for both parameters. The description mentions that fixId comes from a code fix, but this adds minimal meaning beyond the schema definitions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool gets a combined code fix applying all instances of a fix across a file. It provides concrete examples ('Add all missing imports', 'Remove all unused variables') and distinguishes itself from the sibling tool getCodeFixes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use getCodeFixes first to discover available fixId values, then pass fixId to this tool. This provides clear guidance on when and how to use it, with an explicit workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getDiagnosticsGet DiagnosticsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, which is consistent. Description adds behavioral details (project requirement, conditional unused diagnostics) that go beyond annotations, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose first, then conditions. No redundant information, each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given single required param, no output schema, and simple use case, description fully covers what the tool does, what it returns, and prerequisites. Nothing missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (one param described). The description does not add additional meaning beyond the schema's description of the 'file' parameter. Baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description begins with a clear verb+resource: 'Get all errors, warnings, and suggestions for a TypeScript/JavaScript file.' It lists specific types of diagnostics, distinguishing it from sibling tools like completionInfo or getCodeFixes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides prerequisites: file must be in a tsconfig.json project, and conditions for unused-code diagnostics. Does not explicitly state when NOT to use or provide alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getEditsForFileRenameRename / Move File or FolderA

Rename or move a TypeScript/JavaScript file OR folder and automatically update all import paths across the project. Supports .ts, .tsx, .js, .jsx. tsserver auto-discovers the relevant tsconfig.json. For folders, all imports referencing files inside the folder are updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesNew file or folder path (absolute or relative to cwd)
fromYesCurrent file or folder path (absolute or relative to cwd)
previewYesIf true, show what would change without applying anything

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description effectively discloses key behaviors: automatic import path updates across the project, support for folders, and the preview mode that shows changes without applying. It does not cover error handling or mutation details beyond the preview parameter, which is acceptable for this tool's scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—three sentences with the main action front-loaded. Every sentence adds value, though the structure could be slightly improved by separating file and folder handling more distinctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is reasonably complete for a tool with no output schema, covering what the tool does and the preview feature. However, it does not describe the output format (e.g., applied changes vs. edit list) or potential side effects, leaving some ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already explains the three parameters (from, to, preview). The description adds no additional parameter-specific meaning beyond what the schema provides, meeting the baseline for coverage but not exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renames or moves a file/folder and updates import paths, specifying supported file types (.ts, .tsx, .js, .jsx). However, it does not explicitly differentiate from sibling tools like 'rename' or 'moveSymbol', which may have overlapping or distinct purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when renaming/moving files with import path updates needed, but lacks explicit when-to-use/when-not-to-use guidance or comparisons to alternatives (e.g., the 'rename' tool for symbol renames). The context of tsserver auto-discovery is helpful but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMoveToRefactoringFileSuggestionsGet Move To Refactoring File SuggestionsA
Read-only

Get suggested target files when moving a symbol to another file. Returns both a suggested new file name and existing files that would be good destinations. Use this before moveSymbol to choose the best target location.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
endOffsetYes1-based end column
startLineYes1-based start line
startOffsetYes1-based start column

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only; description adds that it returns both a suggested new file name and existing files, though more detail on response structure would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that are front-loaded and contain no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key information but could elaborate on the return structure given no output schema; adequate for a tool with well-documented parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides full coverage with descriptions for all 5 parameters; description adds no extra meaning beyond what schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves suggested target files when moving a symbol, distinguishing it from sibling tools like moveSymbol.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use this before moveSymbol, providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOutliningSpansGet Outlining SpansA
Read-only

Get code folding regions for a file. Returns the hierarchical structure of code blocks including their kinds (comment, region, code, imports). Useful for understanding file structure, complexity, and navigating large files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows it's a safe read operation. The description adds that it returns hierarchical structure and kinds, which is useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: first sentence states the core purpose, second explains return value and use cases. It is concise and front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers basic functionality and use case. However, it lacks specifics about the output format (e.g., start/end positions), which would help completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one well-described parameter (file path). The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'code folding regions for a file.' It specifies the return of hierarchical structure with kinds (comment, region, code, imports), distinguishing it from sibling tools like navto or navtree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions usefulness for understanding file structure and navigating large files, but does not explicitly state when to use this tool versus alternatives or provide exclusions among the 40+ sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSupportedCodeFixesGet Supported Code FixesA
Read-only

Returns the list of all error codes that have available code fixes. Use this as a discovery tool before calling getCodeFixes — it tells you which error codes tsserver can automatically fix. A file path must be provided to establish a project context; omitting it will cause tsserver to throw 'No Project'.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoOptional file path (absolute or relative to cwd). If provided, scopes the result to the file's project.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating read-only behavior. The description adds that omitting the file parameter causes an error ('No Project'), which is valuable behavioral context beyond annotations. No contradiction detected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the core purpose and adding critical usage guidance. Every sentence adds value; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single optional param, read-only annotation), the description is complete. It covers purpose, usage guidance, and a key error. However, it does not explicitly describe the return format (e.g., array of strings), which could be helpful but is not critical for a discovery tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description doesn’t need to repeat param details, but it adds context about why the file param is needed ('to establish a project context') and the consequence of omission. This enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: 'Returns the list of all error codes that have available code fixes.' It uses a specific verb ('Returns') and resource ('list of error codes'), and distinguishes itself from sibling tools by positioning it as a discovery tool before calling getCodeFixes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this as a discovery tool before calling getCodeFixes' and warns that omitting a file path will cause tsserver to throw an error. This provides clear context on when to use it and a prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

implementationGo to ImplementationA
Read-only

Finds concrete implementations of an interface or abstract class. Given an interface Serializable, returns every class that implements it.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description does not need to reiterate safety. It adds context about the tool's purpose but does not detail return format or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The description is concise and front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given high schema coverage and read-only annotations, the description is mostly complete. It could mention that results are file locations, but overall sufficient for a navigation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and all parameters have descriptions. The description adds no additional parameter info beyond the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds concrete implementations of an interface or abstract class, with a concrete example (Serializable). This distinguishes it from sibling tools like definition, references, and typeDefinition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you have an interface or abstract class), but it does not explicitly contrast with alternatives or mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inferReturnTypeInfer Return TypeB
Destructive

Add an explicit return type annotation to a function, inferred by TypeScript. Position must be on the function name or declaration keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line
previewYesIf true, only preview changes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and description confirms modification. Beyond that, description adds position requirement but lacks details on error cases (e.g., un-inferrable types, existing return types) or side effects (like formatting). Minimal behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with action. No wasted words. Efficiently communicates core purpose and a key constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters (all required), no output schema, and only a destructiveHint annotation, the description is too brief. It omits important context: error conditions, handling of existing return types, exact position requirements (function name vs keyword), and what happens on preview. Incomplete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description does not add any extra meaning beyond the schema for parameters file, line, offset, preview. The position requirement is mentioned in the main text but not linked to the parameters explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (add return type annotation), resource (function), and mechanism (inferred by TypeScript). Includes specific position constraint (on function name or declaration keyword). Differentiates from sibling tools that are other refactoring or completion tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like getCodeFixes or extractType. Only implies usage for adding inferred return types, but no exclusion criteria or context for when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inlineVariableInline VariableA
Destructive

Inline a variable — replace all references with the variable's initializer and delete the declaration. Position must be on the variable name in its declaration or any usage.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line
previewYesIf true, only preview changes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint: true, and the description aligns by stating 'delete the declaration.' It adds behavioral context beyond annotations by specifying the positioning constraint and the replacement of all references, which is critical for correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The first sentence states the purpose and effect, and the second provides essential positioning guidance. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a well-known refactoring with a clear action and positioning requirement, the description is largely sufficient. It could be improved by noting potential failure cases or confirming that the tool directly modifies the file (implied by destructiveHint).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so parameters are already well-documented. The description does not add new semantics for individual parameters beyond implying that 'line' and 'offset' should point to the variable name, which is more of a usage guideline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Inline a variable') and explains what it does ('replace all references with the variable's initializer and delete the declaration'). This distinguishes it from sibling refactoring tools like extractConstant or extractFunction, though it does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a specific usage condition: 'Position must be on the variable name in its declaration or any usage.' This guides where to invoke the tool but does not discuss when to use this refactoring versus alternatives (e.g., when to inline vs. extract), leaving usage context implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mapCodeMap CodeA
DestructiveIdempotent

Map/insert/replace code snippets into a file. Designed for AI code generation workflows.

How matching works:

  1. Without focusLocations → code is ALWAYS appended to end of file (no matching attempted)

  2. With focusLocations → TypeScript searches for matching declarations by NAME in the scope

  3. Matching works for: functions, classes, methods, interfaces (nodes with a 'name' property)

  4. Matching does NOT work for: const/let/var declarations (VariableStatement has no name)

When a match is found:

  • The range from first matching statement to last matching statement is REPLACED with new code

When no match is found:

  • Code is appended to the end of the scope (file or block)

Multiple contents limitation:

  • When providing multiple contents entries, only the FIRST entry's match is applied

  • To replace multiple named declarations, call mapCode once per declaration

Non-existent files:

  • tsserver opens a virtual file buffer for paths that don't exist on disk

  • Edits are returned and written as if the file exists, effectively creating it

  • Use preview=true first to verify the output before writing a new file

Usage patterns:

  • REPLACE a function: provide contents with same function name + focusLocations anywhere in file

  • ADD new code: omit focusLocations (always appends to end)

  • REPLACE const/var: NOT SUPPORTED by mapCode — use standard file editing instead

  • REPLACE multiple declarations: call mapCode separately for each one

  • CREATE a new file: provide the desired path and contents without focusLocations

Example - replacing function 'calculate' (focusLocations just needs to be in the file scope): contents: ["export function calculate(x: number) { return x * 2; }"] focusLocations: [[{ start: { line: 1, offset: 1 }, end: { line: 1, offset: 1 } }]]

Set preview=true to see edits without applying them.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
previewYesIf true, return edits without applying them
contentsYesCode snippets to map into the file. Each is parsed independently. Functions/classes are matched by name.
focusLocationsNoRequired to enable name-based matching. Point anywhere in the file/block scope to search. Without this, code is always appended.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint=true and destructiveHint=true. The description goes far beyond by detailing the exact matching algorithm (by name, only for certain node types), the behavior when match found vs. not found, the limitations of multiple contents entries, and the handling of non-existent files via a virtual buffer. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with headings, bullet points, and an example. It front-loads the core purpose and then systematically covers matching, limitations, and usage patterns. While every sentence adds value, the length is slightly high for a tool description; a more streamlined version could achieve perfect conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (four parameters, intricate matching logic, multiple edge cases like non-existent files and const/var unsupported) and the absence of an output schema, the description thoroughly covers all essential aspects. It explains matching scope, replacement versus append, how to handle multiple declarations, and how to create new files, leaving no gaps for an AI agent to fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are described in the input schema with 100% coverage. The description adds crucial meaning: it explains that without focusLocations, code is always appended; it clarifies that the focusLocations parameter enables name-based matching within a scope; and it provides a concrete example showing how to use contents and focusLocations together. This elevates understanding beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Map/insert/replace code snippets into a file. Designed for AI code generation workflows,' using a specific verb+resource and setting the tool apart. It also details how matching works and when to use alternatives, clearly distinguishing this tool from sibling tools like refactoring or completion services.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage patterns: REPLACE a function, ADD new code, CREATE a new file, and explicitly states what is NOT supported (matching const/let/var) and what to do instead ('use standard file editing'). It also recommends using preview=true to verify output and explains the multiple contents limitation. This leaves no ambiguity about when and how to invoke the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moveSymbolMove SymbolA
Destructive

Move top-level declarations (functions, classes, types, constants) to another file. Automatically rewires all imports across the project. If the target file does not exist, tsserver creates it.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
endLineYes1-based end line
previewYesIf true, only preview changes
endOffsetYes1-based end character offset
startLineYes1-based start line
targetFileYesDestination file path (absolute or relative to cwd)
startOffsetYes1-based start character offset

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true. The description adds that it automatically rewires all imports across the project and creates the target file if it doesn't exist, which provides valuable behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, concise and front-loaded. It covers the main action, side effects, and edge case (target file creation). No unnecessary words, but could be more structured (e.g., bullet points).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain what the tool returns (e.g., a code edit or confirmation). It mentions 'preview' parameter but doesn't clarify behavior when preview is true. Completeness is adequate but has gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters have descriptions in the schema. The description does not add additional meaning beyond what the schema already provides. It mentions 'top-level declarations' but does not clarify the selection range parameters further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool moves top-level declarations (functions, classes, types, constants) to another file, which is a specific verb and resource. It distinguishes from siblings like extractFunction and getMoveToRefactoringFileSuggestions by specifying the scope (top-level) and automatic import rewiring.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not explicitly state when to use it versus alternatives like extractFunction or rename. No guidance on when not to use it or prerequisites (e.g., using getMoveToRefactoringFileSuggestions first).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

organizeImportsOrganize ImportsA
DestructiveIdempotent

Sort, coalesce, and remove unused imports in a TypeScript/JavaScript file. Uses TypeScript's native organizeImports with mode 'All' (sorts, coalesces, and removes unused). Requires the file to be part of a tsconfig.json project.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
previewYesIf true, only preview changes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds detail beyond annotations by specifying that it uses TypeScript's native organizeImports with mode 'All', explaining the exact behavior (sorts, coalesces, removes unused). This aligns with the idempotentHint and destructiveHint annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two well-structured sentences, front-loading the main action and following with important context. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters and no output schema, the description provides sufficient information: what the tool does, how it works, and a critical prerequisite. The behavioral details (sorts, coalesces, removes unused) cover the main outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and parameter descriptions are clear. The description adds context that the file must be part of a tsconfig.json project, which is useful but not a significant addition beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sorts, coalesces, and removes unused imports in TypeScript/JavaScript files, specifying the verb and resource. It distinguishes from sibling tools like format or getCodeFixes by focusing specifically on import organization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a prerequisite ('Requires the file to be part of a tsconfig.json project'), which helps the user know when the tool is applicable. However, it does not explicitly mention when to use this tool versus alternatives like format, though the context implies it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepareCallHierarchyPrepare Call HierarchyA
Read-only

Returns the call hierarchy item(s) at a position — the entry point for call hierarchy queries. Returns the function/method name, kind, file location, and spans.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with the readOnlyHint annotation by not implying any side effects. It adds value by detailing the return fields (name, kind, file location, spans), which goes beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that front-load the primary purpose and then list the return information. No extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, read-only nature, full schema coverage, and lack of output schema, the description adequately covers behavior and return information. It is complete enough for an agent to understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all three parameters with descriptions (file path, line, offset). The tool description does not add additional semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Returns') and resource ('call hierarchy item(s) at a position'), and it distinguishes itself from sibling tools by calling itself 'the entry point for call hierarchy queries', which implies a specific role in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates it is the entry point for call hierarchy queries, providing context for when to use this tool before other call hierarchy commands. However, it does not explicitly state when not to use it or offer alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projectInfoProject InfoA
Read-only

Returns the tsconfig.json path, the full list of files in the project, and whether the language service is active.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
needFileNameListNoIf true, include the list of all files in the project

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description correctly implies no side effects. It adds that it returns three specific pieces of info but does not disclose potential behavior like file existence checks or project loading delays. The description is consistent with annotations and provides minimal extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that directly states the return values. No extra words, front-loaded with the key output. Appropriate length for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description lists what is returned, it lacks context about how the 'file' parameter is used (e.g., to identify the project) or the typical usage pattern. Given no output schema, a bit more detail on the return format would help. However, for a simple read tool with good annotations and schema, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for both parameters. The description does not add any information about how parameters affect the result beyond what the schema provides (e.g., it doesn't explain that 'file' determines which project to query or that needFileNameList controls the file list). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool returns: tsconfig.json path, full file list, and language service activity. It uses specific verbs and resources, and the returned data distinguishes it from sibling tools that focus on completions, definitions, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With 35+ sibling tools, the agent needs explicit context on when projectInfo is appropriate (e.g., 'Use this to get project metadata before performing other operations'). No when/when-not information is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provideCallHierarchyIncomingCallsIncoming CallsA
Read-only

Returns all functions/methods that call the function at the given position. Answers 'who calls this?'

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description does not contradict this. However, it adds no further behavioral context (e.g., whether results are exhaustive, include cross-file calls, or depth). With annotations covering the safety profile, the minimal added context is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately conveys the purpose. Every word earns its place; no wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, no output schema, and read-only annotation, the description sufficiently explains what is returned (functions/methods that call the given function). It could benefit from mentioning the result format (e.g., file, line), but is generally complete enough for an agent to understand and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for all three parameters (file, line, offset). The description does not add any extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns all functions/methods that call the function at a given position, answering 'who calls this?'. It uses specific verb 'returns' and resource, effectively distinguishing from the sibling 'provideCallHierarchyOutgoingCalls'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool ('who calls this?') but does not explicitly exclude alternative tools like 'references' or 'definition'. The context is clear for typical usage, but lacks explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provideCallHierarchyOutgoingCallsOutgoing CallsA
Read-only

Returns all functions/methods that the function at the given position calls. Answers 'what does this call?'

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint annotation by specifying that it returns called functions/methods from a given position. It does not contradict annotations and provides useful operational detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first sentence states the action and resource, the second clarifies the question it answers. Efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description hints at the return type ('returns all functions/methods') which is helpful, though a brief note on return structure would improve completeness. Overall adequate for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with clear descriptions (100% coverage). The description does not add new semantic meaning beyond what the schema provides, hence baseline score 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'returns' and resource 'functions/methods' and clarifies the scope by answering 'what does this call?'. It clearly distinguishes the tool from incoming calls sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to get outgoing calls from a position) but provides no explicit guidance on when not to use it, nor lists alternatives like 'provideCallHierarchyIncomingCalls' or prerequisites like needing a valid call site.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provideInlayHintsProvide Inlay HintsA
Read-only

Get inlay hints (inline type annotations) for a range. Shows inferred types, parameter names at call sites, and return types. Useful for understanding what TypeScript infers without explicit type annotations.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
startYesStart offset (0-based character position)
lengthYesLength of range in characters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description does not need to reiterate safety. It adds value by specifying the types of hints returned (inferred types, parameter names, return types), enriching behavioral understanding beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with three short sentences, each serving a clear purpose: what it does, what it shows, and when to use it. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately conveys what the tool returns (types, parameter names, return types). However, it could be more precise about the response structure (e.g., array of hints with positions). Still, it is fairly complete for a simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the input schema (100% coverage). The description adds no additional meaning, examples, or constraints beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get inlay hints (inline type annotations) for a range.' It specifies the verb, resource, and scope, and distinguishes from sibling tools by focusing on a specific kind of information (inferred types, parameter names, return types) not provided by other tools like completion or quickinfo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only implicitly suggests usage by stating it is 'useful for understanding what TypeScript infers.' It lacks explicit guidance on when to use this tool versus alternatives (e.g., quickinfo, typeDefinition) and does not state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quickinfoQuick InfoA
Read-only

Get type information, documentation, and JSDoc tags for a symbol at a position. Returns the hover info — kind, display string (full type signature), documentation, and tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the return value (kind, display string, documentation, tags) in detail. Annotations already indicate readOnlyHint=true, so the description adds behavioral specifics beyond safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loaded with the verb and resource, then details return value. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for a simple tool with 3 params and no output schema. Covers purpose, input, and output. Lacks explicit usage guidance but otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good descriptions for file, line, offset. Description does not add extra meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Get', resource 'type information, documentation, and JSDoc tags', and specifies input as a symbol at a position. Distinguishes itself by returning hover info, which is distinct from sibling tools like 'definition' or 'references'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives like 'definition' or 'signatureHelp'. The description implies its purpose but does not provide context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

referencesFind All ReferencesA
Read-only

Find all usages of a symbol across the project. Provide the file path and 1-based line/offset of any occurrence of the symbol. Returns references grouped by file with line text for context.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds useful behavioral details: returns references grouped by file with line text for context. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first for purpose, second for input and output structure. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description provides a reasonable overview of return format (grouped by file with line text). Slightly vague but sufficient for most agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description reiterates the parameter meaning without adding new semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it finds all usages of a symbol, specifies input (file, line, offset) and output (grouped by file with line text). Distinct from sibling tools like 'definition' or 'implementation'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly indicates when to use (when all references are needed) but provides no explicit guidance on alternatives or when not to use this tool over similar siblings like 'fileReferences'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

renameRename SymbolA

Rename a TypeScript/JavaScript symbol (variable, function, class, type, property, etc.) and update all references across the project. Provide the file path and the 1-based line/offset of any occurrence of the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line
newNameYesNew name for the symbol
previewYesIf true, only preview changes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description fails to disclose behavioral traits like mutation side effects, reversibility, or permissions needed. It says 'update all references' but does not elaborate on the nature of updates or if it's a workspace edit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states purpose, second provides usage instruction. No redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks output schema; description does not explain what the tool returns (e.g., edit list, confirmation). For a refactoring tool with cross-project impact, more context on applying changes would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond schema: restates that file/line/offset are needed but does not enrich understanding of newName or preview behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Rename a TypeScript/JavaScript symbol and update all references across the project.' It specifies the verb (rename), resource (symbol), and scope (update references), distinguishing it from sibling tools like moveSymbol or extractConstant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides basic usage instruction ('Provide the file path and the 1-based line/offset of any occurrence') but lacks explicit guidance on when to use this tool versus alternatives such as moveSymbol or inlineVariable, and no mention of prerequisites or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selectionRangeSelection RangeA
Read-only

Get semantically meaningful selection ranges for smart expand/shrink selection. Returns nested spans that represent progressively larger syntactic constructs. Useful for structural code selection (e.g., select expression → statement → block → function).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
locationsYesArray of positions to get selection ranges for

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, so the tool is safe. The description adds behavioral context by noting that the tool 'Returns nested spans that represent progressively larger syntactic constructs,' which helps the agent understand output structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—two sentences that front-load the purpose and output nature without any wasted words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, full schema coverage, and read-only annotations, the description adequately covers purpose and output. It lacks details on error handling or return format but is sufficient for use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; both parameters ('file' and 'locations') have clear descriptions. The tool's description does not add further semantic detail beyond the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get semantically meaningful selection ranges for smart expand/shrink selection.' It specifies the resource and action, distinguishing it from sibling tools like definition or references.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context: 'Useful for structural code selection (e.g., select expression → statement → block → function).' It gives an example but does not explicitly state when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signatureHelpSignature HelpA
Read-only

Get function/method signature information at a call site. Returns parameter names, types, and documentation for each overload. Use when the cursor is inside function call parentheses to understand what arguments are expected.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based column offset (inside the parentheses)
triggerReasonNoOptional reason for triggering signature help

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. The description adds that it returns parameter names, types, and documentation, which informs the agent about the nature of the response without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The description is front-loaded, concise, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description sufficiently explains the return value (parameter names, types, documentation) even without an output schema. Missing edge cases or error conditions, but adequate for a well-defined tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context about when to use (inside parentheses) but does not explain individual parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it retrieves function/method signature information at a call site, including parameter names, types, and documentation for each overload. This clearly distinguishes it from sibling tools like quickinfo or definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Use when the cursor is inside function call parentheses to understand what arguments are expected.' It does not mention when not to use, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

todoCommentsTodo CommentsA
Read-only

Find all TODO, FIXME, HACK, and other configured comment markers in a file. Returns the location and text of each matching comment. You must provide the descriptors array specifying which markers to search for.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
descriptorsYesArray of comment markers to search for

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds the requirement to provide the descriptors array, but this is already present in the schema. No additional behavioral traits (e.g., side effects, authorization needs) are disclosed beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences (approximately 35 words) with the main purpose front-loaded. Every sentence contributes essential information without redundancy or unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the main purpose and return value (location and text), it lacks details on the output format. Since no output schema is provided, a more precise description of the return structure (e.g., fields like line, column, text) would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only repeats the requirement for the descriptors array without adding new meaning or usage context that isn't already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Find' and clearly identifies the resource as 'TODO, FIXME, HACK, and other configured comment markers in a file'. It also states the return value (location and text), making the tool's purpose unambiguous and distinct from its siblings, which are mostly TypeScript IDE features.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when comment markers need to be found in a file, but it does not provide explicit guidance on when to use this tool versus alternatives. No when-to-use or when-not-to-use conditions are given, and no similar tools are compared.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

typeDefinitionGo to Type DefinitionA
Read-only

Navigates to the type's definition, not the variable's declaration. Given const user: UserProfile = ..., definition goes to the variable, but typeDefinition goes to the UserProfile interface.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path (absolute or relative to cwd)
lineYes1-based line number
offsetYes1-based character offset on the line

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare `readOnlyHint: true`, so the bar is lower. The description adds useful behavioral context (navigates to type definition) without contradicting annotations. It doesn't disclose additional traits like performance or side effects, but it's consistent and clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the key distinction, no unnecessary words. Every sentence adds value, making it highly efficient for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (navigation, no output schema), the description is complete. It covers purpose, usage, and distinction from a sibling tool, with good annotations providing safety context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (file, line, offset). The description adds no additional parameter semantics; it focuses on the tool's function. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: navigating to a type's definition, not a variable's declaration. It provides a concrete example distinguishing it from the `definition` sibling tool, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts this tool with `definition`, telling the agent when to use `typeDefinition` vs. `definition`. This provides clear usage guidance and distinguishes it from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 40 tool updatesv1.1.1
    • First observedcompletionEntryDetails
    • First observedcompletionInfo
    • First observeddefinition
    • First observeddefinitionAndBoundSpan
    • First observeddocCommentTemplate
    • First observeddocumentHighlights
    • First observedextractConstant
    • First observedextractFunction
    • First observedextractType
    • First observedfileReferences
    • First observedfindSourceDefinition
    • First observedformat
    • First observedgetApplicableRefactors
    • First observedgetCodeFixes
    • First observedgetCombinedCodeFix
    • First observedgetDiagnostics
    • First observedgetEditsForFileRename
    • First observedgetMoveToRefactoringFileSuggestions
    • First observedgetOutliningSpans
    • First observedgetSupportedCodeFixes
    • First observedimplementation
    • First observedinferReturnType
    • First observedinlineVariable
    • First observedmapCode
    • First observedmoveSymbol
    • First observednavto
    • First observednavtree
    • First observedorganizeImports
    • First observedprepareCallHierarchy
    • First observedprojectInfo
    • First observedprovideCallHierarchyIncomingCalls
    • First observedprovideCallHierarchyOutgoingCalls
    • First observedprovideInlayHints
    • First observedquickinfo
    • First observedreferences
    • First observedrename
    • First observedselectionRange
    • First observedsignatureHelp
    • First observedtodoComments
    • First observedtypeDefinition

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a specific operation in the TypeScript language server, such as completions, diagnostics, navigation, or refactoring. Descriptions clearly differentiate closely related tools like definition vs. typeDefinition and references vs. fileReferences, minimizing confusion.

Naming Consistency3/5

Tool names are consistently camelCase but mix verb-started (getCodeFixes, organizeImports) and noun-started (completionInfo, definition) patterns. Some verbs like 'provide' and 'get' are used for similar operations, reducing predictability.

Tool Count3/5

With 40 tools, the count is high but reflects the complexity of a full TypeScript language server. Each tool serves a distinct purpose, but the number exceeds the typical 3-15 range for MCP servers, making it somewhat heavy.

Completeness5/5

The tool surface covers all major areas: autocomplete, diagnostics, formatting, navigation, refactoring, renaming, file operations, and symbol search. No obvious gaps exist for common TypeScript development workflows.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A TypeScript-aware MCP server that provides coding agents with repository discovery, code intelligence, and web project context for local codebases. It enables deep symbol navigation, diagnostic reporting, and structural analysis of monorepos without requiring full IDE integration.
    7
    12
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A TypeScript/JavaScript refactoring MCP server that uses the TypeScript compiler to perform safe, type-aware code transformations such as renaming, extracting functions, and organizing imports across your codebase.
    4
    75
    12
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AndyLiner13/ts-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server