TypeScript MCP
The TypeScript MCP server provides advanced code manipulation and analysis capabilities for TypeScript/JavaScript projects, similar to a Language Server Protocol (LSP). You can:
Move files and directories: Automatically updates all imports and references
Rename symbols: Change variables, functions, classes, etc. across the entire codebase
Delete symbols: Remove symbols and optionally their references
Find references: Locate all usages of a specific symbol
Get definitions: Retrieve symbol definitions with context
Get diagnostics: Fetch TypeScript errors and warnings
Analyze modules: List exported symbols or get detailed type signatures
Get type information: Retrieve types for symbols at specific locations
List symbols in scope: See all visible symbols at a particular location
Provides advanced code manipulation and analysis capabilities for TypeScript projects, including refactoring (renaming symbols, moving files, deleting symbols), code navigation (jump to definition, find references), diagnostics, and module analysis.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TypeScript MCPfind all functions that return User type in the project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lsmcp - Language Service Protocol MCP
A unified MCP (Model Context Protocol) server that provides advanced code manipulation and analysis capabilities for multiple programming languages through Language Server Protocol integration.
🌍 Multi-Language Support
🔍 Semantic Code Analysis
🤖 AI-Optimized
See examples/ for working examples of each supported language configuration.
Requirements
Node.js 22.0.0 or higher (required for built-in SQLite support)
Related MCP server: ts-mcp-server
Quick Start
# tsgo (reccommended)
npm add -D @mizchi/lsmcp @typescript/native-preview
npx @mizchi/lsmcp init -p tsgo
claude mcp add lsmcp npx -- -y @mizchi/lsmcp -p tsgo
# with manual --bin
claude mcp add lsmcp npx -- -y @mizchi/lsmcp --bin="<lsp-command>"RECOMMENDED WORKFLOW
🎯 Core Flow: Overview → Search → Details
1. get_project_overview # Understand the codebase
2. search_symbols # Find what you need
3. get_symbol_details # Deep dive into symbols📋 When to Use Each Tool
Initial Exploration:
get_project_overview- First tool to understand any codebaselist_dir- Browse directory structureget_symbols_overview- High-level view of file symbols
Finding Code:
search_symbols- Primary search for functions, classes, interfaceslsp_get_document_symbols- List all symbols in a specific filelsp_get_workspace_symbols- Alternative workspace-wide search
Understanding Code:
get_symbol_details- Complete information in one call (recommended)lsp_get_definitions- Jump to definition (useincludeBody: truefor full code)lsp_find_references- Find all usageslsp_get_hover- Quick type information
Code Quality:
lsp_get_diagnostics- Check for errorslsp_get_code_actions- Get available fixes
Code Modification:
lsp_rename_symbol- Safe renaming across codebaselsp_format_document- Format codereplace_range/replace_regex- Text replacements
Example Workflows
1. EXPLORING A NEW CODEBASE
1. mcp__lsmcp__get_project_overview
→ Understand structure, main components, statistics
2. mcp__lsmcp__search_symbols --kind "class"
→ Find all classes in the project
3. mcp__lsmcp__get_symbol_details --symbol "MainClass"
→ Deep dive into specific class implementation2. INVESTIGATING A BUG
1. mcp__lsmcp__search_symbols --name "problematicFunction"
→ Locate the function
2. mcp__lsmcp__get_symbol_details --symbol "problematicFunction"
→ Understand its type, implementation, and usage
3. mcp__lsmcp__lsp_find_references --symbolName "problematicFunction"
→ See all places it's called
4. mcp__lsmcp__lsp_get_diagnostics --relativePath "path/to/file.ts"
→ Check for errors3. REFACTORING CODE
1. mcp__lsmcp__search_symbols --name "oldMethodName"
→ Find the method to refactor
2. mcp__lsmcp__get_symbol_details --symbol "oldMethodName"
→ Understand current implementation and usage
3. mcp__lsmcp__lsp_rename_symbol --symbolName "oldMethodName" --newName "newMethodName"
→ Safely rename across codebase
4. mcp__lsmcp__lsp_format_document --relativePath "path/to/file.ts"
→ Clean up formatting4. ADDING NEW FEATURES
1. mcp__lsmcp__get_project_overview
→ Understand existing architecture
2. mcp__lsmcp__search_symbols --kind "interface"
→ Find relevant interfaces to implement
3. mcp__lsmcp__get_symbol_details --symbol "IUserService"
→ Understand interface requirements
4. mcp__lsmcp__lsp_get_completion --line 50
→ Get suggestions while writing new codeFALLBACK TOOLS (USE ONLY WHEN NECESSARY):
⚠️
Read- Only when you need to see non-code files or LSMCP tools fail⚠️
Grep- For text pattern searches in files⚠️
Glob- Only when LSMCP file finding doesn't work⚠️
LS- Only for basic directory listing when LSMCP fails⚠️
Bashcommands - Only for non-code operations or troubleshooting
WHEN TO USE FALLBACK TOOLS
Use standard tools ONLY in these situations:
Non-code files: README, documentation, configuration files
LSMCP tool failures: When LSMCP tools return errors or no results
Debugging: When troubleshooting why LSMCP tools aren't working
Special file formats: Files that LSMCP doesn't support
Quick verification: Double-checking LSMCP results when needed
Memory System
You have access to project memories stored in .lsmcp/memories/. Use these tools:
mcp__lsmcp__list_memories- List available memory filesmcp__lsmcp__read_memory- Read specific memory contentmcp__lsmcp__write_memory- Create or update memoriesmcp__lsmcp__delete_memory- Delete a memory file
Memories contain important project context, conventions, and guidelines that help maintain consistency.
Available Presets
lsmcp includes built-in presets for popular language servers:
tsgo- TypeScript (Recommended)typescript- typescript-language-serverrust-analyzer- Rust Analysermoonbit- MoonBitfsharp- F# (fsautocomplete)deno- Deno TypeScript/JavaScriptgopls- Go (Official Go language server)hls- Haskell Language Server (requires ghcup setup, see docs/HASKELL_SETUP.md)ocaml- OCaml Language Server
Configuration
.lsmcp/config.json
{
"$schema": "../node_modules/@mizchi/lsmcp/lsmcp.schema.json",
"preset": "tsgo",
"settings": {
"autoIndex": true,
"indexConcurrency": 10
}
}For a comprehensive configuration example, see examples/full-lsmcp-config.json.
Tools
lsmcp provides comprehensive MCP tools for code analysis and manipulation:
Note: Tool names listed below are the raw MCP tool names (snake_case, e.g. get_hover). Some clients display them with a server-qualified prefix (e.g. mcplsmcpget_hover). For naming conventions and module boundaries, see docs/TOOL_REFERENCE.md.
Core LSP Tools
lsp_get_hover - Get type information and documentation for symbols
lsp_find_references - Find all references to a symbol across the codebase
lsp_get_definitions - Navigate to symbol definitions with optional code body
lsp_get_diagnostics - Check for errors and warnings in files
lsp_get_all_diagnostics - Get diagnostics for entire project
lsp_get_document_symbols - List all symbols in a file
lsp_get_workspace_symbols - Search symbols across the entire workspace
lsp_get_completion - Get code completion suggestions
lsp_get_signature_help - Get parameter hints for function calls
lsp_format_document - Format entire documents using language server
lsp_rename_symbol - Rename symbols across the codebase
lsp_get_code_actions - Get available quick fixes and refactorings
lsp_delete_symbol - Delete a symbol and optionally all its references
lsp_check_capabilities - Check supported LSP features
High-Level Tools
get_project_overview - Quick project structure and component analysis
search_symbols - Fast symbol search using pre-built index (auto-creates index if needed)
get_symbol_details - Get comprehensive details about a symbol (hover, definition, references)
External Library Tools
index_external_libraries - Index TypeScript declaration files from node_modules
get_typescript_dependencies - List available TypeScript dependencies
search_external_library_symbols - Search symbols in indexed external libraries
resolve_symbol - Resolve symbols to their definitions in external libraries
get_available_external_symbols - Get symbols available from imported libraries
parse_imports - Parse and analyze import statements
Code Editing Tools
replace_range - Replace specific text ranges in files
replace_regex - Advanced regex-based replacements
File System Tools
list_dir - List directories with gitignore support
get_symbols_overview - High-level symbol overview by file
Memory Management
list_memories - List project memories
read_memory - Read specific memory content
write_memory - Create or update memories
delete_memory - Remove memories
Performance Optimization
LSMCP includes several performance optimizations:
Incremental Indexing: Only modified files are re-indexed
Memory Monitoring: Automatic garbage collection when memory usage is high
Batch Processing: Efficient concurrent file processing
Smart Caching: 15-minute cache for frequently accessed data
Configuration options in .lsmcp/config.json:
{
"indexConcurrency": 5,
"maxFileSize": 10485760,
"enableWatchers": true,
"memoryLimit": 1024
}Development
See CONTRIBUTING.md for detailed development setup, testing instructions, and contribution guidelines.
# Quick start
pnpm install
pnpm build
pnpm test
# Run with memory monitoring
node --expose-gc dist/lsmcp.jsDebug Logging
LSMCP has separate logging systems for MCP server and LSP client that can be controlled independently:
MCP Server Logging
Enable MCP server debug output with either environment variable:
MCP_DEBUG=1 lsmcp # Enable MCP server debug logging
LSMCP_DEBUG=1 lsmcp # Alternative (backward compatible)LSP Client Logging
Enable LSP client debug output separately:
LSP_DEBUG=1 lsmcp # Enable LSP client debug loggingCombined Logging
Enable both MCP and LSP debug output:
MCP_DEBUG=1 LSP_DEBUG=1 lsmcpLicense
MIT - See LICENSE file for details.
Available Tools
11 toolsdelete_symbolB
Delete a TypeScript/JavaScript symbol (variable, function, class, etc.) and all its references
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path containing the symbol (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| removeReferences | No | Also delete all references to the symbol | |
| root | Yes | Root directory for resolving relative paths | |
| symbolName | Yes | Name of the symbol to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the destructive action ('Delete') and the scope of deletion ('all its references'), but lacks critical details such as whether the operation is reversible, what permissions are needed, how errors are handled, or what the output looks like. For a destructive tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and resource without unnecessary words. Every part of the sentence contributes essential information about the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a destructive operation with no annotations and no output schema, the description is incomplete. It fails to address critical aspects like error handling, confirmation prompts, side effects on dependent code, or return values, leaving significant gaps for an AI agent to understand the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters thoroughly. The description adds no additional meaning about parameters beyond implying that 'symbolName' refers to a TypeScript/JavaScript symbol and 'removeReferences' relates to deleting references. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Delete') and target resource ('TypeScript/JavaScript symbol'), including what types of symbols are affected ('variable, function, class, etc.') and the scope ('and all its references'). It distinguishes itself from sibling tools like 'rename_symbol' by specifying deletion rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'rename_symbol' or 'find_references', nor does it mention prerequisites, constraints, or typical scenarios for deletion. It states what the tool does but not when it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesC
Find all references to a TypeScript/JavaScript symbol across the codebase
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path containing the symbol (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| root | Yes | Root directory for resolving relative paths | |
| symbolName | Yes | Name of the symbol to find references for |
TDQS
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 the action ('find all references') but doesn't disclose behavioral traits like whether this is a read-only operation (implied by 'find'), performance considerations (e.g., might be slow for large codebases), error handling, or output format. For a tool with 4 required parameters and no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Find all references to a TypeScript/JavaScript symbol across the codebase'). There is zero waste or redundancy, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 required parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what 'references' means in this context (e.g., includes imports, calls, etc.), how results are returned, or any limitations. For a tool that likely returns structured data about code references, more context is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 4 parameters (filePath, line, root, symbolName). The description adds no additional parameter semantics beyond what's in the schema, such as explaining how 'line' interacts with 'symbolName' or format examples. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('find') and resource ('references to a TypeScript/JavaScript symbol') with scope ('across the codebase'). It distinguishes from siblings like 'get_definitions' or 'get_symbols_in_scope' by focusing on references rather than definitions or scope-limited symbols. However, it doesn't explicitly differentiate from tools like 'get_type_at_symbol' which might overlap in some contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'get_definitions' or 'get_symbols_in_scope'. It doesn't mention prerequisites (e.g., needing a codebase root) or exclusions (e.g., not for finding definitions). The context is implied but not explicit, leaving the agent to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_definitionsC
Get the definition(s) of a TypeScript symbol
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Number of lines to show after the definition | |
| before | No | Number of lines to show before the definition | |
| filePath | Yes | File path containing the symbol (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| root | Yes | Root directory for resolving relative paths | |
| symbolName | Yes | Name of the symbol to get definitions for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but doesn't describe what 'definition(s)' includes (e.g., code snippets, metadata), how results are returned, or any limitations like rate limits or permissions needed for file access. This leaves significant gaps for a tool with 6 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain the return format, error handling, or how the tool interacts with the TypeScript environment, which is crucial for effective use. This falls short of providing enough context for a tool of this nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds no additional meaning beyond the schema, such as explaining the relationship between 'filePath' and 'root' or clarifying 'line' usage. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('definition(s) of a TypeScript symbol'), making the purpose understandable. It doesn't explicitly differentiate from siblings like 'get_symbols_in_scope' or 'get_type_at_symbol', which might offer similar functionality, so it misses the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'get_type_at_symbol' or 'find_references'. It lacks context about prerequisites or typical scenarios, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diagnosticsB
Get TypeScript diagnostics (errors, warnings) for a single file
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path to check for diagnostics (relative to root) | |
| root | Yes | Root directory for resolving relative paths | |
| virtualContent | No | Virtual content to use for diagnostics instead of file content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe how it behaves—such as whether it requires TypeScript configuration, how it handles missing files, what the output format looks like, or if there are rate limits. For a tool with 3 parameters and no annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every element ('Get TypeScript diagnostics', 'errors, warnings', 'for a single file') earns its place by clarifying scope and function, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain the return values, error handling, or behavioral nuances like how diagnostics are generated or what happens with invalid inputs. For a diagnostic tool with rich parameter schema but missing output details, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain how 'virtualContent' interacts with 'filePath' or provide examples). Baseline 3 is appropriate when the schema handles parameter documentation effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get TypeScript diagnostics') and resource ('for a single file'), distinguishing it from sibling tools like 'get_definitions' or 'get_symbols_in_scope' which focus on different aspects of TypeScript analysis. It specifies the scope (errors, warnings) and single-file limitation, 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.
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 like 'get_type_at_symbol' or 'find_references', nor does it mention prerequisites or exclusions. It implies usage for TypeScript file analysis but lacks context about when this specific diagnostic tool is appropriate compared to other analysis tools in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_module_symbolsC
Get all exported symbols from a TypeScript/JavaScript module without detailed signatures
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | No | Context file for resolving relative imports | |
| moduleName | Yes | The module to analyze (e.g., 'neverthrow', './local-module') | |
| root | Yes | Root directory for resolving relative paths |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves symbols 'without detailed signatures', hinting at limited output detail, but fails to describe critical behaviors like error handling (e.g., invalid module names), performance (e.g., speed for large modules), or output format (e.g., list of symbols vs. structured data). For a tool with 3 parameters and no annotations, this is a significant gap, scoring 2 for vague behavioral hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get all exported symbols...') and adds a key constraint ('without detailed signatures'). There is zero waste or redundancy, making it highly concise and well-structured for quick understanding, earning a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no annotations, no output schema), the description is incomplete. It lacks details on output (what symbols look like), error cases, or integration with siblings. Without annotations or output schema, the description should provide more context for effective use, but it falls short, scoring 2 for being under-specified relative to the tool's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for each parameter (e.g., 'moduleName' as 'The module to analyze'). The description adds no additional parameter semantics beyond the schema, such as examples for 'filePath' usage or constraints on 'root'. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('exported symbols from a TypeScript/JavaScript module'), specifying the scope ('without detailed signatures'). It distinguishes from siblings like 'get_symbols_in_scope' or 'get_definitions' by focusing on exported symbols from a module rather than local symbols or definitions. However, it doesn't explicitly contrast with all siblings, keeping it at 4 instead of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'get_symbols_in_scope' or 'get_definitions'. It lacks context on prerequisites (e.g., needing a module name) or exclusions (e.g., not for detailed type analysis). This leaves the agent without clear usage direction, scoring 2 for minimal implied usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbols_in_scopeA
Get all symbols (variables, types, functions, etc.) visible at a specific location in a TypeScript/JavaScript file
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path containing the location (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| meaning | No | Symbol types to include | All |
| root | Yes | Root directory for resolving relative paths |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states what the tool does but lacks behavioral details: no information about permissions needed, rate limits, error conditions, output format, or whether it's a read-only operation. 'Get' implies read-only, but this isn't explicitly confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core purpose, no wasted words. Every element (verb, resource, location constraint, language context) earns its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description is minimal. It covers the purpose but lacks behavioral context (e.g., output format, error handling) and usage guidance relative to siblings. It's adequate but has clear gaps given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional parameter semantics beyond implying location-based filtering. Baseline 3 is appropriate since the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all symbols visible at a specific location'), specifies the language context ('TypeScript/JavaScript file'), and distinguishes from siblings like 'get_module_symbols' (module-level) or 'get_type_at_symbol' (type-focused). It's specific about scope and resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for symbol visibility at a location, but doesn't explicitly state when to use this versus alternatives like 'get_module_symbols' (for module-level symbols) or 'find_references' (for finding usages). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_type_at_symbolC
Get type information for a TypeScript/JavaScript symbol at a specific location
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path containing the symbol (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| root | Yes | Root directory for resolving relative paths | |
| symbolIndex | No | Index of the symbol occurrence if it appears multiple times on the line (0-based) | |
| symbolName | Yes | Name of the symbol to get type information for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe how it behaves: it doesn't mention error conditions (e.g., invalid file paths or symbols), performance characteristics, or what the output looks like (though there's no output schema). For a tool with 5 parameters and no annotation coverage, this leaves significant gaps in understanding its operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the core purpose without unnecessary words. It's front-loaded with the main action ('Get type information') and specifies the domain and scope concisely, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like error handling or output format, and while the schema covers parameters well, the overall context for safe and effective use is lacking, especially compared to sibling tools in the server.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 thoroughly. The description adds no additional parameter semantics beyond implying that 'symbol' refers to TypeScript/JavaScript identifiers and 'location' involves file paths and line numbers, which is already clear from the schema. This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get type information') and resource ('for a TypeScript/JavaScript symbol at a specific location'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_type_in_module' or 'get_definitions', which likely serve related but distinct purposes in the TypeScript/JavaScript analysis context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention sibling tools like 'get_type_in_module' or 'get_definitions', nor does it specify prerequisites or contexts where this tool is appropriate versus others in the server's toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_type_in_moduleC
Get detailed signature information for a specific type (function, class, interface, type alias, etc.) from a module
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | No | Context file for resolving relative imports | |
| moduleName | Yes | The module containing the type (e.g., 'neverthrow', './utils') | |
| root | Yes | Root directory for resolving relative paths | |
| typeName | Yes | The name of the type to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get detailed signature information') but does not describe the return format, error conditions, performance characteristics (e.g., rate limits), or side effects. For a tool with 4 parameters and no output schema, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Get detailed signature information') and specifies the target ('specific type from a module') with useful examples of type categories. There is no wasted verbiage, and it directly communicates the tool's function without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no annotations, no output schema), the description is incomplete. It lacks details on return values (e.g., what 'detailed signature information' includes), error handling, and behavioral context. Without annotations or output schema, the agent has insufficient information to use this tool effectively beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for each parameter (e.g., 'Context file for resolving relative imports' for filePath). The description adds no additional parameter semantics beyond the schema, such as examples or constraints. Baseline 3 is appropriate when the schema does the heavy lifting, but no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'detailed signature information for a specific type from a module', specifying the type categories (function, class, interface, type alias, etc.). It distinguishes from siblings like 'get_module_symbols' (which lists symbols) and 'get_type_at_symbol' (which analyzes a location rather than a named type), though not explicitly. The purpose is specific but could better differentiate from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'get_module_symbols' (for listing types) or 'get_type_at_symbol' (for analyzing a symbol at a location). It implies usage for detailed type analysis but lacks explicit context, prerequisites, or exclusions, leaving the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp__typescript__move_directoryA
Move a directory to a new location, updating all TypeScript imports and references automatically
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | Whether to overwrite existing directory at target path | |
| sourcePath | Yes | The relative path of the directory to move | |
| targetPath | Yes | The new relative path for the directory |
TDQS
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 the key behavioral trait of automatically updating TypeScript imports and references, which is valuable beyond basic move operations. However, it doesn't mention potential side effects like error handling, permission requirements, or whether the operation is atomic/reversible, leaving gaps in behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and immediately adds the unique value proposition (automatic import updates). Every word earns its place with zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete for a 3-parameter mutation tool. It covers the purpose and key behavior but lacks details on error conditions, return values, or integration with sibling tools. The automatic import update feature adds value, but more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 thoroughly. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain path formats or import-update specifics). Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Move a directory'), the resource ('directory'), and the additional functionality ('updating all TypeScript imports and references automatically'). It distinguishes from the sibling 'move_file' tool by specifying directory-level operations versus file-level operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'updating all TypeScript imports and references automatically,' suggesting this tool should be used when moving directories in TypeScript projects to maintain import integrity. However, it doesn't explicitly state when to use this versus 'move_file' or other alternatives, nor does it provide exclusion criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_fileB
Move a TypeScript/JavaScript file to a new location and update all import statements
| Name | Required | Description | Default |
|---|---|---|---|
| newPath | Yes | New file path (relative to root) | |
| oldPath | Yes | Current file path (relative to root) | |
| overwrite | No | Overwrite the destination file if it exists | |
| root | Yes | Root directory for resolving relative paths |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions updating import statements, which is useful behavioral context. However, it doesn't disclose critical details like whether this is a destructive operation (it moves files), what happens on failure, permission requirements, or rate limits. For a file mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that efficiently conveys the core functionality. Every word earns its place with no redundancy or fluff. The description is appropriately sized and front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file mutation tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It should address behavioral aspects like safety (destructive nature), error handling, and what the tool returns. The mention of import updates is helpful but insufficient for full contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 4 parameters thoroughly. The description doesn't add any parameter-specific semantics beyond what's in the schema (e.g., it doesn't explain path format conventions or import update mechanics). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Move'), resource ('TypeScript/JavaScript file'), and scope ('to a new location and update all import statements'). It distinguishes from siblings like 'rename_symbol' (renaming within same file) and 'mcp__typescript__move_directory' (moving directories).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for moving files with import updates, but doesn't explicitly state when to use this vs. alternatives like 'rename_symbol' for renaming symbols or 'mcp__typescript__move_directory' for moving directories. No guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_symbolB
Rename a TypeScript symbol (variable, function, class, etc.) across the codebase
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | File path containing the symbol (relative to root) | |
| line | Yes | Line number (1-based) or string to match in the line | |
| newName | Yes | New name for the symbol | |
| oldName | Yes | Current name of the symbol | |
| root | Yes | Root directory for resolving relative paths |
TDQS
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 mentions renaming 'across the codebase,' implying a refactoring operation, but lacks details on permissions, side effects, error handling, or response format. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence earns its place by specifying the action, target, scope, and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, error conditions, and return values, which are critical for an agent to use the tool effectively in a codebase context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Rename') and target ('TypeScript symbol'), specifying the scope ('across the codebase') and listing examples of symbol types (variable, function, class, etc.). This distinguishes it from siblings like 'delete_symbol' or 'find_references' by focusing on renaming rather than deletion or querying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'delete_symbol' or 'find_references', nor does it mention prerequisites or exclusions. It simply states what the tool does without contextual usage information.
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.
11 tool updates
v1.0.0- First observed
delete_symbol - First observed
find_references - First observed
get_definitions - First observed
get_diagnostics - First observed
get_module_symbols - First observed
get_symbols_in_scope - First observed
get_type_at_symbol - First observed
get_type_in_module - First observed
mcp__typescript__move_directory - First observed
move_file - First observed
rename_symbol
TDQS
Each tool has a clearly distinct purpose with no overlap: delete_symbol removes symbols, find_references locates usages, get_definitions provides definitions, get_diagnostics checks errors, get_module_symbols lists exports, get_symbols_in_scope shows local symbols, get_type_at_symbol gives type info at a location, get_type_in_module provides detailed signatures, mcp__typescript__move_directory and move_file handle file/directory moves, and rename_symbol renames symbols. The descriptions precisely differentiate their functions.
Most tools follow a consistent verb_noun pattern (e.g., delete_symbol, find_references, get_definitions), but there is a minor deviation with mcp__typescript__move_directory, which uses a prefixed format. This single outlier slightly disrupts the otherwise predictable naming convention, though the pattern remains readable and functional.
With 11 tools, the count is well-scoped for a TypeScript code analysis and refactoring server. Each tool serves a specific, non-redundant purpose, such as symbol manipulation, type checking, and file management, making the set comprehensive yet manageable without bloat.
The tool set provides complete coverage for TypeScript/JavaScript codebase operations, including symbol management (delete, rename, find references), type information retrieval (definitions, types, diagnostics), module analysis (symbols, exports), and file handling (move file/directory with import updates). There are no obvious gaps; agents can perform full CRUD-like workflows and refactoring tasks seamlessly.
Maintenance
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
Ship production-ready TypeScript code in half the time, at half the cost.
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
The Polar Signals MCP server enables AI assistants to connect directly with performance profiling data, allowing users to analyze application performance through natural language queries. Key capabilities include querying CPU performance and memory usage, exploring profiling metadata like profile types and labels, and providing AI-driven code optimization suggestions directly within development environments like Claude Code or Cursor.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.7121MIT
- AlicenseAqualityDmaintenanceA lightweight MCP server that provides 40 tools for TypeScript/JavaScript refactoring and code intelligence, directly mapping to TypeScript's tsserver protocol commands for accurate structural changes and workspace analysis.40343MIT
- AlicenseNot gradedqualityBmaintenanceSelf-contained MCP server providing type-aware code intelligence for TypeScript, JavaScript, and Vue files, exposing tools like hover, definition, references, and diagnostics to Claude Code without requiring global language server installations.MIT
- AlicenseAqualityBmaintenanceEnables AI coding agents to interact with TypeScript projects through compiler-level code intelligence, providing tools for navigation, type information, diagnostics, refactoring, and semantic search.293423Apache 2.0
Appeared in Searches
- Using language servers like Pyright or TypeScript Language Server for codebase investigation
- TypeScript code analysis tools to reduce Claude API usage
- JavaScript programming language resources
- MCP servers for curated context in Cursor IDE to plan, debug, and iterate on features
- A tool for extracting code metadata and exposing it via MCP
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mizchi/lsmcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server