What is An MCP server for interacting with LSP interface, enabling LLMs to utilize LSPs for accurate code suggestions.?
The MCP Server works by starting an LSP client that connects to a LSP server, exposing MCP tools that send requests to the LSP server, and returning the results in a format that LLMs can understand and use. It includes features like comprehensive logging, colorized console output, and a simple command-line interface.
Documentation
LSP MCP Server
An MCP (Model Context Protocol) server for interacting with LSP (Language Server Protocol) interface.
This server acts as a bridge that allows LLMs to query LSP Hover and Completion providers.
Overview
The MCP Server works by:
Starting an LSP client that connects to a LSP server
Exposing MCP tools that send requests to the LSP server
Returning the results in a format that LLMs can understand and use
This enables LLMs to utilize LSPs for more accurate code suggestions.
get_info_on_location: Get hover information at a specific location in a file
get_completions: Get completion suggestions at a specific location in a file
get_code_actions: Get code actions for a specific range in a file
open_document: Open a file in the LSP server for analysis
close_document: Close a file in the LSP server
get_diagnostics: Get diagnostic messages (errors, warnings) for open files
start_lsp: Start the LSP server with a specified root directory
restart_lsp_server: Restart the LSP server without restarting the MCP server
set_log_level: Change the server's logging verbosity level at runtime
MCP Resources
lsp-diagnostics:// resources for accessing diagnostic messages with real-time updates via subscriptions
lsp-hover:// resources for retrieving hover information at specific file locations
lsp-completions:// resources for getting code completion suggestions at specific positions
Additional Features
Comprehensive logging system with multiple severity levels
Colorized console output for better readability
Runtime-configurable log level
Detailed error handling and reporting
Simple command-line interface
Prerequisites
Node.js (v16 or later)
npm
For the demo server:
GHC (8.10 or later)
Cabal (3.0 or later)
Installation# Building the MCP Server
Clone this repository:
git clone https://github.com/your-username/lsp-mcp.git
cd lsp-mcp
Install dependencies:
npm install
Build the MCP server:
npm run build
Testing
The project includes integration tests for the TypeScript LSP support. These tests verify that the LSP-MCP server correctly handles LSP operations like hover information, completions, diagnostics, and code actions.
Running Tests
To run the TypeScript LSP tests:
npm test
or specifically:
npm run test:typescript
Test Coverage
The tests verify the following functionality:
Initializing the TypeScript LSP with a mock project
Opening TypeScript files for analysis
Getting hover information for functions and types
Getting code completion suggestions
Getting diagnostic error messages
Getting code actions for errors
The test project is located in test/ts-project/ and contains TypeScript files with intentional errors to test diagnostic feedback.
Usage
Run the MCP server by providing the path to the LSP executable and any arguments to pass to the LSP server:
With version 0.2.0 and later, you must explicitly start the LSP server by calling the start_lsp tool before using any LSP functionality. This ensures proper initialization with the correct root directory, which is especially important when using tools like npx:
Restarts the LSP server process without restarting the MCP server. This is useful for recovering from LSP server issues or for applying changes to the LSP server configuration.
Parameters:
root_dir: (Optional) The root directory for the LSP server. If provided, the server will be initialized with this directory after restart.
Example without root_dir (uses previously set root directory):
In addition to tools, the server provides resources for accessing LSP features including diagnostics, hover information, and code completions:
Diagnostic Resources
The server exposes diagnostic information via the lsp-diagnostics:// resource scheme. These resources can be subscribed to for real-time updates when diagnostics change.
Resource URIs:
lsp-diagnostics:// - Diagnostics for all open files
lsp-diagnostics:///path/to/file - Diagnostics for a specific file
Important: Files must be opened using the open_document tool before diagnostics can be accessed.
Hover Information Resources
The server exposes hover information via the lsp-hover:// resource scheme. This allows you to get information about code elements at specific positions in files.
The server exposes code completion suggestions via the lsp-completions:// resource scheme. This allows you to get completion candidates at specific positions in files.
To discover available resources, use the MCP resources/list endpoint. The response will include all available resources for currently open files, including:
Diagnostics resources for all open files
Hover information templates for all open files
Code completion templates for all open files
Subscribing to Resource Updates
Diagnostic resources support subscriptions to receive real-time updates when diagnostics change (e.g., when files are modified and new errors or warnings appear). Subscribe to diagnostic resources using the MCP resources/subscribe endpoint.
Note: Hover and completion resources don't support subscriptions as they represent point-in-time queries.
Working with Resources vs. Tools
You can choose between two approaches for accessing LSP features:
Tool-based approach: Use the get_diagnostics, get_info_on_location, and get_completions tools for a simple, direct way to fetch information.
Resource-based approach: Use the lsp-diagnostics://, lsp-hover://, and lsp-completions:// resources for a more RESTful approach.
Both approaches provide the same data in the same format and enforce the same requirement that files must be opened first.
Troubleshooting
If the server fails to start, make sure the path to the LSP executable is correct
Check the log file (if configured) for detailed error messages
License
MIT License
Extensions
The LSP-MCP server supports language-specific extensions that enhance its capabilities for different programming languages. Extensions can provide:
Custom LSP-specific tools and functionality
Language-specific resource handlers and templates
Specialized prompts for language-related tasks
Custom subscription handlers for real-time data
Available Extensions
Currently, the following extensions are available:
Haskell: Provides specialized prompts for Haskell development, including typed-hole exploration guidance
Using Extensions
Extensions are loaded automatically when you specify a language ID when starting the server:
All extension-provided features are namespaced with the language ID. For example, the Haskell extension's typed-hole prompt is available as haskell.typed-hole-use.
Creating New Extensions
To create a new extension:
Create a new TypeScript file in src/extensions/ named after your language (e.g., typescript.ts)
Implement the Extension interface with any of these optional functions:
getToolHandlers(): Provide custom tool implementations
getToolDefinitions(): Define custom tools in the MCP API