LSP MCP Server

by Tritlo
Verified

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Provides specialized prompts for Haskell development, including typed-hole exploration guidance when working with the Haskell Language Server.

  • Supports integration with Node.js projects, allowing language models to access language server features for JavaScript and TypeScript codebases.

  • Enables interaction with TypeScript language servers to provide hover information, code completions, diagnostics, and code actions for TypeScript projects.

Servidor LSP MCP

Un servidor MCP (Protocolo de Contexto de Modelo) para interactuar con la interfaz LSP (Protocolo de Servidor de Lenguaje). Este servidor actúa como un puente que permite a los LLM consultar a los proveedores de Hover y Completion de LSP.

Descripción general

El servidor MCP funciona mediante:

  1. Iniciar un cliente LSP que se conecta a un servidor LSP
  2. Exposición de herramientas MCP que envían solicitudes al servidor LSP
  3. Devolver los resultados en un formato que los LLM puedan entender y utilizar

Esto permite que los LLM utilicen LSP para obtener sugerencias de código más precisas.

Configuración:

{ "mcpServers": { "lsp-mcp": { "type": "stdio", "command": "npx", "args": [ "tritlo/lsp-mcp", "<language-id>", "<path-to-lsp>", "<lsp-args>" ] } } }

Características

Herramientas MCP

  • get_info_on_location : Obtener información al pasar el mouse sobre una ubicación específica en un archivo
  • get_completions : Obtener sugerencias de finalización en una ubicación específica en un archivo
  • get_code_actions : Obtener acciones de código para un rango específico en un archivo
  • open_document : abre un archivo en el servidor LSP para su análisis
  • close_document : Cerrar un archivo en el servidor LSP
  • get_diagnostics : Obtener mensajes de diagnóstico (errores, advertencias) para archivos abiertos
  • start_lsp : Inicia el servidor LSP con un directorio raíz especificado
  • restart_lsp_server : reinicia el servidor LSP sin reiniciar el servidor MCP
  • set_log_level : cambia el nivel de verbosidad del registro del servidor en tiempo de ejecución

Recursos de MCP

  • lsp-diagnostics:// recursos para acceder a mensajes de diagnóstico con actualizaciones en tiempo real a través de suscripciones
  • lsp-hover:// recursos para recuperar información de desplazamiento en ubicaciones de archivos específicas
  • lsp-completions:// recursos para obtener sugerencias de finalización de código en posiciones específicas

Características adicionales

  • Sistema de registro integral con múltiples niveles de gravedad
  • Salida de consola coloreada para una mejor legibilidad
  • Nivel de registro configurable en tiempo de ejecución
  • Manejo y generación de informes de errores detallados
  • Interfaz de línea de comandos sencilla

Prerrequisitos

  • Node.js (v16 o posterior)
  • npm

Para el servidor de demostración:

  • GHC (8.10 o posterior)
  • Cabal (3.0 o posterior)

Instalación

Construyendo el servidor MCP

  1. Clonar este repositorio:
    git clone https://github.com/your-username/lsp-mcp.git cd lsp-mcp
  2. Instalar dependencias:
    npm install
  3. Construya el servidor MCP:
    npm run build

Pruebas

El proyecto incluye pruebas de integración para la compatibilidad con TypeScript LSP. Estas pruebas verifican que el servidor LSP-MCP gestione correctamente las operaciones LSP, como la información al pasar el ratón, las finalizaciones, los diagnósticos y las acciones de código.

Ejecución de pruebas

Para ejecutar las pruebas LSP de TypeScript:

npm test

o específicamente:

npm run test:typescript

Cobertura de la prueba

Las pruebas verifican la siguiente funcionalidad:

  • Inicialización del LSP de TypeScript con un proyecto simulado
  • Apertura de archivos TypeScript para análisis
  • Obtener información al pasar el mouse sobre funciones y tipos
  • Obtener sugerencias para completar el código
  • Obtención de mensajes de error de diagnóstico
  • Obtener acciones de código para errores

El proyecto de prueba se encuentra en test/ts-project/ y contiene archivos TypeScript con errores intencionales para probar la retroalimentación de diagnóstico.

Uso

Ejecute el servidor MCP proporcionando la ruta al ejecutable LSP y cualquier argumento para pasar al servidor LSP:

npx tritlo/lsp-mcp <language> /path/to/lsp [lsp-args...]

Por ejemplo:

npx tritlo/lsp-mcp haskell /usr/bin/haskell-language-server-wrapper lsp

Importante: Iniciar el servidor LSP

A partir de la versión 0.2.0, debe iniciar explícitamente el servidor LSP llamando a la herramienta start_lsp antes de usar cualquier funcionalidad de LSP. Esto garantiza una inicialización correcta con el directorio raíz correcto, lo cual es especialmente importante al usar herramientas como npx:

{ "tool": "start_lsp", "arguments": { "root_dir": "/path/to/your/project" } }

Explotación florestal

El servidor incluye un sistema de registro integral con 8 niveles de gravedad:

  • debug : información detallada para fines de depuración
  • info : Mensajes informativos generales sobre el funcionamiento del sistema
  • notice : Eventos operativos significativos
  • warning : Posibles problemas que podrían requerir atención
  • error : Condiciones de error que afectan el funcionamiento pero no detienen el sistema
  • critical : Condiciones críticas que requieren atención inmediata
  • alert : El sistema está en un estado inestable
  • emergency : el sistema no se puede utilizar

De forma predeterminada, los registros se envían a:

  1. Salida de consola con codificación de colores para una mejor legibilidad
  2. Notificaciones de MCP al cliente (a través del método notifications/message )

Visualización de registros de depuración

Para una depuración detallada, puede:

  1. Utilice el indicador claude --mcp-debug al ejecutar Claude para ver todo el tráfico MCP entre Claude y el servidor:
    claude --mcp-debug
  2. Cambie el nivel de registro en tiempo de ejecución usando la herramienta set_log_level :
    { "tool": "set_log_level", "arguments": { "level": "debug" } }

El nivel de registro predeterminado es info , que muestra detalles operativos moderados mientras filtra mensajes de depuración extensos.

API

El servidor proporciona las siguientes herramientas MCP:

obtener información sobre la ubicación

Obtiene información al pasar el mouse sobre una ubicación específica en un archivo.

Parámetros:

  • file_path : Ruta al archivo
  • language_id : El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")
  • line : Número de línea
  • column : Posición de la columna

Ejemplo:

{ "tool": "get_info_on_location", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "line": 3, "column": 5 } }

obtener_completaciones

Obtiene sugerencias de finalización en una ubicación específica de un archivo.

Parámetros:

  • file_path : Ruta al archivo
  • language_id : El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")
  • line : Número de línea
  • column : Posición de la columna

Ejemplo:

{ "tool": "get_completions", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "line": 3, "column": 10 } }

obtener_código_acciones

Obtiene acciones de código para un rango específico en un archivo.

Parámetros:

  • file_path : Ruta al archivo
  • language_id : El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")
  • start_line : Número de línea de inicio
  • start_column : Posición de la columna inicial
  • end_line : Número de línea final
  • end_column : Posición de la columna final

Ejemplo:

{ "tool": "get_code_actions", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "start_line": 3, "start_column": 5, "end_line": 3, "end_column": 10 } }

inicio_lsp

Inicia el servidor LSP con un directorio raíz especificado. Debe llamarse antes de usar cualquier otra herramienta relacionada con LSP.

Parámetros:

  • root_dir : el directorio raíz del servidor LSP (se recomienda la ruta absoluta)

Ejemplo:

{ "tool": "start_lsp", "arguments": { "root_dir": "/path/to/your/project" } }

reiniciar_servidor_lsp

Reinicia el proceso del servidor LSP sin reiniciar el servidor MCP. Esto resulta útil para solucionar problemas del servidor LSP o para aplicar cambios a su configuración.

Parámetros:

  • root_dir : (Opcional) El directorio raíz del servidor LSP. Si se proporciona, el servidor se inicializará con este directorio tras el reinicio.

Ejemplo sin root_dir (usa el directorio raíz configurado previamente):

{ "tool": "restart_lsp_server", "arguments": {} }

Ejemplo con root_dir:

{ "tool": "restart_lsp_server", "arguments": { "root_dir": "/path/to/your/project" } }

abrir_documento

Abre un archivo en el servidor LSP para su análisis. Debe llamarse antes de acceder a los diagnósticos o realizar otras operaciones en el archivo.

Parámetros:

  • file_path : Ruta al archivo para abrir
  • language_id : El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")

Ejemplo:

{ "tool": "open_document", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell" } }

cerrar_documento

Cierra un archivo en el servidor LSP al terminar de trabajar con él. Esto facilita la gestión de recursos y la limpieza.

Parámetros:

  • file_path : Ruta al archivo a cerrar

Ejemplo:

{ "tool": "close_document", "arguments": { "file_path": "/path/to/your/file" } }

obtener_diagnósticos

Obtiene mensajes de diagnóstico (errores, advertencias) para uno o todos los archivos abiertos.

Parámetros:

  • file_path : (Opcional) Ruta al archivo para el que se obtendrán los diagnósticos. Si no se proporciona, devuelve los diagnósticos de todos los archivos abiertos.

Ejemplo para un archivo específico:

{ "tool": "get_diagnostics", "arguments": { "file_path": "/path/to/your/file" } }

Ejemplo para todos los archivos abiertos:

{ "tool": "get_diagnostics", "arguments": {} }

establecer_nivel_de_registro

Establece el nivel de registro del servidor para controlar el nivel de detalle de los mensajes de registro.

Parámetros:

  • level : El nivel de registro que se establecerá. Puede ser: debug , info , notice , warning , error , critical , alert o emergency .

Ejemplo:

{ "tool": "set_log_level", "arguments": { "level": "debug" } }

Recursos de MCP

Además de las herramientas, el servidor proporciona recursos para acceder a las funciones de LSP, incluidos diagnósticos, información de desplazamiento y finalizaciones de código:

Recursos de diagnóstico

El servidor expone la información de diagnóstico mediante el esquema de recursos lsp-diagnostics:// . Es posible suscribirse a estos recursos para recibir actualizaciones en tiempo real cuando cambian los diagnósticos.

URI de recursos:

  • lsp-diagnostics:// - Diagnóstico para todos los archivos abiertos
  • lsp-diagnostics:///path/to/file - Diagnóstico para un archivo específico

Importante: Los archivos deben abrirse utilizando la herramienta open_document antes de poder acceder a los diagnósticos.

Recursos de información flotante

El servidor expone información al pasar el cursor por encima mediante el esquema de recursos lsp-hover:// . Esto permite obtener información sobre elementos de código en posiciones específicas de los archivos.

Formato de URI del recurso:

lsp-hover:///path/to/file?line={line}&column={column}&language_id={language_id}

Parámetros:

  • line : Número de línea (basado en 1)
  • column : Posición de la columna (basada en 1)
  • language_id : El lenguaje de programación (por ejemplo, "haskell")

Ejemplo:

lsp-hover:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

Recursos de finalización de código

El servidor expone sugerencias de compleción de código mediante el esquema de recursos lsp-completions:// . Esto permite obtener candidatos para completar código en posiciones específicas de los archivos.

Formato de URI del recurso:

lsp-completions:///path/to/file?line={line}&column={column}&language_id={language_id}

Parámetros:

  • line : Número de línea (basado en 1)
  • column : Posición de la columna (basada en 1)
  • language_id : El lenguaje de programación (por ejemplo, "haskell")

Ejemplo:

lsp-completions:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

Listado de recursos disponibles

Para descubrir los recursos disponibles, utilice el punto de conexión resources/list de MCP. La respuesta incluirá todos los recursos disponibles para los archivos abiertos, incluyendo:

  • Recursos de diagnóstico para todos los archivos abiertos
  • Plantillas de información flotante para todos los archivos abiertos
  • Plantillas de finalización de código para todos los archivos abiertos

Suscribirse a actualizaciones de recursos

Los recursos de diagnóstico admiten suscripciones para recibir actualizaciones en tiempo real cuando cambian los diagnósticos (por ejemplo, cuando se modifican archivos y aparecen nuevos errores o advertencias). Suscríbase a los recursos de diagnóstico mediante el punto de acceso MCP resources/subscribe .

Nota: Los recursos de desplazamiento y finalización no admiten suscripciones, ya que representan consultas en un punto en el tiempo.

Trabajar con recursos vs. herramientas

Puede elegir entre dos enfoques para acceder a las funciones de LSP:

  1. Enfoque basado en herramientas: utilice las herramientas get_diagnostics , get_info_on_location y get_completions para obtener información de una manera simple y directa.
  2. Enfoque basado en recursos: utilice los lsp-diagnostics:// , lsp-hover:// y lsp-completions:// para un enfoque más RESTful.

Ambos enfoques proporcionan los mismos datos en el mismo formato e imponen el mismo requisito de que los archivos deben abrirse primero.

Solución de problemas

  • Si el servidor no se inicia, asegúrese de que la ruta al ejecutable LSP sea correcta
  • Consulte el archivo de registro (si está configurado) para ver mensajes de error detallados

Licencia

Licencia MIT

Extensiones

El servidor LSP-MCP admite extensiones específicas del lenguaje que amplían sus capacidades para diferentes lenguajes de programación. Las extensiones pueden proporcionar:

  • Herramientas y funcionalidades personalizadas específicas de LSP
  • Manejadores y plantillas de recursos específicos del idioma
  • Indicaciones especializadas para tareas relacionadas con el lenguaje
  • Controladores de suscripciones personalizados para datos en tiempo real

Extensiones disponibles

Actualmente, están disponibles las siguientes extensiones:

  • Haskell : proporciona indicaciones especializadas para el desarrollo de Haskell, incluida una guía de exploración de agujeros tipificados

Uso de extensiones

Las extensiones se cargan automáticamente cuando se especifica un ID de idioma al iniciar el servidor:

npx tritlo/lsp-mcp haskell /path/to/haskell-language-server-wrapper lsp

Espacios de nombres de extensión

Todas las funciones proporcionadas por la extensión tienen un espacio de nombres con el ID del idioma. Por ejemplo, el indicador de tipo "typed-hole" de la extensión Haskell está disponible como haskell.typed-hole-use .

Creación de nuevas extensiones

Para crear una nueva extensión:

  1. Crea un nuevo archivo TypeScript en src/extensions/ con el nombre de tu idioma (por ejemplo, typescript.ts )
  2. Implemente la interfaz de extensión con cualquiera de estas funciones opcionales:
    • getToolHandlers() : Proporciona implementaciones de herramientas personalizadas
    • getToolDefinitions() : Define herramientas personalizadas en la API de MCP
    • getResourceHandlers() : Implementa controladores de recursos personalizados
    • getSubscriptionHandlers() : Implementa controladores de suscripción personalizados
    • getUnsubscriptionHandlers() : Implementa controladores de cancelación de suscripción personalizados
    • getResourceTemplates() : Define plantillas de recursos personalizadas
    • getPromptDefinitions() : Define indicaciones personalizadas para tareas de lenguaje
    • getPromptHandlers() : Implementa controladores de avisos personalizados
  3. Exporte sus funciones de implementación

El sistema de extensión cargará automáticamente su extensión cuando se especifique el ID de idioma correspondiente.

Expresiones de gratitud

  • Equipo HLS para la implementación del Protocolo de Servidor de Idioma
  • Antrópico para la especificación del Protocolo de Contexto del Modelo
ID: 075tkj8p1o