MCP Language Server

by isaacphi
Verified
BSD 3-Clause
172
  • Apple
  • Linux

local-only server

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

Integrations

  • Integrates with Python language server (pyright) to provide code intelligence, including definitions, references, diagnostics, and code lens for Python codebases

  • Integrates with Rust language server (rust-analyzer) to provide code intelligence, including definitions, references, diagnostics, and code lens for Rust codebases

  • Integrates with TypeScript language server (tsserver) to provide code intelligence, including definitions, references, diagnostics, and code lens for TypeScript codebases

Servidor de idiomas MCP

Un servidor de Protocolo de Contexto de Modelo (MCP) que ejecuta un servidor de lenguaje y proporciona herramientas para comunicarse con él.

Motivación

El escritorio de Claude con el servidor de sistema de archivos se siente como magia al trabajar en proyectos pequeños. Esto empieza a fallar después de agregar algunos archivos e importaciones. Con este proyecto, quiero crear esa experiencia al trabajar con proyectos grandes.

Los servidores de lenguajes son excelentes en tareas con las que los LLM suelen tener dificultades, como la comprensión precisa de tipos y relaciones, y la provisión de referencias de símbolos precisas. Este proyecto busca incorporar estas herramientas a los LLM. LSP también parece una clara inspiración para MCP, así que ¿por qué no combinarlas?

Estado

⚠️ Calidad pre-beta ⚠️

He probado este servidor con los siguientes servidores de idiomas

  • pyright (Python)
  • servidor ts (TypeScript)
  • gopls (Ir)
  • analizador de óxido (Rust)

Pero debería ser compatible con muchos más.

Herramientas

  • read_definition : recupera la definición completa del código fuente de cualquier símbolo (función, tipo, constante, etc.) de su base de código.
  • find_references : localiza todos los usos y referencias de un símbolo en todo el código base.
  • get_diagnostics : proporciona información de diagnóstico para un archivo específico, incluidas advertencias y errores.
  • get_codelens : recupera sugerencias de lentes de código para obtener contexto y acciones adicionales en su código.
  • execute_codelens : ejecuta una acción de lente de código.
  • apply_text_edit : permite realizar múltiples ediciones de texto en un archivo mediante programación.

Detrás de escena, este servidor MCP puede actuar sobre solicitudes workspace/applyEdit del servidor de lenguaje, por lo que puede aplicar cosas como solicitudes de refactorización, agregar importaciones, formatear código, etc.

Cada herramienta ofrece varias opciones para personalizar la salida, como incluir números de línea o contexto adicional. Consulte la documentación de la herramienta para obtener información detallada sobre su uso. Los números de línea son necesarios para que apply_text_edit pueda realizar ediciones precisas.

Acerca de

Este código base utiliza código editado de gopls para gestionar la comunicación LSP. Consulte ATRIBUCIÓN para obtener más información.

mcp-go se utiliza para la comunicación MCP.

Prerrequisitos

Instalar Go: siga las instrucciones en https://golang.org/doc/install

Obtener o actualizar este servidor:

go install github.com/isaacphi/mcp-language-server@latest

Instale un servidor de idioma para su base de código:

  • Python (pyright): npm install -g pyright
  • TypeScript (servidor ts): npm install -g typescript typescript-language-server
  • Ir (gopls): go install golang.org/x/tools/gopls@latest
  • Rust (analizador de óxido): rustup component add rust-analyzer
  • O utilice cualquier servidor de idioma

Configuración

Agregue algo como la siguiente configuración a la configuración de Claude Desktop (o cliente similar habilitado para MCP):

{ "mcpServers": { "language-server": { "command": "go", "args": [ "run", "github.com/isaacphi/mcp-language-server@latest", "--workspace", "/Users/you/dev/yourcodebase", "--lsp", "/opt/homebrew/bin/pyright-langserver", "--", "--stdio" ], "env": { "LOG_LEVEL": "INFO" } } } }

Reemplazar:

  • /Users/you/dev/yourcodebase con la ruta absoluta a su proyecto
  • /opt/homebrew/bin/pyright-langserver con la ruta a su servidor de idioma (que se encontró usando el comando which , por ejemplo which pyright-langserver )
  • Cualquier argumento después de -- se envía como argumento a su servidor de idioma.
  • Todas las variables de entorno se pasan al servidor de idioma. Algunas pueden ser necesarias para el servidor. Por ejemplo, gopls requería GOPATH y GOCACHE para su correcto funcionamiento.
  • LOG_LEVEL es opcional. Véase más abajo.

Desarrollo

Clonar el repositorio:

git clone https://github.com/isaacphi/mcp-language-server.git cd mcp-language-server

Instalar dependencias de desarrollo:

go mod download

Construir:

go build

Ejecutar pruebas:

go test ./...

Actualizar instantáneas de prueba:

UPDATE_SNAPSHOTS=true go test ./integrationtests/...

Configure su Claude Desktop (o similar) para utilizar el binario local:

{ "mcpServers": { "language-server": { "command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", "args": [ "--workspace", "/path/to/workspace", "--lsp", "/path/to/language/server" ], "env": { "LOG_LEVEL": "DEBUG" } } } }

Reconstruir después de realizar cambios.

Comentario

Incluir

env: { "LOG_LEVEL": "DEBUG", }

Para obtener registros detallados de LSP y aplicaciones, configure LOG_LEVEL como DEBUG para habilitar el registro detallado de todos los componentes. Al agregar LOG_COMPONENT_LEVELS con wire:DEBUG se muestran los mensajes JSON de LSP sin procesar. Incluya la mayor cantidad de información posible al abrir incidencias.

Las siguientes características están en mi radar:

  • [x] Leer la definición
  • [x] Obtener referencias
  • [x] Aplicar edición
  • [x] Obtener diagnósticos
  • [x] Lente de código
  • [ ] Información al pasar el cursor
  • [ ] Acciones de código
  • [ ] Mejor manejo del contexto y la cancelación
  • [ ] Agregar opciones de configuración del servidor LSP y valores preestablecidos para idiomas comunes
  • [ ] Crear una API más consistente y escalable para las herramientas (paginación, etc.)
  • [ ] Cree herramientas a un nivel más alto de abstracción, combinando diagnósticos, lente de código, desplazamiento y acciones de código al leer definiciones o referencias.
-
security - not tested
A
license - permissive license
-
quality - not tested

Ejecuta un servidor de idiomas y proporciona herramientas para comunicarse con él. Los servidores de idiomas son excelentes en tareas con las que los LLM suelen tener dificultades, como comprender con precisión los tipos, comprender las relaciones y proporcionar referencias de símbolos precisas.

  1. Motivation
    1. Status
      1. Tools
        1. About
          1. Prerequisites
            1. Setup
              1. Development
                1. Feedback
                  ID: 217llrqnne