Skip to main content
Glama
jaenster
by jaenster

ts-lsp-mcp

npm version npm downloads license

MCP server exposing TypeScript LSP-like functionality to AI agents.

Gives AI agents the same "what's the type at this position?" powers that IDE users have.

Quick Start

Install into Claude Code

# Install to current project (recommended)
npx ts-lsp-mcp install cc

# Or install globally for all projects
npx ts-lsp-mcp install cc --global

That's it! The MCP server is now available to Claude Code.

Uninstall

npx ts-lsp-mcp uninstall cc

Related MCP server: code-dev-intel

Manual Installation

Global npm install

npm install -g ts-lsp-mcp
ts-lsp-mcp install cc

Manual config

Add to your Claude Code MCP config (.mcp.json in project or ~/.claude/settings.json globally):

{
  "mcpServers": {
    "ts-lsp-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "ts-lsp-mcp", "serve", "--stdio"]
    }
  }
}

HTTP/SSE Mode

For remote clients or debugging:

ts-lsp-mcp --http --port 3000

Endpoints:

  • GET /sse - SSE connection

  • POST /message - Send messages

  • GET /health - Health check

Available Tools

Tool

Description

getTypeAtPosition

Get the TypeScript type at a specific file:line:col

getDefinition

Go to definition

getReferences

Find all references

getHover

Get hover documentation

getCompletions

Get autocomplete suggestions

getDiagnostics

Get type errors and warnings

traceType

Trace where a type comes from and how it's composed

runTypeTests

Run type assertions from @ts-lsp-mcp comments

checkInlineCode

Type-check inline TypeScript without creating files

Type Test Assertions

Add type assertions to your code:

// @ts-lsp-mcp expect-type: string
const name = user.name;

// @ts-lsp-mcp expect-type: User
const user = createUser({ name: 'Alice' });

// @ts-lsp-mcp expect-error: 2322
const bad: number = "oops";  // Should have error 2322

Run tests:

runTypeTests({ file: "src/types.ts" })
runTypeTests({ pattern: "**/*.type-test.ts" })

Example Usage

Get type at position

Supports unified file:line:col format:

{
  "tool": "getTypeAtPosition",
  "arguments": {
    "file": "src/user.ts:10:5"
  }
}

Or separate parameters:

{
  "tool": "getTypeAtPosition",
  "arguments": {
    "file": "src/user.ts",
    "line": 10,
    "col": 5
  }
}

Response:

{
  "type": "User",
  "expanded": "{ id: number; name: string; email: string }",
  "symbol": "user",
  "kind": "variable"
}

Check for type errors

{
  "tool": "getDiagnostics",
  "arguments": {
    "file": "src/user.ts"
  }
}

Type-check inline code

{
  "tool": "checkInlineCode",
  "arguments": {
    "code": "const x: number = 'bad';"
  }
}

Response:

{
  "valid": false,
  "diagnostics": [{
    "line": 1,
    "col": 7,
    "code": 2322,
    "message": "Type 'string' is not assignable to type 'number'."
  }]
}

Features

  • Multi-project support: Works with monorepos with multiple tsconfigs

  • Auto-discovery: Finds tsconfig.json automatically

  • Smart file resolution: Accepts absolute, relative, or unique filenames

  • Virtual files: Type-check unsaved code with the content parameter

  • Efficient: Long-lived daemon caches TypeScript projects

CLI Options

ts-lsp-mcp [command] [options]

Commands:
  serve              Start the MCP server (default)
  install <target>   Install into an AI assistant (cc, claude-code, claude)
  uninstall <target> Uninstall from an AI assistant

Serve options:
  --stdio           Use stdio transport (default)
  --http            Use HTTP/SSE transport
  --port <port>     HTTP server port (default: 3000)
  --host <host>     HTTP server host (default: 127.0.0.1)
  --debug           Enable debug logging

Install options:
  --global          Install globally (user scope) instead of project
  --name <name>     Custom name for the MCP server (default: ts-lsp-mcp)

General:
  -V, --version     Output version number
  -h, --help        Display help

License

MIT

Available Tools

9 tools
checkInlineCodeA

Type-check inline TypeScript code without creating a file

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesTypeScript code to type-check
fileNameNoVirtual filename__inline__.ts
tsconfigNoPath to tsconfig.json for compiler settings

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses no file creation, but does not mention return value, error behavior, or side effects. Adequate but minimal.

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 with verb-first structure. No wasted words; concise and to the point.

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?

With no output schema, the description fails to explain what the tool returns (e.g., diagnostics or success status). This is a gap for a type-checking tool, making it only adequately 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 clear descriptions for all three parameters. The tool description adds no additional 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 verb 'type-check' and the resource 'inline TypeScript code', and differentiates from siblings like getCompletions or getDiagnostics by emphasizing 'without creating a file'.

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 use for quick inline checks but does not explicitly compare to siblings or state when not to use it. There is no guidance on alternatives.

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

getCompletionsC

Get autocomplete suggestions at a position

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
prefixNoFilter completions starting with this prefix
contentNoFile content for virtual/unsaved files
maxResultsNoMaximum number of results
projectRootNoProject root directory (auto-detected if omitted)

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must disclose all behavioral traits. It only states the basic function and fails to mention whether it works on unsaved files, whether it requires network access, or how it handles ambiguous positions. The description is too brief to adequately inform an agent about the tool's behavior.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It does not front-load key information or organize details hierarchically. While brevity is valued, the description could be more informative without becoming verbose.

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 7 parameters and no output schema, the description should cover how parameters interact (e.g., file path vs. content, line/col overrides). It fails to explain return format or pagination. The description is incomplete for a tool with this 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 covers all parameters with clear descriptions (100% coverage). The tool description adds no extra meaning beyond what the schema already provides, so it meets the baseline but does not enhance understanding.

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 'Get autocomplete suggestions at a position' clearly indicates the tool's purpose: to retrieve autocomplete suggestions, with an implied positional context. However, it does not differentiate from sibling tools like getHover or getDefinition, which could be confused for providing similar context-specific information.

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. It does not specify prerequisites (e.g., file must be in a project), nor does it indicate scenarios where this tool would be inappropriate. The lack of usage context forces the agent to infer from the name alone.

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

getDefinitionA

Get the definition location(s) for a symbol at a position (go-to-definition)

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
contentNoFile content for virtual/unsaved files
projectRootNoProject root directory (auto-detected if omitted)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states that this is a read operation ('get'), but does not disclose error handling, behavior when a symbol is not found, or any side effects. The description is accurate but minimal.

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, well-structured sentence that is concise and front-loaded. Every word serves a purpose with no redundant 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?

Given the commonality of the go-to-definition operation and the presence of sibling tools, the description provides sufficient context for most agents. However, it does not describe the return format or behavior for edge cases, which would be desirable.

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 input schema already fully documents all 5 parameters. The description adds no additional meaning beyond what the schema provides. 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 verb 'Get', the resource 'definition location(s)', and the context 'for a symbol at a position'. The parenthetical 'go-to-definition' reinforces the purpose. It is distinct from sibling tools like getHover and getReferences.

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 lacks explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or when not to use it. The purpose is clear but the agent must infer usage from the name alone.

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

getDiagnosticsB

Get TypeScript diagnostics (errors, warnings) for a file or project

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoFile to check (omit for all project files)
contentNoFile content for virtual/unsaved files
severityNoFilter by severityall
projectRootNoProject root directory

TDQS

B3.2/5.0
Behavior2/5

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

Without annotations, the description carries full burden for behavioral traits but only states the basic function. It does not disclose how diagnostics are computed, effects of parameters like content or projectRoot, or whether file changes are required.

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?

A single, well-structured sentence that conveys the core purpose without wasted words. It is appropriately sized for the tool's simplicity.

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?

The description lacks details on return values (no output schema) and behavior for virtual files or multi-file projects. Given 4 parameters, the minimal description fails to fully cover operational 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 baseline is 3. The description adds no additional parameter context beyond what the schema already provides, such as clarifying the interplay between file and projectRoot.

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 gets TypeScript diagnostics (errors, warnings) for a file or project, using a specific verb and resource. It implicitly distinguishes from sibling tools like getCompletions or getHover, which serve different purposes.

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 checkInlineCode. The description implies diagnostics retrieval but provides no context for preferred usage scenarios or exclusions.

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

getHoverB

Get hover information (documentation, type signature) at a position

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
contentNoFile content for virtual/unsaved files
projectRootNoProject root directory (auto-detected if omitted)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral transparency. It only states the tool gets hover information but does not disclose response format, potential failure modes, or any 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.

Conciseness4/5

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

The description is a single, well-front-loaded sentence that efficiently conveys the core purpose. It is concise with no unnecessary words.

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 the complexity (5 parameters, no output schema, 8 sibling tools), the description is too terse. It does not explain parameter interplay (e.g., file with line:col suffix, overriding) or return format, leaving the agent under-informed.

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 adds no parameter semantics beyond the schema, neither clarifying relationships nor providing usage examples.

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 hover information (documentation and type signature) at a position. It uses specific verbs and resources, and distinguishes itself from siblings like getTypeAtPosition (which returns only type) and getDefinition (which returns location).

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 is provided on when to use this tool versus alternatives like getDefinition or getTypeAtPosition. The agent receives no hints about preferred context or exclusion criteria.

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

getReferencesB

Find all references to a symbol at a position

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
contentNoFile content for virtual/unsaved files
maxResultsNoMaximum number of results
projectRootNoProject root directory (auto-detected if omitted)
includeNodeModulesNoInclude references in node_modules

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, rate limits, or result format. The agent must infer that it is a read operation.

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, concise sentence that efficiently conveys the tool's purpose. No wasted words.

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?

With 7 parameters and no output schema, the description is too brief. It fails to explain the concept of 'references', how to specify position (e.g., :line:col), or the return format.

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 baseline is 3. The description adds no extra meaning beyond the schema; it does not explain parameter semantics 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 it finds all references to a symbol at a position. This distinguishes it from siblings like 'getDefinition' (go to definition) and 'getHover' (hover info).

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 like 'getDefinition' or 'getTypeAtPosition'. The description implies usage for reference finding but lacks explicit context or exclusions.

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

getTypeAtPositionC

Get the TypeScript type at a specific position in a file

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
contentNoFile content for virtual/unsaved files
expandDepthNoHow deep to expand nested types (0=just name, 5=full detail)
projectRootNoProject root directory (auto-detected if omitted)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description carries full burden. It fails to mention any behavioral traits such as whether the tool is read-only, error handling for invalid positions, or performance considerations, leaving the agent with minimal insight.

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, clear sentence with no extraneous words, earning its place by being maximally concise.

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 having 6 parameters and no output schema, the description omits any hint about return format, depth expansion, or handling of virtual files. It is insufficient for an agent to use the tool correctly without additional assumptions.

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 adds no extra meaning beyond 'get the type at a position', which is already implied. Baseline 3 is appropriate as the description does not compensate for any gaps.

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 verb 'Get', resource 'TypeScript type', and context 'at a specific position in a file', effectively distinguishing it from siblings like getHover or getDefinition. However, it does not differentiate from traceType, which also involves types.

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 usage guidance is provided. The description does not indicate when to use this tool over alternatives like getHover or getDefinition, nor does it mention any prerequisites or exclusions.

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

runTypeTestsB

Run type test assertions from files with @ts-lsp-mcp expect-type/expect-error comments

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoSpecific file to test
patternNoGlob pattern for test files
projectRootNoProject root directory

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It fails to mention side effects (e.g., file modifications), authentication needs, or performance characteristics. The minimal description does not compensate for missing 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 a single, focused sentence that front-loads the verb and resource. It is efficient but could be improved by separating purpose from details for better scanability.

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?

No output schema is provided, and the description does not describe return values (e.g., pass/fail, error messages). Given the tool type (test runner) and three parameters, the description lacks essential details for an agent to use it 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 coverage is 100% with all parameters described. The description adds context about the comment format (@ts-lsp-mcp expect-type/expect-error) beyond the schema, but does not explain parameter interactions (e.g., precedence when both file and pattern are provided). 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 uses a specific verb ('Run') and resource ('type test assertions from files with @ts-lsp-mcp expect-type/expect-error comments'), clearly differentiating from sibling tools that focus on code intelligence (e.g., getHover, getDiagnostics).

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 for running type tests but does not explicitly state when to use this tool versus alternatives. No exclusions or prerequisites are provided, leaving usage context inferred from sibling tool names.

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

traceTypeC

Trace where a type comes from and how it is composed

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoColumn number (1-indexed), overrides :col in file
fileYesFile path with optional :line:col suffix (e.g., "src/user.ts:10:5")
lineNoLine number (1-indexed), overrides :line in file
depthNoHow deep to trace type composition
contentNoFile content for virtual/unsaved files
projectRootNoProject root directory

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It only states the tool 'traces' but does not specify what is returned, whether it is read-only, or any side effects. This is insufficient for an agent to understand its behavior.

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 a single, concise sentence that front-loads the key action ('Trace where a type comes from...'). It avoids unnecessary words, though it could be slightly more informative without losing conciseness.

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 6 parameters (5 optional), no output schema, and no annotations, the description is too brief to be complete. It omits what the trace output looks like, how depth works, and any constraints, leaving significant gaps for an 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?

The input schema has full (100%) parameter descriptions, so the burden on the description is reduced. The description itself adds no additional parameter meaning beyond the schema, but the schema already covers parameter semantics adequately.

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 traces type origin and composition, using a specific verb and resource. It distinguishes from siblings like getDefinition or getTypeAtPosition, which return definitions or type info, while traceType focuses on tracing composition.

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 such as getDefinition or getTypeAtPosition. The description does not mention prerequisites, exclusions, or typical use cases, leaving agents to guess its appropriate context.

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. 9 tool updatesv0.1.3
    • First observedcheckInlineCode
    • First observedgetCompletions
    • First observedgetDefinition
    • First observedgetDiagnostics
    • First observedgetHover
    • First observedgetReferences
    • First observedgetTypeAtPosition
    • First observedrunTypeTests
    • First observedtraceType

TDQS

B3.4/5.0
Disambiguation5/5

Each tool targets a distinct LSP feature (type-checking, completions, definitions, diagnostics, hover, references, type queries, type tests, type tracing). There is no overlap or ambiguity between tools.

Naming Consistency4/5

Most tools follow a 'get' + noun pattern (getCompletions, getDefinition, etc.), with two exceptions: 'checkInlineCode' uses 'check' and 'runTypeTests' uses 'run'. This minor inconsistency prevents a perfect score.

Tool Count5/5

9 tools is an appropriate size for a TypeScript LSP server. It covers essential features without being bloated or too sparse.

Completeness4/5

The tools cover core LSP operations (diagnostics, hover, definition, references, completions, type queries) and even include niche features (type tracing, type tests). Missing common operations like code actions, rename, or formatting, but the set is largely complete for its apparent purpose.

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
    Not graded
    quality
    D
    maintenance
    Provides AI agents with language-aware code analysis through the Language Server Protocol, enabling tasks like getting code insights and diagnostics.
    16
    191
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A self-hosted MCP and HTTP server for TypeScript code intelligence, providing AI agents with fast semantic code navigation tools like finding definitions, references, implementations, file outlines, dependency graphs, and search.
    749
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes type-aware code navigation and fast file search to AI agents via language servers, enabling definitions, references, symbols, and file lookup without reading entire codebases.
    2,757
    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/jaenster/ts-lsp-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server