Language Service
STDIOUnified MCP server providing advanced code manipulation and analysis for multiple programming languages through LSP integration
Unified MCP server providing advanced code manipulation and analysis for multiple programming languages through LSP integration
A unified MCP (Model Context Protocol) server that provides advanced code manipulation and analysis capabilities for multiple programming languages through Language Server Protocol integration.
See examples/ for working examples of each supported language configuration.
# 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>"
1. get_project_overview     # Understand the codebase
2. search_symbols           # Find what you need  
3. get_symbol_details       # Deep dive into symbols
Initial Exploration:
get_project_overview - First tool to understand any codebaselist_dir - Browse directory structureget_symbols_overview - High-level view of file symbolsFinding 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 searchUnderstanding Code:
get_symbol_details - Complete information in one call (recommended)lsp_get_definitions - Jump to definition (use includeBody: true for full code)lsp_find_references - Find all usageslsp_get_hover - Quick type informationCode Quality:
lsp_get_diagnostics - Check for errorslsp_get_code_actions - Get available fixesCode Modification:
lsp_rename_symbol - Safe renaming across codebaselsp_format_document - Format codereplace_range / replace_regex - Text replacements1. 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 implementation
2. 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 errors
3. 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 formatting
4. 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 code
FALLBACK TOOLS (USE ONLY WHEN NECESSARY):
Read - Only when you need to see non-code files or LSMCP tools failGrep - For text pattern searches in filesGlob - Only when LSMCP file finding doesn't workLS - Only for basic directory listing when LSMCP failsBash commands - Only for non-code operations or troubleshootingUse standard tools ONLY in these situations:
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 fileMemories contain important project context, conventions, and guidelines that help maintain consistency.
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.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.
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.
LSMCP includes several performance optimizations:
Configuration options in .lsmcp/config.json:
{ "indexConcurrency": 5, "maxFileSize": 10485760, "enableWatchers": true, "memoryLimit": 1024 }
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.js
LSMCP has separate logging systems for MCP server and LSP client that can be controlled independently:
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)
Enable LSP client debug output separately:
LSP_DEBUG=1 lsmcp # Enable LSP client debug logging
Enable both MCP and LSP debug output:
MCP_DEBUG=1 LSP_DEBUG=1 lsmcp
MIT - See LICENSE file for details.