universal-lsp
Zwei Projekte in einem Repository, gemeinsam gebaut, weil das eine das andere braucht:
Universal LSP – ein einziger, schneller, speicherarmer C++-Language-Server, der viele Sprachen über in Lua deklarierte Plugins abdeckt. Jede Analyse-Ebene, einschließlich der semantischen Analyse, läuft nativ in einem einzigen Prozess. Er startet nie, proxyt nie und hängt nie von rust-analyzer, pyright, clangd oder einem anderen Binär- oder Netzwerkdienst ab. Gebaut für eine terminal-zentrierte, agentengetriebene Welt: Standard-LSP über stdio für Editoren, ein MCP-Frontend für Agenten und eine headless Batch-Query-CLI für CI.
graph-lite – das fehlende SQLite für Graphen: eine kleine, abhängigkeitsfreie, einbettbare Property-Graph-Bibliothek, die jedes Projekt über einen einzigen Header einbinden kann. Ihre öffentliche Oberfläche ist eine C-ABI, sodass Ruby, JavaScript, Python, Rust, Go und C sie über ihre eigene FFI einbetten können, ohne einen Wrapper synchron halten zu müssen – dasselbe, was SQLite seine Reichweite verschafft hat. Der LSP ist ihr erster und anspruchsvollster Konsument – Call-Graphen, Import-Graphen und Symbolbeziehungen über große Codebasen hinweg, unter interaktiver Latenz – aber die API von graph-lite bleibt frei von diesem Vokabular und wird mechanisch daran gehindert, es zu lernen.
Status: Vor der Implementierung. Das Repository, die Gates, die Dokumentation und der Plan stehen; die Bauphase 1 (graph-lite-Kern) ist die aktuelle Arbeit. Nichts davon wird hier bereits ausgeliefert. Der Umfang steht in
docs/spec.md; der Fortschritt in den Meilensteinen.
Warum
Heute bringt jede Sprache ihren eigenen Server mit, ihren eigenen Prozess, ihren eigenen Speicherverbrauch und ihre eigene Vorstellung davon, was „Gehe zu Definition" kostet. Öffnet man vier Projekte in vier Sprachen, laufen ein Dutzend Prozesse, die nichts teilen – keinen Cache, keinen Index, keinen Beziehungsgraphen. Und keiner von ihnen wurde für den Client entworfen, der heute den Großteil des Lesens und Bearbeitens übernimmt: ein KI-Agent, der in einem Terminal arbeitet, ohne angeschlossenen Editor, und in Schüben direkt auf der Festplatte Änderungen vornimmt.
Universal LSP ist ein Prozess für all das. Eine Sprache hinzuzufügen bedeutet, deklarative Lua-Regeln zu schreiben, nicht einen neuen Server.
Related MCP server: agentmako
Die Ebenen
Eine Sprache bekommt exakt die Tiefe, die die Regeln ihres Plugins beschreiben – nie mehr, nie weniger, und nie abhängig davon, was auf dem Rechner installiert ist.
Ebene | Bietet dir | Angetrieben durch |
1 – Syntax | Hervorhebung, Falten, Gliederung, Klammerabgleich | eine tree-sitter-Grammatikreferenz + Query-Dateien |
2 – Struktur | Gehe-zu-Definition, Referenzen finden, Umbenennen, Workspace-Symbole | deklarative Scope-/Bindungsregeln + optionale reine Lua-Callbacks |
3 – Semantik | typbewusstes Hover, Typdiagnosen, semantische Vervollständigung | deklarative Typregeln über einem gemeinsamen nativen Unifikationskern |
4 – Beziehungen | Callgraphen, Importgraphen, Auswirkungsradius, Call-Pfade | Ausgabe von Ebene 2/3, materialisiert in graph-lite |
Ebene 4 ist das, was ein Agent tatsächlich will: was ruft das, transitiv und was bricht, wenn ich das ändere – beantwortet aus einem vorberechneten Graphen statt aus hundert Dateilesevorgängen.
Architektur
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)Abhängigkeiten fließen nur in eine Richtung: analysis → graph-lite, nie zurück.
Zwei Lint-Guards und ein CI-Job für eigenständige Builds sorgen dafür, denn die Alternative –
es erst beim Extrahieren zu bemerken – wäre ein Rewrite.
Schnellstart
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 driftErfordert CMake ≥ 3.24, Ninja, einen C++20-Compiler, clang-format und
Bun für das Repo-Tooling. bin/setup nennt alles, was fehlt, und
wie man es installiert.
graph-lite allein einbetten
graph-lite wird ohne Kenntnis dieses Repositorys gebaut – das wird bei jedem
PR geprüft, sodass das spätere Extrahieren ein git mv bleibt und kein Rewrite:
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
endEine C-Übersetzungseinheit in der Testsuite wird als C kompiliert und gelinkt, damit ein Header, der nicht mehr C-kompatibel ist, unseren Build scheitern lässt, statt deiner Integration.
API und Datenmodell: docs/graph-lite/README.md ·
warum C: ADR 0004.
Sprachen zum Start
TypeScript · JavaScript · Ruby · C · C++ · Lua · Python · Java · Kotlin · Swift · Rust
Die Ebenen 1 und 2 kommen zuerst über alle elf Sprachen – das ist der größte Teil des Werts für Editoren und Agenten. Die Tiefe von Ebene 3 wächst pro Sprache von dort aus und degradiert zu „unbekannter Typ", statt zu einem falschen.
Dokumentation
Lesen | Wofür |
den vollständigen Umfangsvertrag – Ziele, Nicht-Ziele, Bauphasen | |
die Fallstricke, die bereits durch die ausgelieferten Bugs anderer bezahlt wurden | |
die Bibliothek, geschrieben, als stünde sie bereits allein | |
Positionskodierung, Dateisystem-Änderungsbehandlung, Daemon-Design | |
ihr eine neue Sprache beibringen | |
wie an diesem Repo gearbeitet wird – lies es vor deiner ersten Änderung |
Mitwirken
Lies CONTRIBUTING.md, dann CLAUDE.md. Plugins
für Sprachen außerhalb der offiziellen elf brauchen keine Genehmigung und keinen Platz
in diesem Repo – veröffentliche ein Git-Repository und pinne es.
Lizenz
Die Engine ist Apache-2.0. graph-lite ist MIT und bewusst unabhängig versioniert: Das Einbetten eines einzelnen Headers sollte nie erfordern, über die Lizenz des Dings nachzudenken, das es zufällig hervorgebracht hat.
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