Skip to main content
Glama
jonmmease

jons-mcp-java

by jonmmease

definition

Navigate to symbol definitions in Java code by specifying file path and position to locate implementation details and references.

Instructions

Navigate to the definition of a symbol at the given position.

Args: file_path: Absolute path to the Java file line: 0-indexed line number character: 0-indexed character position

Returns: Dictionary with 'locations' array or 'status'/'message' if initializing

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_pathYes
lineYes
characterYes

Implementation Reference

  • The main implementation of the 'definition' tool. This async function uses the @mcp.tool() decorator, sends an LSP 'textDocument/definition' request to the appropriate JDT.LS client, and formats the response locations.
    @mcp.tool()
    async def definition(
        file_path: str,
        line: int,
        character: int,
    ) -> dict:
        """
        Navigate to the definition of a symbol at the given position.
    
        Args:
            file_path: Absolute path to the Java file
            line: 0-indexed line number
            character: 0-indexed character position
    
        Returns:
            Dictionary with 'locations' array or 'status'/'message' if initializing
        """
        manager = get_manager()
        if manager is None:
            return {"status": "error", "message": "Server not initialized"}
    
        # Get client with status feedback
        client, status = await manager.get_client_for_file_with_status(Path(file_path))
    
        if client is None:
            return {"status": "initializing", "message": status}
    
        # Ensure file is open
        await client.ensure_file_open(file_path)
    
        # Make LSP request
        response = await client.request(
            LSP_TEXT_DOCUMENT_DEFINITION,
            {
                "textDocument": {"uri": path_to_uri(file_path)},
                "position": {"line": line, "character": character}
            }
        )
    
        return format_locations(response)
  • Import statement that loads the navigation module, triggering registration of the 'definition' tool via its @mcp.tool() decorator.
    from jons_mcp_java.tools import navigation, symbols, diagnostics, info  # noqa: E402, F401
  • Constant defining the LSP method name used in the definition tool request.
    LSP_TEXT_DOCUMENT_DEFINITION = "textDocument/definition"
  • Utility function used by the definition tool to normalize and format LSP location responses into a standard dictionary format.
    def format_locations(response: dict | list | None) -> dict:
        """
        Normalize LSP Location response to a consistent format.
    
        LSP methods like definition can return:
        - null/None
        - Single Location object
        - Array of Location objects
        - Array of LocationLink objects
    
        This normalizes to: {"locations": [...]}
        """
        if response is None:
            return {"locations": []}
    
        if isinstance(response, dict):
            # Single Location or LocationLink
            return {"locations": [_normalize_location(response)]}
    
        if isinstance(response, list):
            return {"locations": [_normalize_location(loc) for loc in response]}
    
        return {"locations": []}
  • Utility function used to convert file paths to LSP-compatible file:// URIs for requests.
    def path_to_uri(path: str | Path) -> str:
        """Convert a file path to a file:// URI."""
        if isinstance(path, str):
            path = Path(path)
    
        # Resolve to absolute path
        path = path.resolve()
    
        # Convert to URI format
        # On Unix, paths start with / so we get file:///
        path_str = str(path)
        if not path_str.startswith("/"):
            path_str = "/" + path_str
    
        # Quote special characters but preserve /
        encoded = quote(path_str, safe="/")
        return f"file://{encoded}"

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/jonmmease/jons-mcp-java'

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