Orchestra MCP Lsp Plugin

Fund package maintenance!
fadymondy

Installs: 2

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/orchestra-mcp/lsp

v0.0.1 2026-02-11 13:13 UTC

This package is auto-updated.

Last update: 2026-02-11 13:16:28 UTC


README

Screenshot

LSP

Language Server Protocol manager for Orchestra MCP. Manages 22 pre-configured language servers with auto-restart, binary detection, and full lifecycle control. An Orchestra MCP plugin that provides 6 MCP tools and 5 Artisan commands for server management.

How It Works

The LSP plugin maintains a registry of language server definitions loaded from config. Each server tracks its own runtime state (stopped, starting, running, crashed). The service handles binary detection, lifecycle transitions, and automatic restart with configurable cooldown and limits.

Config (22 server definitions)
    ↓ boot()
ServerRegistry (definitions + instances)
    ↓
LspService (lifecycle management)
    ↓ start / stop / restart
ServerInstance (runtime state)
    ↓ events
ServerStarted / ServerStopped / ServerCrashed / ServerRestarted

Installation

composer require orchestra-mcp/lsp

The service provider is auto-discovered. No manual registration needed.

Configuration

Publish the config:

php artisan vendor:publish --tag=orchestra-lsp-config
Option Env Default Description
auto_start ORCHESTRA_LSP_AUTO_START true Auto-start servers on file open
auto_restart ORCHESTRA_LSP_AUTO_RESTART true Auto-restart crashed servers
max_restarts ORCHESTRA_LSP_MAX_RESTARTS 5 Max restart attempts per server
restart_cooldown ORCHESTRA_LSP_RESTART_COOLDOWN 3 Seconds between restarts
start_timeout ORCHESTRA_LSP_START_TIMEOUT 30 Server init timeout
log_level ORCHESTRA_LSP_LOG_LEVEL info Logging verbosity

Pre-configured Servers (22)

Language Server Binary
PHP Intelephense, Phpactor intelephense, phpactor
TypeScript/JS TypeScript Language Server typescript-language-server
Python Pyright, Python LSP pyright-langserver, pylsp
Rust Rust Analyzer rust-analyzer
Go gopls gopls
C/C++ clangd clangd
CSS/SCSS CSS Language Server vscode-css-language-server
HTML HTML Language Server vscode-html-language-server
JSON JSON Language Server vscode-json-language-server
Vue Volar vue-language-server
Svelte Svelte Language Server svelteserver
Bash Bash Language Server bash-language-server
YAML YAML Language Server yaml-language-server
Docker Dockerfile Language Server docker-langserver
Tailwind Tailwind CSS Language Server tailwindcss-language-server
Lua Lua Language Server lua-language-server
Kotlin Kotlin Language Server kotlin-language-server
Java Eclipse JDT jdtls
Ruby Ruby LSP ruby-lsp
Markdown Marksman marksman
ESLint ESLint Language Server vscode-eslint-language-server

Usage

Facade

use OrchestraMcp\Lsp\Facades\Lsp;

Lsp::startServer('intelephense');
Lsp::findServersByLanguage('php');
Lsp::getStatus();

Custom Server Registration

use OrchestraMcp\Lsp\Data\ServerDefinition;
use OrchestraMcp\Lsp\Facades\Lsp;

Lsp::registerServer(new ServerDefinition(
    id: 'my-lsp',
    name: 'My Custom LSP',
    binary: 'my-lsp',
    args: ['--stdio'],
    languages: ['custom'],
    extensions: ['.cst'],
));

Artisan Commands

php artisan lsp:list                  # List all servers
php artisan lsp:list --language=php   # Filter by language
php artisan lsp:status                # Service status
php artisan lsp:start intelephense    # Start a server
php artisan lsp:stop intelephense     # Stop a server

MCP Tools

Tool Annotation Description
lsp-status #[IsReadOnly] Service status, server counts, uptime
lsp-server-list #[IsReadOnly] List servers with optional language filter
lsp-server-info #[IsReadOnly] Detailed info about a specific server
lsp-server-start #[IsIdempotent] Start a server
lsp-server-stop #[IsIdempotent] Stop a running server
lsp-server-restart #[IsIdempotent] Restart with cooldown limits

Testing

# Run LSP tests
php artisan test --compact --filter=Lsp

# From package directory
cd packages/orchestra-mcp/lsp
composer test

49 tests, 138 assertions covering plugin registration, service lifecycle, data types, and registry operations.

Documentation

Full documentation is available in the docs/ directory:

Development

# Install dependencies
composer install

# Run tests
composer test

# Format code
composer format

# Static analysis
composer check

# Lint
composer lint

License

MIT