Skip to main content

Add your description here

Project description

LSP CLI

PyPI Python License

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.

Installation

uv tool install 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 main.py --scope 10

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

# Find declaration instead of definition
lsp def models.py --scope 25 --decl

Get Symbol Information

Get detailed information about a symbol at a specific location:

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

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

Find References

Find all references to a symbol:

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

# Find references with text search
lsp ref models.py --find "UserClass<HERE>"

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

# Find implementations instead of references
lsp reference interface.py --scope 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 main.py --scope 42

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

Commands

Command Description Alias
definition Find symbol definition, declaration, or type definition def
hover Get hover information (type info, documentation) -
reference Find symbol references or implementations ref
outline Get a structured symbol outline for a file -
symbol Get detailed symbol information at a specific location sym
search Search for symbols across the entire workspace by name -
server Manage background LSP server processes -

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 offers flexible ways to locate symbols in your code:

  1. Line-based: Use --scope with a line number (1-based)

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

    lsp symbol utils.py --scope 10,20
    
  3. Text-based: Use --find to search for text with a marker

    lsp hover app.py --find "my_function<HERE>()"
    # The <HERE> marker indicates the cursor position
    
  4. Symbol path: Navigate using symbol hierarchy

    lsp definition models.py --scope "UserClass.get_name"
    

Markdown Output

For better readability or integration with documentation tools:

lsp hover main.py --scope 10 --markdown

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 main.py --scope 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_DIR=/tmp/logs).

Available Settings

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

# 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.0.2.tar.gz (13.2 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.0.2-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lsp_cli-0.0.2.tar.gz
  • Upload date:
  • Size: 13.2 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.0.2.tar.gz
Algorithm Hash digest
SHA256 3f9e600f18dade1e52f025da559ee1db2e2061d7f53662e1f645550ec83a2060
MD5 984ecb864b65614247d2993552275493
BLAKE2b-256 6125cd4828cc9894ea2dd5a86434c883e6c86a314e597fb1e55e6c55a920b6ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for lsp_cli-0.0.2.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.0.2-py3-none-any.whl.

File metadata

  • Download URL: lsp_cli-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 18.8 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.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 398fb55e42ca41800dde4eb2c23a874828832ea13ac9270ce59fcd75a87ff405
MD5 a819785831c809718df18ccbeb8bd720
BLAKE2b-256 c1e5adf35e597b697cecc0a52a728fadb35480ea2d1c071b45cfa12cd9dc8e28

See more details on using hashes here.

Provenance

The following attestation bundles were made for lsp_cli-0.0.2-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