--- name: lsp-explore description: "Tell me about this symbol": hover + implementations + call hierarchy + references in one pass — for navigating unfamiliar code. argument-hint: "[symbol-name]" user-invocable: true allowed-tools: mcp__lsp__start_lsp mcp__lsp__go_to_symbol mcp__lsp__inspect_symbol mcp__lsp__go_to_implementation mcp__lsp__find_callers mcp__lsp__find_references mcp__lsp__open_document mcp__lsp__get_server_capabilities license: MIT compatibility: Requires the agent-lsp MCP server (github.com/blackwell-systems/agent-lsp) metadata: required-capabilities: hoverProvider optional-capabilities: implementationProvider callHierarchyProvider referencesProvider --- > Requires the agent-lsp MCP server. # lsp-explore "Tell me about this symbol" — hover, implementations, call hierarchy, and references in a single pass. Use when navigating unfamiliar code: you get type info, doc comments, who calls it, what implements it, and every reference site without issuing four separate commands. Read-only — does not modify any files. **Invocation:** User provides a symbol name in dot notation (e.g. `"codec.Encode"`, `"Buffer.Reset"`). Optionally provide `workspace_root` to scope the search. --- ## Prerequisites If LSP is not yet initialized, call `mcp__lsp__start_lsp` with the workspace root first. Auto-inference applies when file paths are provided. --- ## Phase 1 — Locate the symbol Call `mcp__lsp__go_to_symbol` with `symbol_path` set to the user-provided name: ``` mcp__lsp__go_to_symbol({ "symbol_path": "Package.SymbolName", // dot notation; e.g. "codec.Encode" "workspace_root": "" // optional }) → returns: file, line, column (1-indexed) ``` Record the returned `file`, `line`, and `column`. If `go_to_symbol` returns nothing, report: > Symbol not found: `` > Check the dot-notation path (e.g. "Package.Symbol") and ensure the workspace > root covers the file. Stop immediately — do not proceed to Phase 2. Then open the file so the language server has it in view: ``` mcp__lsp__open_document({ "file_path": "" }) ``` --- ## Phase 2 — Hover (always available) Call `mcp__lsp__inspect_symbol` at the definition location: ``` mcp__lsp__inspect_symbol({ "file_path": "", "line": , "column": }) ``` Store the result as `hover_text`. If the call fails or returns nothing, set `hover_text` to an empty string. Do not stop. --- ## Phase 3 — Implementations (capability-gated) Call `mcp__lsp__get_server_capabilities` to see what the server supports: ``` mcp__lsp__get_server_capabilities() → returns: supported_tools list ``` If `go_to_implementation` appears in `supported_tools`, call it: ``` mcp__lsp__go_to_implementation({ "file_path": "", "line": , "column": }) → returns: list of implementation locations (file, line) ``` Record locations as `implementations`. If `go_to_implementation` is **not** in `supported_tools`, record `"not supported by this server"` — do not stop. --- ## Phase 4 — Call hierarchy and references (run in parallel) Issue both calls in the same message — they are independent: ### 4a — Incoming callers Only if `find_callers` appears in `supported_tools`: ``` mcp__lsp__find_callers({ "file_path": "", "line": , "column": , "direction": "incoming" }) → returns: list of caller functions with file and line ``` If `find_callers` is **not** in `supported_tools`, note `"not supported by this server"` — do not stop. ### 4b — All reference sites ``` mcp__lsp__find_references({ "file_path": "", "line": , "column": , "include_declaration": false }) → returns: list of reference locations (file, line) ``` Collect all reference locations. Group by file and count distinct files. --- ## Output format — Explore Report Produce the report in this format: ``` ## Explore Report: ### Definition - File: : - Hover: ### Implementations ( found, or "not supported") [list of file:line entries, or "none found", or "not supported by this server"] ### Callers (incoming call hierarchy) [list of caller function names with file:line, or "none", or "not supported"] ### References ( total across files) [list of file:line entries grouped by file, or "none found"] ### Summary - Symbol kind: - Reference count: - Files with refs: - Callers: - Implementations:

``` Keep the report concise. The goal is "understand this symbol in one pass." --- ## Example ``` Goal: understand the exported function `ParseConfig` in pkg/config Phase 1 — go_to_symbol: symbol_path="config.ParseConfig" → pkg/config/parser.go:42:6 open_document: pkg/config/parser.go Phase 2 — inspect_symbol: line=42, column=6 → hover_text: "func ParseConfig(path string) (*Config, error) — reads and validates a config file from path" Phase 3 — get_server_capabilities → go_to_implementation: in supported_tools go_to_implementation: line=42, column=6 → 0 implementations (ParseConfig is a concrete function, not an interface method) Phase 4 (parallel): find_callers direction=incoming → 3 callers: cmd.main (cmd/main.go:14), app.Start (internal/app.go:31), loader.Load (internal/loader.go:55) find_references include_declaration=false → 7 references in 4 files ## Explore Report: ParseConfig ### Definition - File: pkg/config/parser.go:42 - Hover: func ParseConfig(path string) (*Config, error) — reads and validates a config file from path ### Implementations (0 found) none found ### Callers (incoming call hierarchy) - cmd.main — cmd/main.go:14 - app.Start — internal/app.go:31 - loader.Load — internal/loader.go:55 ### References (7 total across 4 files) cmd/main.go: line 14 internal/app.go: lines 31, 87 internal/loader.go: line 55 pkg/config/parser_test.go: lines 12, 34, 56, 78 ### Summary - Symbol kind: function - Reference count: 7 - Files with refs: 4 - Callers: 3 - Implementations: 0 ```