La respuesta corta: OpenCode LSP conecta el agente de programación con servidores de lenguaje que entienden un proyecto. Así la sesión puede usar diagnósticos, definiciones, referencias y símbolos. LSP no es MCP y no sustituye al formateador ni a las pruebas. Empieza con el esquema oficial, relaciona el servidor con las extensiones correctas y valida con una tarea pequeña.
La búsqueda qué es LSP en OpenCode suele esconder más preguntas: qué cambia en el flujo de un agente, por qué no aparecen diagnósticos, dónde va la configuración y cómo tratar un servidor desactivado. Esta guía reúne esas decisiones y mantiene separadas las páginas de instalación, providers y MCP.
La página oficial de OpenCode LSP consultada el 10 de agosto de 2026 se titula LSP Servers y explica que OpenCode se integra con servidores LSP. Documenta el objeto lsp, los campos de comando y extensiones, las opciones de inicialización, el apagado global, la desactivación por servidor y los servidores personalizados. Confirma los comandos concretos con la documentación de cada servidor.

¿Qué es LSP en OpenCode? Una capa con contexto de lenguaje
LSP significa Language Server Protocol. Un servidor de lenguaje se ejecuta junto al proyecto y ofrece diagnósticos, símbolos, definiciones, referencias y detalles de una función. OpenCode puede usar esa información durante una sesión en vez de tratar cada archivo como texto aislado.
El beneficio real es el contexto. Si el servidor de TypeScript entiende una importación, el agente tiene más evidencia al explicar un fallo de tipos o un cambio de nombre. Aun así, LSP no garantiza una respuesta correcta: el servidor puede faltar, el proyecto puede no cargarse o el paquete puede exigir su propia configuración. LSP mejora la información, pero no sustituye las pruebas ni la revisión del diff.
Un modelo mental útil
Piensa en OpenCode como consumidor, en el servidor LSP como especialista del lenguaje y en el repositorio como fuente de verdad. Si falla algo, revisa esa capa antes de ampliar permisos o cambiar de modelo.
| Capa | Aporta | No sustituye |
|---|---|---|
| LSP | Diagnósticos, símbolos, definiciones y referencias | Pruebas, formateador o revisión |
| MCP | Herramientas y datos externos | El servidor de lenguaje |
| Formateador | Estilo y formato | Diagnósticos semánticos |
| Provider/modelo | Razonamiento y generación | La toolchain del proyecto |
Cómo encuentra OpenCode el servidor LSP correcto
Una entrada LSP necesita un comando ejecutable y una relación clara con las extensiones. El comando inicia el servidor y la lista de extensiones indica qué archivos deben usarlo. El ejecutable, los argumentos y el método de instalación dependen de la documentación del servidor; no adivines un paquete.
Empieza con un lenguaje y un repositorio pequeño. Abre un archivo con la extensión esperada, comprueba que el proceso puede iniciarse y después pide una consulta de solo lectura. Si la extensión no coincide, un servidor válido puede parecer roto porque OpenCode no lo vincula al archivo.

| Punto | Evidencia | Primer chequeo |
|---|---|---|
| Comando | El ejecutable inicia con sus argumentos | PATH, runtime, paquete y stderr |
| Extensión | El archivo coincide con la entrada | Las extensiones documentadas por el servidor |
| Workspace | Se abre el proyecto correcto | Raíz de Git y configuración |
| Resultado | Llegan diagnósticos o símbolos | Logs del servidor y configuración |
Añade una configuración lsp mínima
Usa la configuración del proyecto para decisiones que todo el repositorio debe revisar. Mantén los experimentos personales en la configuración global hasta conocer el comando, las extensiones y la raíz del proyecto. La guía de JSONC cubre alcance y Schema; esta página se centra en el servidor de lenguaje.
Una entrada pequeña se depura mejor que un catálogo grande. Usa un nombre descriptivo, un array de comandos explícito y solo las extensiones que el servidor admite. Añade opciones de inicialización después de que el proceso básico funcione. JSON válido no garantiza que el ejecutable o el workspace sean correctos.
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx"]
}
}
}Es un ejemplo con forma compatible con el Schema; verifica el ejecutable y las extensiones en la fuente oficial del servidor.
Activa, desactiva o personaliza un servidor LSP
La documentación oficial actual indica que omitir lsp desactiva todos los servidores. Para apagar todos los servidores después de otra configuración, usa lsp: false; para uno concreto, usa disabled: true. Es útil cuando el servidor es lento, produce ruido o no es compatible con un repositorio.
Los servidores personalizados cubren lenguajes o extensiones que no aparecen en la configuración habitual. Define primero comando y extensiones, añade inicialización solo cuando la documentación lo pida y cambia una sola cosa cada vez. Guarda la última configuración que funcionó para poder volver atrás.
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": { "preferences": { "mode": "strict" } }
}
}
}El comando personalizado es un placeholder. Sustitúyelo por el valor del proveedor y nunca guardes credenciales en Git.
Verifica OpenCode LSP con una tarea de bajo riesgo
No empieces reescribiendo un módulo grande. Usa un repositorio limpio, abre un archivo conocido y formula una petición de solo lectura: identificar un símbolo, explicar un diagnóstico o localizar una definición. Compara el resultado con el editor, el compilador o el servidor que ya consideres fiable.
Cuando esa ruta funcione, haz un cambio pequeño y reversible y revisa el diff. Anota sistema, comando, extensiones, raíz y prompt de prueba. Esa nota convierte una prueba personal en un procedimiento reproducible.
- LimpiarParte de una rama y un árbol de trabajo conocidos.
- CoincidirAbre un archivo con una extensión configurada.
- LeerPide un símbolo, definición, referencia o diagnóstico.
- EditarHaz un cambio pequeño y reversible y mira el diff.
- AnotarGuarda comando, modelo, servidor y rollback.
Corrige opencode lsps are disabled y diagnósticos ausentes
Si OpenCode dice que los LSP están desactivados, revisa primero la precedencia. Otro archivo puede imponer lsp: false, el proyecto puede no declarar el servidor o una entrada puede tener disabled. Compara la carpeta real del proyecto con la ubicación de la configuración.
Si el servidor está activo pero no hay diagnósticos, revisa comando y extensión. Ejecútalo en el mismo shell cuando sea posible, confirma runtime y PATH, y comprueba si necesita lockfile, configuración del compilador o raíz del workspace. Un primer resultado lento puede deberse al indexado de un repositorio grande.
Mantén estrechos los permisos. LSP necesita un proceso y contexto de proyecto, no permiso shell ilimitado, más herramientas MCP o autoaprobación. Usa las guías de permisos y MCP cuando el fallo cambie de capa.

| Síntoma | Capa probable | Primer arreglo |
|---|---|---|
| Todos están desactivados | Precedencia o lsp: false | Encuentra la configuración ganadora |
| Un servidor está desactivado | Flag del servidor | Revisa su nombre y disabled |
| No hay diagnósticos | Extensión o proceso | Haz coincidir la extensión y ejecuta el comando |
| Primer resultado lento | Índice o workspace | Prueba un repo pequeño y revisa logs |
| Funciona en el editor | Raíz o configuración distinta | Compara raíz del editor, Git y OpenCode |
LSP, MCP, formateadores y VS Code son capas distintas
LSP aporta inteligencia de lenguaje al repositorio. MCP conecta herramientas o datos externos. El formateador cambia el estilo y las pruebas aportan evidencia ejecutable. VS Code puede mostrar diagnósticos con su propia integración; eso no demuestra que OpenCode use el mismo servidor o la misma raíz.
Enlaza la guía adecuada para cada síntoma: MCP trata servidores locales y remotos, VS Code trata contexto y terminal, y permisos trata aprobaciones. Separar estas intenciones mantiene enfocada la página LSP en OpenCode.
configuración opencode.jsonc:Define alcance y Schema.
OpenCode en VS Code:Compara contexto y ruta de terminal.
permisos de OpenCode:Mantén estrechos los permisos.
OpenCode MCP:Separa herramientas externas de LSP.
Preguntas frecuentes sobre OpenCode LSP
¿Qué es LSP en OpenCode?
Es la capa Language Server Protocol que permite usar diagnósticos, símbolos, definiciones y referencias de un servidor de lenguaje.
¿Cómo activo LSP en OpenCode?
Añade una entrada lsp con el comando y las extensiones compatibles, y valida el comando y la raíz con una petición de solo lectura.
¿Por qué están desactivados los LSP de OpenCode?
La documentación actual dice que omitir lsp desactiva todos. También puede existir lsp: false o disabled: true en el servidor concreto. Revisa la precedencia.
¿LSP sustituye a MCP?
No. LSP aporta inteligencia de lenguaje y MCP conecta herramientas y datos externos. Comparten sesión, pero no función ni límites.
¿Puedo añadir un servidor LSP personalizado?
Sí. Define comando y extensiones bajo lsp, añade inicialización según la documentación y prueba primero en un repositorio pequeño.
¿Por qué funciona LSP en VS Code pero no en OpenCode?
Pueden diferir la raíz, el comando, las extensiones, el runtime o el archivo de configuración. Compara esas entradas.
Fuentes oficiales consultadas
Referencias de OpenCode LSP
La página oficial de LSP se comprobó el 10 de agosto de 2026; los comandos, extensiones y campos pueden cambiar.