Skip to main content
Glama
developerz-ai

universal-lsp


Два проекта в одном репозитории, созданные вместе, потому что один нуждается в другом:

Universal LSP — один быстрый, малопотребляющий память языковой сервер на C++, покрывающий множество языков через объявляемые на Lua плагины. Каждый уровень анализа, включая семантический, работает нативно в одном процессе. Он никогда не запускает, не проксирует и не зависит от rust-analyzer, pyright, clangd или любого другого бинарного или сетевого сервиса. Создан для мира, ориентированного на терминал и агентов: стандартный LSP через stdio для редакторов, MCP-интерфейс для агентов и безголовый batch-query CLI для CI.

graph-lite — недостающий SQLite для графов: небольшая, не имеющая зависимостей, встраиваемая библиотека графов свойств, которую любой проект может подключить через один заголовочный файл. Её публичный интерфейс — это C ABI, поэтому Ruby, JavaScript, Python, Rust, Go и C встраивают её через свой собственный FFI без необходимости поддерживать обёртку — то же самое, что дало SQLite его распространение. LSP — её первый и самый требовательный потребитель — графы вызовов, графы импортов и связи символов в больших кодовых базах при интерактивной задержке — но API graph-lite свободен от этой лексики и механически защищён от её изучения.

Статус: до реализации. Репозиторий, шлюзы, документация и план на месте; текущая работа — фаза 1 сборки (ядро graph-lite). Здесь пока ничего не выпущено. Объём описан в docs/spec.md; прогресс — в вехах.

Зачем

Сегодня каждый язык приносит свой собственный сервер, свой процесс, свой объём памяти и своё представление о том, сколько стоит «переход к определению». Откройте четыре проекта на четырёх языках — и вы запустите дюжину процессов, которые ничего не разделяют: ни кэша, ни индекса, ни графа связей. И ни один из них не был спроектирован для клиента, который теперь выполняет большую часть чтения и редактирования: ИИ-агента, работающего в терминале, без подключённого редактора, вносящего пакетные изменения прямо на диск.

Universal LSP — это один процесс для всего этого. Добавление языка означает написание декларативных правил на Lua, а не нового сервера.

Related MCP server: agentmako

Уровни

Язык получает ровно ту глубину, которую описывают правила его плагина — не больше, не меньше, и никогда не зависит от того, что установлено на машине.

Уровень

Даёт вам

Управляется

1 — Синтаксис

подсветка, свёртывание, структура, сопоставление скобок

ссылка на грамматику tree-sitter + файлы запросов

2 — Структура

переход к определению, поиск ссылок, переименование, символы рабочей области

декларативные правила областей/привязок + опциональные чистые Lua-обратные вызовы

3 — Семантика

подсказки с учётом типов, диагностика типов, семантическое завершение

декларативные правила типов поверх общего нативного ядра унификации

4 — Связи

графы вызовов, графы импортов, радиус влияния, пути вызовов

результаты уровней 2/3, материализованные в graph-lite

Уровень 4 — это то, что на самом деле нужно агенту: что вызывает это транзитивно и что сломается, если я изменю это — ответы из предварительно вычисленного графа, а не из сотни чтений файлов.

Архитектура

      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)

Зависимости распространяются только в одном направлении: analysis → graph-lite, никогда обратно. Два линт-стражника и отдельная CI-задача сборки поддерживают это, потому что альтернатива — заметить это при извлечении — означает переписывание.

Быстрый старт

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 drift

Требуются CMake ≥ 3.24, Ninja, компилятор C++20, clang-format и Bun для инструментов репозитория. bin/setup укажет, чего не хватает и как это установить.

Встраивание graph-lite отдельно

graph-lite собирается без знания об этом репозитории — это проверяется в каждом PR, чтобы последующее извлечение оставалось git mv, а не переписыванием:

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-only
require "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
end

Единица трансляции на C в тестовом наборе компилируется как C и связывается, поэтому заголовок, переставший быть совместимым с C, ломает нашу сборку, а не вашу интеграцию.

API и модель данных: docs/graph-lite/README.md · почему C: ADR 0004.

Языки при запуске

TypeScript · JavaScript · Ruby · C · C++ · Lua · Python · Java · Kotlin · Swift · Rust

Уровни 1 и 2 появляются первыми во всех одиннадцати — это большая часть ценности и для редакторов, и для агентов. Глубина уровня 3 растёт для каждого языка, деградируя до «неизвестного типа», а не до неверного.

Документация

Читать

Для чего

docs/spec.md

полный контракт объёма — цели, не-цели, фазы сборки

docs/research/things-to-know.md

подводные камни, уже оплаченные чужими ошибками в релизах

docs/graph-lite/

библиотека, написанная так, как будто она уже существует отдельно

docs/engine/

кодирование позиций, обработка изменений файловой системы, дизайн демона

docs/plugins/authoring.md

обучение её новому языку

CLAUDE.md

как ведётся работа над этим репозиторием — прочтите перед первым изменением

Вклад

Прочтите CONTRIBUTING.md, затем CLAUDE.md. Плагины для языков вне официальных одиннадцати не требуют одобрения и не имеют места в этом репозитории — опубликуйте git-репозиторий и закрепите его.

Лицензия

Движок распространяется под Apache-2.0. graph-lite — под MIT и намеренно версионируется независимо: встраивание одного заголовка никогда не должно заставлять думать о лицензии того, что его породило.

A
license - permissive license
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    A
    maintenance
    Deep code indexing for AI agents. Search symbols, navigate call graphs, explore inheritance, track git history — all via MCP.
    54
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Local-first codebase intelligence engine providing AI coding agents with a typed MCP toolset for understanding and navigating code repositories.
    100
    51
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.
    2
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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