Lsp4j MCP
A Java MCP (Model Context Protocol) server that wraps JDTLS (Eclipse JDT Language Server) using LSP4J to provide Java IDE features to AI assistants like Claude.
Installation
npx lsp4j-mcpAsk AI about Lsp4j MCP
Powered by Claude Β· Grounded in docs
I know everything about Lsp4j MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
LSP4J-MCP Server
A Java MCP (Model Context Protocol) server that wraps JDTLS (Eclipse JDT Language Server) using LSP4J to provide Java IDE features to AI assistants like Claude.
Features
This MCP server exposes the following tools:
| Tool | Description |
|---|---|
find_symbols | Search for Java symbols (classes, methods, fields) by name |
find_references | Find all references to a symbol at a given file location |
find_definition | Go to the definition of a symbol |
document_symbols | Get all symbols defined in a Java file |
find_interfaces_with_method | Find all interfaces containing a method with a given name |
Prerequisites
- Java 21+
- Maven 3.8+
- JDTLS installed (e.g., via Homebrew:
brew install jdtls)
Build
mvn clean package
This creates a shaded JAR at target/lsp4j-mcp-1.0.0-SNAPSHOT.jar.
Usage
Option 1: Run Script
./run.sh /path/to/your/java/project
Option 2: Direct Java Command
java -jar target/lsp4j-mcp-1.0.0-SNAPSHOT.jar <workspace-path> <jdtls-command>
Example:
java -jar target/lsp4j-mcp-1.0.0-SNAPSHOT.jar /Users/me/projects/myapp jdtls
Option 3: Claude Code MCP Configuration
Add to your .mcp.json:
{
"mcpServers": {
"java-lsp": {
"command": "java",
"args": [
"-jar",
"/path/to/LSP4J-MCP/target/lsp4j-mcp-1.0.0-SNAPSHOT.jar",
"/path/to/your/java/project",
"jdtls"
],
"env": {
"LOG_FILE": "/tmp/lsp4j-mcp.log"
}
}
}
}
Project Structure
LSP4J-MCP/
βββ pom.xml # Maven build configuration
βββ run.sh # Startup script
βββ mcp-config.json # Example MCP configuration
βββ src/
β βββ main/
β β βββ java/com/devoxx/lsp4jmcp/
β β β βββ client/
β β β β βββ JdtlsClient.java # LSP client for JDTLS
β β β β βββ JdtlsLanguageClient.java # LSP callback handler
β β β βββ tools/
β β β β βββ JavaTools.java # Tool implementations
β β β βββ server/
β β β βββ McpServerMain.java # MCP server entry point
β β βββ resources/
β β βββ logback.xml # Logging configuration
β βββ test/
β βββ java/com/devoxx/lsp4jmcp/
β βββ client/JdtlsClientTest.java
β βββ tools/JavaToolsTest.java
β βββ server/McpServerMainTest.java
βββ README.md
Testing
Run all tests:
mvn test
Dependencies
- LSP4J - Eclipse Language Server Protocol for Java
- MCP Java SDK - Model Context Protocol SDK
- JDTLS - Eclipse JDT Language Server
Example Prompts
Once the MCP server is configured, you can ask your AI assistant questions that will trigger the LSP tools. Here are some examples:
Finding Symbols
"Find all classes named Repository in this project"
"Search for methods containing 'save' in their name"
"Where is the UserService class defined?"
"List all interfaces in this codebase"
Finding References
"Find all usages of the
processOrdermethod at line 45 in OrderService.java"
"Where is the
CustomerRepositoryinterface used throughout the codebase?"
"Show me all places that call the constructor at line 12 of PaymentGateway.java"
Go to Definition
"What is the definition of the method being called at line 78, column 15 in CheckoutController.java?"
"Take me to the implementation of the interface method at line 23 in MyService.java"
Document Symbols
"List all methods and fields in the Customer.java file"
"What symbols are defined in src/main/java/com/example/service/OrderService.java?"
"Give me an overview of the structure of ConfigurationManager.java"
Finding Interface Methods
"Which interfaces define a method called 'findById'?"
"Find all classes that have a method named 'process'"
"Show me all interfaces containing the 'validate' method"
Complex Queries
"I need to understand how the
authenticatemethod works. First find its definition, then show me all places it's called."
"Refactor help: Find all usages of the deprecated
legacyProcessmethod so I can update them"
"I want to implement a new Repository interface. Show me all existing Repository interfaces and their methods."
Logging
Logs are written to the file specified by the LOG_FILE environment variable (default: /tmp/lsp4j-mcp.log).
Note: stdout is reserved for MCP protocol communication, so all logging goes to file.
Architecture
Claude Code ββMCPβββΆ McpServerMain ββLSP4JβββΆ JDTLS βββΆ Java Codebase
β
βΌ
JavaTools
(find_symbols, find_references, etc.)
The server:
- Starts JDTLS as a subprocess
- Connects via LSP4J (JSON-RPC over stdio)
- Exposes LSP features as MCP tools
- Communicates with Claude Code via MCP protocol
Examples using Claude Code
License
MIT
