Skip to main content

A powerful command-line interface for the Language Server Agent Protocol (LSAP)

Project description

LSP CLI

PyPI Python License

⚠️ Windows Temporary Not Supported
Due to implementation details, lsp-cli does not currently support Windows. Support for Windows will be added in the next version.

A powerful command-line interface for the Language Server Agent Protocol (LSAP). lsp-cli provides a bridge between traditional Language Server Protocol (LSP) servers and high-level agentic workflows, offering structured data access and a robust background server management system.

Built on top of lsp-client and LSAP, this tool is designed for developers and AI agents who need reliable, fast, and structured access to language intelligence.

Key Features

  • 🤖 Built for Agents: The CLI output is optimized for Coding Agents. By avoiding fancy TUI/UI elements and rich terminal formatting, it significantly reduces token consumption while maintaining high readability for LLMs.
  • 🚀 Instant Analysis: Quickly get definitions, references, hover info, and completions from the terminal.
  • 🏢 Managed Server Lifecycle: A background manager automatically handles language server processes, reusing them across requests for maximum performance.
  • 🧩 LSAP Integration: Leverages the Language Server Agent Protocol for structured, agent-friendly responses with built-in pagination and text-based location finding.
  • ⚡ Async-First: Built with anyio and asyncer for high-performance concurrent operations.

Supported Languages

lsp-cli currently supports the following languages:

Language Language Server
Python basedpyright
Go gopls
Rust rust-analyzer
TypeScript / JavaScript typescript-language-server
Deno deno

More supported languages coming very soon!

uv tool install --python 3.13 lsp-cli

Quick Start

The main entry point is the lsp command. It automatically detects the appropriate language server for your project.

Find Definition

Find where a symbol is defined:

# Using line scope
lsp definition --locate main.py:10

# Using text search to locate the symbol
lsp definition --locate "main.py@my_function<HERE>"

# Find declaration instead of definition
lsp definition --locate models.py:25 --decl

Get Symbol Information

Get detailed information about a symbol at a specific location:

# Get symbol info at line 15
lsp symbol --locate main.py:15

# Find and get symbol info
lsp symbol --locate "utils.py@UserClass<HERE>"

Find References

Find all references to a symbol:

# Find references to a symbol at line 20
lsp reference --locate models.py:20

# Find references with text search
lsp reference --locate "models.py@UserClass<HERE>"

# Show more context lines around each reference
lsp reference --locate app.py:10 --context-lines 5

# Find implementations instead of references
lsp reference --locate interface.py:15 --impl

Search Workspace Symbols

Search for symbols across the entire workspace by name:

# Search for symbols containing "MyClass"
lsp search MyClass

# Search in a specific workspace
lsp search "UserModel" --workspace /path/to/project

# Filter by symbol kind
lsp search "test" --kind function --kind method

# Limit results
lsp search "Config" --max-items 10

Get File Outline

Get a hierarchical outline of symbols in a file:

# Get outline of main symbols (classes, functions, methods)
lsp outline main.py

# Include all symbols (variables, parameters, etc.)
lsp outline utils.py --all

Get Hover Information

Get documentation and type information for a symbol:

# Get hover info at a specific line
lsp hover --locate main.py:42

# Find symbol and get hover info
lsp hover --locate "models.py@process_data<HERE>"

Commands

Command Description
definition Find symbol definition, declaration, or type definition
hover Get hover information (type info, documentation)
reference Find symbol references or implementations
outline Get a structured symbol outline for a file
symbol Get detailed symbol information at a specific location
search Search for symbols across the entire workspace by name
rename Rename a symbol across the workspace
server Manage background LSP server processes
locate Parse and verify a location string

Server Management

lsp-cli uses a background manager process to keep language servers alive between command invocations. This significantly reduces latency for repeated queries.

# List all running LSP servers
lsp server list

# Manually start a server for a path
lsp server start .

# Stop a server
lsp server stop .

The manager starts automatically when you run any analysis command.

Usage Tips

Locating Symbols

LSP CLI uses a unified locate string syntax (-L or --locate) to specify positions in your code. The format is <file_path>[:<scope>][@<find>].

  1. Line-based: Specify a line number (1-based)

    lsp definition --locate main.py:42
    
  2. Range-based: Specify a line range

    lsp symbol --locate utils.py:10,20
    
  3. Text-based: Search for text with a cursor marker <HERE> or <|>

    lsp hover --locate "app.py@my_function<HERE>()"
    
  4. Symbol path: Navigate using symbol hierarchy

    lsp definition --locate models.py:UserClass.get_name
    

Working with Results

Pagination for large result sets:

# Get first 50 results
lsp search "config" --max-items 50

# Get next page
lsp search "config" --max-items 50 --start-index 50

Debugging

Enable debug mode to see detailed logs:

lsp --debug definition --locate main.py:10

Configuration

lsp-cli can be configured via environment variables or a config.toml file.

  • Config File: ~/.config/lsp-cli/config.toml (on Linux) or ~/Library/Application Support/lsp-cli/config.toml (on macOS).
  • Environment Variables: Prefix with LSP_ (e.g., LSP_LOG_LEVEL=DEBUG).

Available Settings

Create a config.toml file at the location above with the following options:

# config.toml

# Enable debug mode (verbose logging)
debug = false

# Idle timeout for managed servers (in seconds)
idle_timeout = 600

# Log level: TRACE, DEBUG, INFO, WARNING, ERROR, CRITICAL
log_level = "INFO"

# Default maximum items for paginated results (search, reference, etc.)
# Set to null for no limit, or a number like 20
default_max_items = 20

# Default number of context lines for reference results
default_context_lines = 2

# Paths to ignore in search results (e.g., virtual environments, build directories)
ignore_paths = [".git", "node_modules", "venv", ".venv", "__pycache__", "dist", "build"]

Environment Variables

All settings can be overridden via environment variables:

export LSP_DEBUG=true
export LSP_LOG_LEVEL=DEBUG
export LSP_DEFAULT_MAX_ITEMS=50

Contributing

Contributions are welcome! Please see our Contributing Guide for details on:

  • Development setup
  • Adding new CLI commands
  • Improving the server manager
  • Development workflow

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • lsp-client: The underlying LSP client library.
  • LSAP: The Language Server Agent Protocol.
  • lsprotocol: LSP type definitions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lsp_cli-0.1.1.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lsp_cli-0.1.1-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file lsp_cli-0.1.1.tar.gz.

File metadata

  • Download URL: lsp_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lsp_cli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fa6d7a31e5a29d2c7584807221a1e0313f274f9dc97912b5ea7af9826d776a04
MD5 0e3102ec2ee3701cc4d213cb9740f933
BLAKE2b-256 a41de81933c39809a4266d7ea8dd4299c94a2e7434c2aecc78c9a349ce2a4dfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for lsp_cli-0.1.1.tar.gz:

Publisher: release.yml on lsp-client/lsp-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lsp_cli-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: lsp_cli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lsp_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ca4fdfd69cb955b0a786496d3e6fa58030ed76289ac18429e06be10cb64b8f77
MD5 0f66f9fb69f43edcf289e9f96e9b419a
BLAKE2b-256 622f4da03a3ad973da7367bf9f1dc7a977f64f00da695a0f2fb362f5ff652f3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lsp_cli-0.1.1-py3-none-any.whl:

Publisher: release.yml on lsp-client/lsp-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page