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:
- Iniciar un cliente LSP que se conecta a un servidor LSP
- Exposición de herramientas MCP que envían solicitudes al servidor LSP
- 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:
Características
Herramientas MCP
get_info_on_location
: Obtener información al pasar el mouse sobre una ubicación específica en un archivoget_completions
: Obtener sugerencias de finalización en una ubicación específica en un archivoget_code_actions
: Obtener acciones de código para un rango específico en un archivoopen_document
: abre un archivo en el servidor LSP para su análisisclose_document
: Cerrar un archivo en el servidor LSPget_diagnostics
: Obtener mensajes de diagnóstico (errores, advertencias) para archivos abiertosstart_lsp
: Inicia el servidor LSP con un directorio raíz especificadorestart_lsp_server
: reinicia el servidor LSP sin reiniciar el servidor MCPset_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 suscripcioneslsp-hover://
recursos para recuperar información de desplazamiento en ubicaciones de archivos específicaslsp-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
- Clonar este repositorio:Copy
- Instalar dependencias:Copy
- Construya el servidor MCP:Copy
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:
o específicamente:
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:
Por ejemplo:
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:
Explotación florestal
El servidor incluye un sistema de registro integral con 8 niveles de gravedad:
debug
: información detallada para fines de depuracióninfo
: Mensajes informativos generales sobre el funcionamiento del sistemanotice
: Eventos operativos significativoswarning
: Posibles problemas que podrían requerir atenciónerror
: Condiciones de error que afectan el funcionamiento pero no detienen el sistemacritical
: Condiciones críticas que requieren atención inmediataalert
: El sistema está en un estado inestableemergency
: el sistema no se puede utilizar
De forma predeterminada, los registros se envían a:
- Salida de consola con codificación de colores para una mejor legibilidad
- 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:
- Utilice el indicador
claude --mcp-debug
al ejecutar Claude para ver todo el tráfico MCP entre Claude y el servidor:Copy - Cambie el nivel de registro en tiempo de ejecución usando la herramienta
set_log_level
:Copy
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 archivolanguage_id
: El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")line
: Número de líneacolumn
: Posición de la columna
Ejemplo:
obtener_completaciones
Obtiene sugerencias de finalización en una ubicación específica de un archivo.
Parámetros:
file_path
: Ruta al archivolanguage_id
: El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")line
: Número de líneacolumn
: Posición de la columna
Ejemplo:
obtener_código_acciones
Obtiene acciones de código para un rango específico en un archivo.
Parámetros:
file_path
: Ruta al archivolanguage_id
: El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")start_line
: Número de línea de iniciostart_column
: Posición de la columna inicialend_line
: Número de línea finalend_column
: Posición de la columna final
Ejemplo:
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:
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):
Ejemplo con root_dir:
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 abrirlanguage_id
: El lenguaje de programación en el que está escrito el archivo (por ejemplo, "haskell")
Ejemplo:
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:
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:
Ejemplo para todos los archivos abiertos:
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
oemergency
.
Ejemplo:
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 abiertoslsp-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:
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:
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:
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:
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:
- Enfoque basado en herramientas: utilice las herramientas
get_diagnostics
,get_info_on_location
yget_completions
para obtener información de una manera simple y directa. - Enfoque basado en recursos: utilice los
lsp-diagnostics://
,lsp-hover://
ylsp-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:
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:
- Crea un nuevo archivo TypeScript en
src/extensions/
con el nombre de tu idioma (por ejemplo,typescript.ts
) - Implemente la interfaz de extensión con cualquiera de estas funciones opcionales:
getToolHandlers()
: Proporciona implementaciones de herramientas personalizadasgetToolDefinitions()
: Define herramientas personalizadas en la API de MCPgetResourceHandlers()
: Implementa controladores de recursos personalizadosgetSubscriptionHandlers()
: Implementa controladores de suscripción personalizadosgetUnsubscriptionHandlers()
: Implementa controladores de cancelación de suscripción personalizadosgetResourceTemplates()
: Define plantillas de recursos personalizadasgetPromptDefinitions()
: Define indicaciones personalizadas para tareas de lenguajegetPromptHandlers()
: Implementa controladores de avisos personalizados
- 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
This server cannot be installed
Conecta modelos de lenguaje grandes con interfaces de protocolo de servidor de lenguaje, lo que permite que los LLM accedan a información de desplazamiento, finalizaciones, diagnósticos y acciones de código del LSP para obtener sugerencias de código mejoradas.