using-lsp-tools
Use when mcp-language-server tools are available and you need semantic code intelligence. Triggers: 'find definition', 'find references', 'who calls this', 'rename symbol', 'type hierarchy', 'go to definition', 'where is this used', 'where is this defined', 'what type is this'. Provides navigation, refactoring, and type analysis via LSP.
Best use case
using-lsp-tools is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when mcp-language-server tools are available and you need semantic code intelligence. Triggers: 'find definition', 'find references', 'who calls this', 'rename symbol', 'type hierarchy', 'go to definition', 'where is this used', 'where is this defined', 'what type is this'. Provides navigation, refactoring, and type analysis via LSP.
Teams using using-lsp-tools should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/using-lsp-tools/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How using-lsp-tools Compares
| Feature / Agent | using-lsp-tools | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when mcp-language-server tools are available and you need semantic code intelligence. Triggers: 'find definition', 'find references', 'who calls this', 'rename symbol', 'type hierarchy', 'go to definition', 'where is this used', 'where is this defined', 'what type is this'. Provides navigation, refactoring, and type analysis via LSP.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Using LSP Tools <ROLE> Language Tooling Expert. Reputation depends on leveraging semantic analysis over text matching for accurate, complete code navigation and refactoring. </ROLE> ## Invariant Principles 1. **Semantic > Lexical**: LSP understands scope, types, inheritance. Grep sees text. 2. **LSP for Symbols, Grep for Strings**: Symbols = definitions, references, types. Strings = TODOs, comments, literals. 3. **Verify Before Fallback**: Empty LSP result? Check file saved. Then try text-based. 4. **Atomic Operations Preferred**: `rename_symbol` handles all files. Manual Edit misses references. ## Reasoning Schema <analysis> - Is target a symbol (function, class, variable) or literal text? - Is LSP server active for this language? - Does task need semantic understanding (types, scope, inheritance)? </analysis> <reflection> - Did LSP return expected results? If empty: file saved? Feature supported? - Did fallback find matches LSP missed? Indicates LSP limitation vs. saved state. </reflection> ## Inputs | Input | Required | Description | |-------|----------|-------------| | `filePath` | Yes | Absolute path to file being analyzed | | `line` | Context | 1-indexed line number for position-based queries | | `column` | Context | 1-indexed column for position-based queries | | `symbolName` | Context | Fully-qualified name for definition/references | | `language` | No | Language identifier if ambiguous | ## Outputs | Output | Type | Description | |--------|------|-------------| | Symbol locations | Inline | File paths and positions from navigation queries | | Type information | Inline | Hover/signature data for understanding | | Refactoring edits | Applied | Direct code modifications from rename/actions | | Diagnostics | Inline | Errors and warnings for debugging | ## Tool Priority Matrix | Task | LSP Tool | Fallback | |------|----------|----------| | Find definition | `definition` | Grep `func X\|class X\|def X` | | Find usages | `references` | Grep symbol name | | Understand symbol | `hover` | Read + infer | | Rename | `rename_symbol` | Multi-file Edit (risky) | | File outline | `document_symbols` | Grep definitions | | Callers | `call_hierarchy` incoming | Grep + analyze | | Callees | `call_hierarchy` outgoing | Read function | | Type hierarchy | `type_hierarchy` | Grep extends/implements | | Workspace search | `workspace_symbol_resolve` | Glob + Grep | | Refactorings | `code_actions` | Manual | | Signature | `signature_help` | Hover or read | | Diagnostics | `diagnostics` | Build command | | Format | `format_document` | Formatter CLI | | Edit by line | `edit_file` | Built-in Edit | ## Parameters Required: `filePath` (absolute), `line`/`column` (1-indexed), `symbolName` (fully-qualified for definition/references). ## Decision Rules **Use LSP when:** - Finding true definition (not text match) - Refactoring (rename, extract, inline) - Understanding type relationships - Finding semantic usages - Cross-file navigation via imports **Use Grep/Glob when:** - Literal strings, comments, non-code text - Regex patterns - LSP returns empty but code exists - Unsupported languages - Non-symbols (TODOs, URLs, magic strings) ## Workflows **Exploration:** `document_symbols` (structure) -> `hover` (types) -> `definition` (jump) -> `references` (usage) **Refactoring:** `code_actions` (discover) -> `rename_symbol` (execute) OR `references` (assess impact) -> manual **Type debugging:** `hover` (inferred) -> `type_hierarchy` (inheritance) -> `diagnostics` (errors) **Call analysis:** `call_hierarchy` incoming = "who calls?" | outgoing = "what calls?" ## Anti-Patterns <FORBIDDEN> - Using Grep for symbol rename (misses scoped references, hits false positives) - Skipping LSP for "simple" refactors (simple becomes complex with inheritance) - Trusting empty LSP results without checking file saved state - Manual multi-file edits when `rename_symbol` available - Ignoring `diagnostics` output when debugging type errors </FORBIDDEN> ## Fallback Protocol 1. LSP error/empty -> Check file saved (LSP reads disk) 2. Try table fallback 3. Persistent failure -> Feature unsupported by server ## Self-Check Before completing: - [ ] Used semantic LSP tool for symbol-based queries (not text search) - [ ] Verified file saved if LSP returned empty/unexpected results - [ ] Applied atomic refactoring operations where available - [ ] Documented fallback rationale if LSP bypassed If ANY unchecked: STOP and reconsider approach.
Related Skills
using-skills
System skill loaded at session start to initialize skill routing. Not invoked directly by users. Also useful when: 'which skill should I use', 'what skill handles this', 'wrong skill fired', 'skill didn't trigger'.
using-git-worktrees
Use when starting feature work that needs isolation from current workspace, or setting up parallel development tracks. Triggers: 'worktree', 'separate branch', 'isolate this work', 'don't mess up current work', 'work on two things at once', 'parallel workstreams', 'new branch for this', 'keep my current work safe'.
documenting-tools
Use when writing MCP tools, API endpoints, CLI commands, or any function that an LLM will invoke. Also use when LLMs misuse tools due to poor descriptions. Triggers: 'document this tool', 'write tool docs', 'MCP tool', 'tool description quality', 'model keeps calling this wrong', 'improve tool description'. For human-facing API docs, standard documentation practices apply instead.
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment. Triggers: 'write a skill', 'new skill', 'create a skill', 'skill doesn't work', 'skill isn't firing', 'edit skill', 'skill quality'. NOT for: general prompt improvement (use instruction-engineering) or command creation (use writing-commands).
writing-plans
Use when you have a spec, design doc, or requirements and need a detailed implementation plan before coding. Triggers: 'write a plan', 'create implementation plan', 'plan this out', 'break this down into steps', 'convert design to tasks', 'implementation order'. Also invoked by develop during planning. NOT for: reviewing existing plans (use reviewing-impl-plans).
writing-commands
Use when creating new commands, editing existing commands, or reviewing command quality. Triggers: 'write command', 'new command', 'create a command', 'review command', 'fix command', 'command doesn't work', 'add a slash command'. NOT for: skill creation (use writing-skills).
verifying-hunches
Use when about to claim discovery during debugging. Triggers: "I found", "this is the issue", "I think I see", "looks like the problem", "that's why", "the bug is", "root cause", "culprit", "smoking gun", "aha", "got it", "here's what's happening", "the reason is", "causing the", "explains why", "mystery solved", "figured it out", "the fix is", "should fix", "this will fix". Also invoked by debugging, scientific-debugging, systematic-debugging before any root cause claim.
tooling-discovery
Use when looking for available tools, MCP servers, or CLI utilities for a task. Triggers: 'what tools do I have', 'is there an MCP for this', 'what's available', 'find a tool for', 'discover tooling', 'what CLI tools exist'. NOT for: documenting existing tools (use documenting-tools).
testing-strategy
Test selection strategy and scope guidance. Triggers: 'which tests should I run', 'test tiers', 'test marks', 'slow tests', 'integration vs unit', 'cross-module regression', 'test scope', 'what should I run', 'select tests', 'test batching'. NOT for: writing tests (use test-driven-development) or fixing broken tests (use fixing-tests).
test-driven-development
Use when user explicitly requests test-driven development. Triggers: 'TDD', 'write tests first', 'red green refactor', 'test-first', 'start with the test'. Also invoked by develop and executing-plans for implementation tasks. NOT for: full feature work (use develop, which includes TDD internally).
tarot-mode
Use when session returns mode.type='tarot', user says '/tarot', or requests roundtable dialogue with archetypes. Triggers: '/tarot', 'use tarot mode', 'roundtable with archetypes', 'tarot personas'. Session-level mode, not task-level.
smart-reading
Behavioral protocol for reading files or command output of unknown size. Loaded automatically for all file reading operations. Also triggered by: 'this file is huge', 'output was cut off', 'large file', 'how should I read this', 'truncated output', 'missing data from file'.