LSP для агента через MCP (Codex и Claude Code)
INFO
ТЗ для исполнителя-агента. Всё нужное — на этой странице; развилки, которые здесь не решены, не решать самому: остановиться и спросить Ярослава.
Цель
Во фронтовом репозитории агенты — Codex CLI и Claude Code — получают семантическую навигацию по коду и ошибки типов TypeScript 7 через один MCP-сервер: одна настройка на оба агента, без второго источника правды. Команда фронта на месяц переходит на Codex, поэтому решение, которое работает только в Claude Code, не подходит.
Контекст
- Репозиторий фронта:
frontend-park-mail-ru/2026_2_Cringe_Driven_Development,typescript^7.0.2вdevDependencies— нативный компилятор TypeScript 7. - Языковой сервер TS 7 встроен в компилятор:
tsc --lsp --stdio.tsserver.jsв TS 7 нет, поэтому не работает всё, что идёт черезtypescript-language-server: официальный плагин Claude Codetypescript-lspи TypeScript в Serena (src/solidlsp/language_servers/typescript_language_server.py). - Ошибки типов сервер TS 7 отдаёт только по запросу (
textDocument/diagnostic, pull-модель), а не присылает сам (textDocument/publishDiagnostics). - Плагин Claude Code
typescript-native-lsp(форк Ярослава) уже запускаетtsc --lsp --stdio, но работает только в Claude Code и ошибок типов не показывает: Claude Code их не запрашивает. - Codex CLI встроенного LSP не имеет, внешние инструменты подключает только через MCP (openai/codex#8745, #14799).
- Готовый мост LSP → MCP:
isaacphi/mcp-language-server(Go). Запускает любую команду языкового сервера:--lsp <команда> -- <её аргументы>. Инструменты:definition,references,diagnostics,hover,rename_symbol,edit_file. Как он получает диагностики — push или pull — не проверено.
Шаг 1. Проба mcp-language-server с TS 7
Склонировать фронт,
bun install— вnode_modules/.bin/tscокажется TS 7 изdevDependencies;node_modules/.bin/tsc --version→Version 7.x.Поставить мост:
go install github.com/isaacphi/mcp-language-server@latest.Подключить в Claude Code —
.mcp.jsonв корне фронта (пути — абсолютные, свои):json{ "mcpServers": { "typescript": { "command": "mcp-language-server", "args": ["--workspace", "/abs/path/to/front", "--lsp", "/abs/path/to/front/node_modules/.bin/tsc", "--", "--lsp", "--stdio"] } } }Подключить в Codex —
~/.codex/config.toml:toml[mcp_servers.typescript] command = "mcp-language-server" args = ["--workspace", "/abs/path/to/front", "--lsp", "/abs/path/to/front/node_modules/.bin/tsc", "--", "--lsp", "--stdio"]Поддерживает ли текущая версия Codex проектный конфиг вместо
~/.codex/config.toml— проверить и записать в отчёт.В каждом агенте проверить и записать результат:
Проверка Как Ожидается definitionна импорте компонента из src/components/в любой страницеsrc/pages/путь и тело компонента referencesна функции из src/api/все места вызова, как у rghoverна переменной с выводимым типом тип diagnosticsвременно сломать тип в файле ( const n: number = 'x'), вызвать на этом файлеошибка TS2322с номером строки; правку откатитьВремя первый вызов после старта агента записать секунды Контекст сколько токенов занимают описания инструментов моста записать Плагин
typescript-native-lspв Claude Code на время пробы выключить — иначе на одном репо два языковых сервера и два набора инструментов навигации.
Шаг 2. Отчёт и стоп
Написать отчёт в PR или issue, который выдал Ярослав: таблица из шага 1 для Codex и Claude Code, версии (mcp-language-server, tsc, Codex CLI, Claude Code), что не заработало и с какой ошибкой.
Дальше не продолжать без решения Ярослава. Варианты для отчёта:
- Всё работает, включая
diagnostics— закрепить конфиги из шага 1 в репозитории фронта и строку вAGENTS.mdиCLAUDE.md: «после правки.ts/.tsxвызовиdiagnosticsна изменённом файле». - Не работают только
diagnostics(мост ждёт push, а TS 7 отдаёт pull) — два пути, выбирает Ярослав:- маленький форк
mcp-language-server(Go), гдеdiagnosticsделает запросtextDocument/diagnostic; - свой тонкий MCP-сервер на TS/Bun в
YarikMix/claude-pluginsрядом с плагином (mcp/typescript-native):definition,references,hover,documentSymbol,callHierarchy,diagnostics.
- маленький форк
- Не работает навигация — приложить лог моста (
LOG_LEVEL=DEBUG) и ответыinitialize.
Не входит
- Serena и её доработка под TS 7.
- Автоматический вызов
diagnosticsпосле каждой правки (хуки агентов). - chrome-devtools-mcp и скиллы — другие подзадачи трека.
Открытые вопросы
- Где живёт MCP-сервер, если понадобится свой: в
YarikMix/claude-pluginsили в переименованном репозитории плагинов для обоих агентов. - Проектный или пользовательский конфиг Codex для команды.