universal-lsp
Provides C++ language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides JavaScript language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Kotlin language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Lua language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Python language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Ruby language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Rust language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides Swift language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Provides TypeScript language intelligence, including syntax highlighting, folding, outline, go-to-definition, find-references, rename, workspace symbols, and type-aware analysis.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@universal-lspWhat calls theparse_configfunction transitively?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Two projects in one repo, built together because one needs the other:
Universal LSP — a single, fast, low-memory C++ language server covering many languages through Lua-declared plugins. Every analysis tier, semantic analysis included, runs natively in one process. It never spawns, proxies to, or depends on rust-analyzer, pyright, clangd, or any other binary or network service. Built for a terminal-first, agent-driven world: standard LSP over stdio for editors, an MCP front-end for agents, and a headless batch-query CLI for CI.
graph-lite — the missing SQLite for graphs: a small, dependency-free, embeddable property-graph library any project can drop in via a single header. Its public surface is a C ABI, so Ruby, JavaScript, Python, Rust, Go and C embed it through their own FFI with no wrapper to keep in sync — the same thing that gave SQLite its reach. The LSP is its first and most demanding consumer — call graphs, import graphs and symbol relationships across large codebases, under interactive latency — but graph-lite's API is kept free of any of that vocabulary, and is mechanically prevented from learning it.
Status: pre-implementation. The repository, gates, docs and plan are in place; build phase 1 (graph-lite core) is the current work. Nothing here ships yet. Scope lives in
docs/spec.md; progress lives in the milestones.
Why
Today every language brings its own server, its own process, its own memory footprint and its own idea of what "go to definition" costs. Open four projects in four languages and you are running a dozen processes that share nothing — no cache, no index, no relationship graph. And none of them were designed for the client that now does most of the reading and editing: an AI agent working in a terminal, with no editor attached, making bursts of changes directly on disk.
Universal LSP is one process for all of it. Adding a language means writing declarative Lua rules, not a new server.
Related MCP server: agentmako
The tiers
A language gets exactly the depth its plugin's rules describe — never more, never less, and never dependent on what is installed on the box.
Tier | Gives you | Driven by |
1 — Syntax | highlighting, folding, outline, bracket matching | a tree-sitter grammar reference + query files |
2 — Structure | go-to-definition, find-references, rename, workspace symbols | declarative scope/binding rules + optional pure Lua callbacks |
3 — Semantics | type-aware hover, type diagnostics, semantic completion | declarative type rules over a shared native unification core |
4 — Relationships | call graphs, import graphs, impact radius, call paths | Tier 2/3 output materialised into graph-lite |
Tier 4 is what an agent actually wants: what calls this, transitively and what breaks if I change this — answered from a pre-computed graph instead of a hundred file reads.
Architecture
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)Dependencies flow one way and only one way: analysis → graph-lite, never back.
Two lint guards and a standalone-build CI job keep it that way, because the
alternative — noticing at extraction time — is a rewrite.
Quickstart
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 driftRequires CMake ≥ 3.24, Ninja, a C++20 compiler, clang-format, and
Bun for the repo tooling. bin/setup names anything missing and
how to install it.
Embedding graph-lite alone
graph-lite builds with no knowledge of this repository — that is asserted on every
PR, so that extracting it later stays a git mv rather than a 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
endA C translation unit in the test suite is compiled as C and linked, so a header that stops being C-compatible fails our build instead of your integration.
API and data model: docs/graph-lite/README.md ·
why C: ADR 0004.
Languages at launch
TypeScript · JavaScript · Ruby · C · C++ · Lua · Python · Java · Kotlin · Swift · Rust
Tiers 1 and 2 come first across all eleven — that is most of the value for both editors and agents. Tier 3 depth grows per language from there, degrading to "unknown type" rather than to a wrong one.
Documentation
Read | For |
the full scope contract — goals, non-goals, build phases | |
the pitfalls already paid for by other people's shipped bugs | |
the library, written as if it already stood alone | |
position encoding, filesystem-change handling, daemon design | |
teaching it a new language | |
how this repo is worked on — read it before your first change |
Contributing
Read CONTRIBUTING.md, then CLAUDE.md. Plugins
for languages outside the official eleven need no approval and no place in this
repo — publish a git repository and pin it.
License
The engine is Apache-2.0. graph-lite is MIT and versioned independently, deliberately: embedding a single header should never require thinking about the license of the thing that happened to grow it.
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