Awesome-copilot lsp-setup
Enable code intelligence (go-to-definition, find-references, hover, type info) for any programming language by installing and configuring an LSP server for Copilot CLI. Detects the OS, installs the right server, and generates the JSON configuration (user-level or repo-level). Use when you need deeper code understanding and no LSP server is configured, or when the user asks to set up, install, or configure an LSP server.
git clone https://github.com/github/awesome-copilot
T=$(mktemp -d) && git clone --depth=1 https://github.com/github/awesome-copilot "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/lsp-setup" ~/.claude/skills/github-awesome-copilot-lsp-setup && rm -rf "$T"
skills/lsp-setup/SKILL.mdLSP Setup for GitHub Copilot CLI
UTILITY SKILL — installs and configures Language Server Protocol servers for Copilot CLI. USE FOR: "setup LSP", "install language server", "configure LSP for Java", "add TypeScript LSP", "enable code intelligence", "I need go-to-definition", "find references not working", "need better code understanding" DO NOT USE FOR: general coding tasks, IDE/editor LSP configuration, non-Copilot-CLI setups
Workflow
- Ask the language — use
to ask which programming language(s) the user wants LSP support forask_user - Detect the OS — run
(or check for Windows viauname -s
/$env:OS
) to determine macOS, Linux, or Windows%OS% - Look up the LSP server — read
for known servers, install commands, and config snippetsreferences/lsp-servers.md - Ask scope — use
to ask whether the config should be user-level (ask_user
) or repo-level (~/.copilot/lsp-config.json
at the repo root orlsp.json
).github/lsp.json - Install the server — run the appropriate install command for the detected OS
- Write the config — merge the new server entry into the chosen config file (
for user-level;~/.copilot/lsp-config.json
orlsp.json
for repo-level). If a repo-level config already exists, keep using that location; otherwise ask the user which repo-level location they prefer. Create the file if missing and preserve existing entries..github/lsp.json - Verify — confirm the LSP binary is on
and the config file is valid JSON$PATH
Configuration Format
Copilot CLI reads LSP configuration from user-level or repo-level locations, and repo-level config takes precedence over user-level config:
- User-level:
~/.copilot/lsp-config.json - Repo-level:
(repo root) orlsp.json.github/lsp.json
The JSON structure:
{ "lspServers": { "<server-key>": { "command": "<binary>", "args": ["--stdio"], "fileExtensions": { ".<ext>": "<languageId>", ".<ext2>": "<languageId>" } } } }
Key rules
is the binary name (must be oncommand
) or an absolute path.$PATH
almost always includesargs
to use standard I/O transport."--stdio"
maps each file extension (with leading dot) to a Language ID.fileExtensions- Multiple servers can coexist in
.lspServers - When merging into an existing file, never overwrite other server entries — only add or update the target language key.
Behavior
- Always use
withask_user
when asking the user to pick a language or scope.choices - If the language is not listed in
, search the web for "<language> LSP server" and guide the user through manual configuration.references/lsp-servers.md - If a package manager is not available (e.g. no Homebrew on macOS), suggest alternative install methods from the reference file.
- After installation, run
(orwhich <binary>
on Windows) to confirm the binary is accessible.where.exe - Show the user the final config JSON before writing it.
- If the config file already exists, read it first and merge — do not clobber.
Verification
After setup, tell the user:
- Type
to quit Copilot CLI — this is required so the new LSP configuration is loaded on next launch/exit - Re-launch
in a project with files of the configured languagecopilot - Run
to check the server status/lsp - Try code intelligence features like go-to-definition or hover