/ Directorio / Playground / mcp-language-server
● Comunidad isaacphi ⚡ Instantáneo

mcp-language-server

por isaacphi · isaacphi/mcp-language-server

Dale a tu agente semántica real de LSP — ir a definición, referencias, renombrar, diagnósticos — a través de cualquier servidor de lenguaje stdio.

isaacphi/mcp-language-server es un binario de Go que conecta MCP a cualquier LSP stdio (gopls, rust-analyzer, pyright, typescript-language-server, clangd). Los agentes obtienen operaciones precisas a nivel de símbolo en lugar de aproximaciones de búsqueda de texto.

Por qué usarlo

Características clave

Demo en vivo

Cómo se ve en la práctica

language-server.replay ▶ listo
0/0

Instalar

Elige tu cliente

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Abre Claude Desktop → Settings → Developer → Edit Config. Reinicia después de guardar.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Cursor usa el mismo esquema mcpServers que Claude Desktop. La configuración del proyecto prevalece sobre la global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Haz clic en el icono MCP Servers de la barra lateral de Cline y luego en "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Mismo formato que Claude Desktop. Reinicia Windsurf para aplicar.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "language-server",
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ]
    }
  ]
}

Continue usa un array de objetos de servidor en lugar de un mapa.

~/.config/zed/settings.json
{
  "context_servers": {
    "language-server": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/isaacphi/mcp-language-server"
        ]
      }
    }
  }
}

Añádelo a context_servers. Zed recarga en caliente al guardar.

claude mcp add language-server -- TODO 'See README: https://github.com/isaacphi/mcp-language-server'

Un solo comando. Verifica con claude mcp list. Quita con claude mcp remove.

Casos de uso

Usos del mundo real: mcp-language-server

Cómo renombrar un símbolo de forma segura en todo un repositorio

👤 Desarrolladores políglotas que usan agentes ⏱ ~15 min intermediate

Cuándo usarlo: Quieres un renombrado que entienda el alcance, no un buscar-reemplazar.

Requisitos previos
  • Go instalado — brew install go
  • El LSP para tu lenguaje — gopls: go install golang.org/x/tools/gopls@latest; pyright: pip install pyright; etc.
  • Instalar el MCP — go install github.com/isaacphi/mcp-language-server@latest
Flujo
  1. Inicia el MCP apuntando a tu espacio de trabajo + LSP
    Agrega configuración de MCP: command=mcp-language-server, args=['--workspace','.','--lsp','gopls'].✓ Copiado
    → Aparecen las herramientas
  2. Encuentra referencias primero
    referencias para el símbolo 'LegacyAuth' en el archivo auth.go.✓ Copiado
    → Referencias precisas entre repositorios
  3. Renombra
    rename_symbol 'LegacyAuth' -> 'Auth' en el sitio de definición.✓ Copiado
    → Todos los sitios de llamada actualizados correctamente

Resultado: Renombrado semánticamente correcto en todo el repositorio.

Errores comunes
  • El agente recurre a buscar-reemplazar de texto cuando la herramienta falla — Verifica los diagnósticos después del renombrado — los errores de compilación significan que el LSP rechazó y el agente hizo trampa
Combinar con: github

Cómo permitir que el agente navegue como tú en un IDE

👤 Usuarios de agentes cansados de volver a hacer grep ⏱ ~10 min beginner

Cuándo usarlo: El agente sigue leyendo archivos completos para encontrar una función.

Flujo
  1. Consulta la definición
    definición de 'computeTax' en src/billing.ts.✓ Copiado
    → Ubicación exacta archivo:línea
  2. Extrae diagnósticos
    diagnósticos del archivo actual.✓ Copiado
    → Líneas onduladas rojas del LSP

Resultado: El agente navega como un usuario de IDE.

Errores comunes
  • LSP no inicializado — primera llamada lenta — Calienta con una lista de archivos en el espacio de trabajo; pyright especialmente es lento para indexar
Combinar con: contextplus

Cómo ejecutar múltiples LSPs para un monorepo políglota

👤 Desarrolladores en monorepos de Go+TS+Python ⏱ ~25 min advanced

Cuándo usarlo: Quieres operaciones semánticas en cada lenguaje.

Flujo
  1. Registra un MCP por cada LSP
    Agrega 3 entradas de MCP: lsp-go (gopls), lsp-ts (tsserver), lsp-py (pyright), cada una limitada a su subcarpeta de espacio de trabajo.✓ Copiado
    → 3 conjuntos de herramientas específicas del lenguaje
  2. Úsalos por turno
    Para preguntas de TypeScript usa lsp-ts:definition; para Go usa lsp-go:definition.✓ Copiado
    → Semántica correcta por lenguaje

Resultado: Navegación semánticamente consciente en todos los lenguajes.

Errores comunes
  • El agente olvida qué MCP maneja qué lenguaje — Renombra prefijos de herramientas descriptivamente y menciona en la memoria de tu proyecto

Combinaciones

Combínalo con otros MCPs para multiplicar por 10

language-server + contextplus

Combina navegación de LSP con búsqueda semántica/embedding para consultas más amplias

Usa las referencias del servidor de lenguaje para usos exactos de computeTax, luego búsqueda semántica contextplus para encontrar funciones conceptualmente relacionadas.✓ Copiado
language-server + github

Renombra + commit + PR

Renombra LegacyAuth a Auth a través del LSP, haz commit en una nueva rama, abre una PR.✓ Copiado

Herramientas

Lo que expone este MCP

HerramientaEntradasCuándo llamarCoste
definition file: str, symbol_or_position Ir a la declaración (gratis) (LSP local)
references file: str, symbol_or_position Encuentra usos gratis
diagnostics file: str Verifica errores/advertencias gratis
hover file, position Información de tipo / documentación de un símbolo gratis
rename_symbol file, position, new_name Renombrado seguro gratis
edit_file file, edits Edición validada por LSP gratis

Coste y límites

Lo que cuesta ejecutarlo

Cuota de API
Ninguna — LSP local
Tokens por llamada
Pequeño — las respuestas de LSP son compactas
Monetario
Gratis
Consejo
Usa herramientas respaldadas por LSP antes de búsqueda de embedding — a menudo más baratas y precisas.

Seguridad

Permisos, secretos, alcance

Ámbitos mínimos: Lectura/escritura del sistema de archivos en el espacio de trabajo
Almacenamiento de credenciales: Ninguna
Salida de datos: Solo localhost; LSP se ejecuta en proceso
No conceder nunca: No lo apuntes a espacios de trabajo con secretos — los LSPs a veces los indexan

Resolución de problemas

Errores comunes y soluciones

la herramienta devuelve 'LSP no está listo'

La primera llamada dispara la inicialización — reinténtalo después de 2-5 segundos, o calienta con una llamada hover.

gopls: 'no se encontraron paquetes'

Apunta el espacio de trabajo a la raíz del módulo (donde está go.mod), no a una subcarpeta.

Verificar: go env GOMOD
pyright lento en repositorios grandes

Configura pyrightconfig.json para excluir directorios vendored.

rename_symbol reporta éxito pero la compilación aún falla

El renombrado afectó a un literal de cadena o código basado en reflexión que el LSP no puede ver. Verifica con grep el nombre antiguo.

Alternativas

mcp-language-server vs otros

AlternativaCuándo usarlaContrapartida
Context+Quieres embedding + gráfico de memoria en lugar de semántica de LSPNo es tan preciso en renombrado/referencias
Serena MCPQuieres LSP con refactores de nivel más altoConfiguración diferente; basado en Python

Más

Recursos

📖 Lee el README oficial en GitHub

🐙 Ver issues abiertas

🔍 Ver todos los 400+ servidores MCP y Skills