A powerful command-line interface for the Language Server Agent Protocol (LSAP)
Project description
LSP CLI
⚠️ Windows Temporary Not Supported
Due to implementation details,lsp-clidoes 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
anyioandasyncerfor 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>].
-
Line-based: Specify a line number (1-based)
lsp definition --locate main.py:42
-
Range-based: Specify a line range
lsp symbol --locate utils.py:10,20
-
Text-based: Search for text with a cursor marker
<HERE>or<|>lsp hover --locate "app.py@my_function<HERE>()"
-
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa6d7a31e5a29d2c7584807221a1e0313f274f9dc97912b5ea7af9826d776a04
|
|
| MD5 |
0e3102ec2ee3701cc4d213cb9740f933
|
|
| BLAKE2b-256 |
a41de81933c39809a4266d7ea8dd4299c94a2e7434c2aecc78c9a349ce2a4dfe
|
Provenance
The following attestation bundles were made for lsp_cli-0.1.1.tar.gz:
Publisher:
release.yml on lsp-client/lsp-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lsp_cli-0.1.1.tar.gz -
Subject digest:
fa6d7a31e5a29d2c7584807221a1e0313f274f9dc97912b5ea7af9826d776a04 - Sigstore transparency entry: 809644735
- Sigstore integration time:
-
Permalink:
lsp-client/lsp-cli@01d877643548e8a672ded63edea7a425ba402d09 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/lsp-client
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@01d877643548e8a672ded63edea7a425ba402d09 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca4fdfd69cb955b0a786496d3e6fa58030ed76289ac18429e06be10cb64b8f77
|
|
| MD5 |
0f66f9fb69f43edcf289e9f96e9b419a
|
|
| BLAKE2b-256 |
622f4da03a3ad973da7367bf9f1dc7a977f64f00da695a0f2fb362f5ff652f3d
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lsp_cli-0.1.1-py3-none-any.whl -
Subject digest:
ca4fdfd69cb955b0a786496d3e6fa58030ed76289ac18429e06be10cb64b8f77 - Sigstore transparency entry: 809644759
- Sigstore integration time:
-
Permalink:
lsp-client/lsp-cli@01d877643548e8a672ded63edea7a425ba402d09 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/lsp-client
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@01d877643548e8a672ded63edea7a425ba402d09 -
Trigger Event:
push
-
Statement type: