universal-lsp
Dos proyectos en un mismo repositorio, construidos juntos porque uno necesita al otro:
Universal LSP — un servidor de lenguaje C++ único, rápido y de bajo consumo de memoria que cubre muchos lenguajes mediante plugins declarados en Lua. Cada nivel de análisis, incluido el análisis semántico, se ejecuta de forma nativa en un solo proceso. Nunca lanza, hace de proxy ni depende de rust-analyzer, pyright, clangd ni de ningún otro binario o servicio de red. Diseñado para un mundo orientado a terminal y dirigido por agentes: LSP estándar sobre stdio para editores, un front-end MCP para agentes y una CLI de consulta por lotes sin interfaz para CI.
graph-lite — el SQLite de los grafos que faltaba: una biblioteca de grafos de propiedades pequeña, sin dependencias e incrustable que cualquier proyecto puede incorporar con una sola cabecera. Su superficie pública es una ABI en C, por lo que Ruby, JavaScript, Python, Rust, Go y C la incrustan a través de su propio FFI sin necesidad de mantener un envoltorio sincronizado — lo mismo que dio a SQLite su alcance. El LSP es su primer y más exigente consumidor — grafos de llamadas, grafos de importación y relaciones entre símbolos en grandes bases de código, bajo latencia interactiva — pero la API de graph-lite se mantiene libre de todo ese vocabulario, y se impide mecánicamente que lo aprenda.
Estado: pre-implementación. El repositorio, los controles, la documentación y el plan están en su lugar; la fase de construcción 1 (núcleo de graph-lite) es el trabajo actual. Nada de esto se publica todavía. El alcance está en
docs/spec.md; el progreso está en los hitos.
Por qué
Hoy cada lenguaje trae su propio servidor, su propio proceso, su propia huella de memoria y su propia idea de lo que cuesta "ir a la definición". Abre cuatro proyectos en cuatro lenguajes y estarás ejecutando una docena de procesos que no comparten nada — sin caché, sin índice, sin grafo de relaciones. Y ninguno de ellos fue diseñado para el cliente que ahora hace la mayor parte de la lectura y edición: un agente de IA que trabaja en una terminal, sin editor adjunto, haciendo ráfagas de cambios directamente en el disco.
Universal LSP es un solo proceso para todo eso. Añadir un lenguaje significa escribir reglas declarativas en Lua, no un nuevo servidor.
Related MCP server: agentmako
Los niveles
Un lenguaje recibe exactamente la profundidad que describen las reglas de su plugin — nunca más, nunca menos, y nunca dependiente de lo que esté instalado en la máquina.
Nivel | Te ofrece | Impulsado por |
1 — Sintaxis | resaltado, plegado, esquema, coincidencia de corchetes | una referencia de gramática tree-sitter + archivos de consulta |
2 — Estructura | ir a la definición, buscar referencias, renombrar, símbolos del espacio de trabajo | reglas declarativas de ámbito/enlace + callbacks opcionales en Lua puro |
3 — Semántica | hover con tipos, diagnósticos de tipos, autocompletado semántico | reglas de tipos declarativas sobre un núcleo nativo compartido de unificación |
4 — Relaciones | grafos de llamadas, grafos de importación, radio de impacto, rutas de llamada | salida de los niveles 2/3 materializada en graph-lite |
El nivel 4 es lo que un agente realmente quiere: qué llama a esto, transitivamente y qué se rompe si cambio esto — respondido desde un grafo precomputado en lugar de cien lecturas de archivos.
Arquitectura
editor ──stdio LSP──┐
agent ──MCP────────┤
CI ──batch CLI──┘
│
┌──────▼──────┐
│ shim/cli │ thin entrypoints, no logic
└──────┬──────┘
│ unix socket
┌────────▼─────────┐
│ daemon │ one per user, many sessions,
│ engine/ │ warm caches, per-workspace state
└────┬────────┬────┘
tree-sitter │
+ Lua rules │
│ │
┌────▼─────┐ ┌────▼─────┐
│ analysis │──▶ graph-lite│ generic nodes + typed edges
└──────────┘ └──────────┘ (knows nothing about code)Las dependencias fluyen en una sola dirección y solo en una: analysis → graph-lite, nunca hacia atrás. Dos guardas de lint y un trabajo de CI de compilación independiente lo mantienen así, porque la alternativa — darse cuenta en el momento de la extracción — es una reescritura.
Inicio rápido
git clone https://github.com/developerz-ai/universal-lsp.git
cd universal-lsp
bin/setup # prerequisites → configure → link compile_commands.json
bin/check # the full gate: format, guards, build, tests, sanitizers
bin/dev doctor # one row per thing that can driftRequiere CMake ≥ 3.24, Ninja, un compilador de C++20, clang-format y Bun para las herramientas del repositorio. bin/setup indica lo que falta y cómo instalarlo.
Incrustar graph-lite por separado
graph-lite se compila sin conocimiento de este repositorio — eso se verifica en cada PR, para que extraerlo más adelante siga siendo un git mv en lugar de una reescritura:
cmake -S graph-lite -B build/graph-lite -G Ninja
cmake --build build/graph-lite#include "graph-lite.h" /* the contract: C linkage, opaque handles, status codes */#include "graph-lite.hpp" // C++ ergonomics over the same entry points, header-onlyrequire "ffi" # and the same from Ruby, JS, Python, Rust, Go
module GraphLite
extend FFI::Library
ffi_lib "graph-lite"
attach_function :graph_lite_version_string, [], :string
endUna unidad de traducción en C en la suite de pruebas se compila como C y se enlaza, de modo que una cabecera que deje de ser compatible con C falla en nuestra compilación en lugar de en tu integración.
API y modelo de datos: docs/graph-lite/README.md · por qué C: ADR 0004.
Lenguajes en el lanzamiento
TypeScript · JavaScript · Ruby · C · C++ · Lua · Python · Java · Kotlin · Swift · Rust
Los niveles 1 y 2 llegan primero en los once lenguajes — eso es la mayor parte del valor tanto para editores como para agentes. La profundidad del nivel 3 crece por lenguaje a partir de ahí, degradándose a "tipo desconocido" en lugar de a uno incorrecto.
Documentación
Lee | Para |
el contrato completo del alcance — objetivos, no objetivos, fases de construcción | |
los escollos ya pagados por los errores publicados de otras personas | |
la biblioteca, escrita como si ya estuviera sola | |
codificación de posición, manejo de cambios en el sistema de archivos, diseño del daemon | |
enseñarle un nuevo lenguaje | |
cómo se trabaja en este repositorio — léelo antes de tu primer cambio |
Contribuciones
Lee CONTRIBUTING.md y luego CLAUDE.md. Los plugins para lenguajes fuera de los once oficiales no necesitan aprobación ni un lugar en este repositorio — publica un repositorio git y fíjalo.
Licencia
El motor es Apache-2.0. graph-lite es MIT y tiene versionado independiente, deliberadamente: incrustar una sola cabecera nunca debería requerir pensar en la licencia de lo que la hizo crecer.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceDeep code indexing for AI agents. Search symbols, navigate call graphs, explore inheritance, track git history — all via MCP.54MIT
- AlicenseBqualityAmaintenanceLocal-first codebase intelligence engine providing AI coding agents with a typed MCP toolset for understanding and navigating code repositories.10051Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.2Apache 2.0
- AlicenseNot gradedqualityAmaintenanceMCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.2MIT
Related MCP Connectors
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/developerz-ai/universal-lsp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server