The safety tools are the reason to use this over raw LSP calls: safe_edit and safe_delete_symbol only write when the change introduces no new diagnostics or has no remaining references, and the simulation sessions let an agent try a multi-step refactor entirely in memory and evaluate each step before committing. The warm runtime is the practical win — the language servers stay indexed across sessions, so navigation is instant after the first index rather than paying a cold start every request.
An orchestration layer over existing language servers (gopls, rust-analyzer, jdtls and others): 65 tools across 30 CI-verified languages that expose LSP navigation, symbol editing, safety checks, simulation sessions, and build/test runs to an agent over MCP. A single Go binary that keeps the language servers warm between sessions.
- LSP navigation the way an editor has it: go_to_definition, go_to_declaration, go_to_implementation, go_to_type_definition, go_to_symbol by dot-notation, find_references, find_callers and find_symbol across the workspace
- Deep symbol reads: explore and explore_symbol combine type info, source, callers and references; inspect_symbol, get_symbol_source, get_symbol_documentation, type_hierarchy and list_symbols cover the rest
- Editing anchored to symbols rather than line numbers — insert_before_symbol, insert_after_symbol, replace_symbol_body, rename_symbol across the workspace (with prepare_rename to validate first), and apply_edit
- Safety built into the write path: preview_edit shows the diagnostics an edit would introduce, safe_edit and safe_apply_edit apply only when the net diagnostic delta is zero, and safe_delete_symbol removes a symbol only when it has no references
- Speculative editing: create_simulation_session holds edits in memory, simulate_edit and simulate_chain apply and evaluate each step's diagnostics, and evaluate_session, commit_session, discard_session and destroy_session decide what reaches disk
- Diagnostics and fixes: get_diagnostics, suggest_fixes for quick actions, get_completions, get_signature_help, get_inlay_hints and blast_radius, which enumerates exported symbols and resolves their references to size a change
- Cross-repo intelligence: add_workspace_folder, get_cross_repo_references to find a library symbol's uses across consumer repos, and export_cache / import_cache to share a symbol-reference cache with a team
- Build and test: run_build and run_tests for the detected language, get_tests_for_file to find the tests exercising a source file, and detect_changes to run git diff and analyze the changed symbols' blast radius
The single agent-lsp Go binary, installed via its install.sh script and set up with agent-lsp init. It orchestrates real language servers, so the ones for your languages — gopls, rust-analyzer, jdtls and so on — need to be present; detect_lsp_servers scans the workspace and checks PATH for them. No account or key.
One command — curl -fsSL https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.sh | sh && agent-lsp init
