跳到正文
FunCoding

搜索

搜索文档、文章、Skill 和 MCP

Adding LSP servers for GitHub Copilot CLI

You can add LSP servers to give Copilot CLI precise code intelligence, improving its ability to navigate definitions, find references, and rename symbols.

Introduction

This article explains how to add LSP servers for Copilot CLI. For conceptual information about LSP servers, see AUTOTITLE.

Adding an LSP server for Copilot CLI is a two-step process:

  1. Install the LSP server software on your local machine.
  2. Configure the server in a configuration file.

These steps are described in detail in this article.

Installing and configuring an LSP server

You can add an LSP server for a specific language by either:

  • Using the lsp-setup skill, which automates the process.
  • Manually installing the server software and then configuring Copilot CLI to use the server.

These two approaches are described in the sections below.

Using the lsp-setup skill to add a language server

The lsp-setup skill from the "Awesome GitHub Copilot" repository automates the installation and configuration of a selection of popular languages.

  1. Go to the "Awesome GitHub Copilot" download site and search for "lsp":

    https://awesome-copilot.github.com/skills/?q=lsp.

  2. Download the lsp-setup skill.

  3. Unzip the downloaded .zip file to create a directory called lsp-setup.

  4. Move the lsp-setup directory into either:

    • Your personal skills directory: ~/.copilot/skills/.
    • A project skills directory: .github/skills/ in a Git repository.
  5. Start Copilot CLI, or if you are currently in a CLI session enter /skills reload.

  6. Enter the prompt:

    setup lsp
  7. Follow the on-screen instructions to select the language for the server you want to set up, then complete the additional steps.

  8. When the process is complete, enter /lsp reload to load the new LSP server.

  9. Check that the server has been added and is working correctly. See Confirming that an LSP server is available later in this article.

Manually installing and configuring an LSP server

Installing an LSP server for a specific language typically involves installing a package via a package manager such as npm, gem, or pip.

To manually install an LSP server, refer to the documentation for the specific language server you want to install. Listed below are some example commands for installing popular LSP servers.

Useful resources for finding LSP servers for different languages include:

Only install LSP servers from sources you trust.

Example installation command: TypeScript and JavaScript

If you have Node.js installed, you can install the typescript-language-server LSP server with the following command:

npm install -g typescript typescript-language-server

The typescript-language-server LSP server supports both TypeScript and JavaScript.

Example installation command: Ruby

If you have gem installed, you can install the ruby-lsp LSP server with the following command:

gem install ruby-lsp

Alternatively, you can install the solargraph LSP server for Ruby with:

gem install solargraph

Example installation command: Python

If you have Node.js installed, you can install the pyright LSP server with the following command:

npm install -g pyright

Alternatively, if you have pip installed, you can install the python-lsp-server LSP server with:

pip install python-lsp-server

Configuring the language server

  1. To configure the LSP server, add a server definition to either of the two configuration files:

    • User configuration: ~/.copilot/lsp-config.json applies to all your projects.
    • Project configuration: .github/lsp.json, in your repository, applies to everyone working on that project.

    Both files use the same JSON syntax:

    {
      "lspServers": {
        "SERVER-NAME": {
          "command": "COMMAND",
          "args": ["ARG1", "ARG2"],
          "fileExtensions": {
            ".EXT": "LANGUAGE-ID"
          }
        },
        "ANOTHER-SERVER": {
          ...
        }
      }
    }

    Some examples of server definitions for specific LSP servers are provided later in this article.

  2. After installing and configuring the server, confirm that Copilot CLI can use it. See Confirming that an LSP server is available below.

Configuration fields

Each server definition in the configuration file must have a unique name and contain only alphanumeric characters, underscores, and hyphens.

Within each server definition, the following fields are available/required:

Field Required Description
command Yes The command used to start the LSP server.
args No Arguments to pass to the command.
fileExtensions Yes A JSON map of file extensions and their corresponding language ID (for example, { ".rs": "rust" }).
env No Environment variables to set when starting the server. Supports ${VAR} and ${VAR:-default} expansion syntax.
rootUri No The root directory for the LSP server, relative to the Git root. Defaults to ".". Useful for monorepos. If your project lives in a subdirectory of the Git repository rather than the repository root, set rootUri to that subdirectory path.
initializationOptions No Custom options sent to the server during startup.
requestTimeoutMs No The timeout for server requests in milliseconds (default: 90 seconds).
initializationTimeoutMs No The timeout for the server's startup handshake in milliseconds (default: 60 seconds). If a server needs more time for initial project analysis, increase this value.

To disable an LSP server for everyone who uses the repository, add an entry to the repository's .github/lsp.json file. This entry can override a server configured by a lower-priority source, such as a plugin or user configuration. Use the existing server name and set "disabled": true instead of providing a full server definition:

{
  "lspServers": {
    "SERVER-NAME": {
      "disabled": true
    }
  }
}

Example server definition: typescript-language-server LSP server

{
  "lspServers": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "fileExtensions": {
        ".ts": "typescript",
        ".tsx": "typescriptreact",
        ".js": "javascript",
        ".jsx": "javascriptreact",
        ".mjs": "javascript",
        ".cjs": "javascript",
        ".mts": "typescript",
        ".cts": "typescript"
      }
    }
  }
}

Example server definition: ruby-lsp LSP server

{
  "lspServers": {
    "ruby": {
      "command": "ruby-lsp",
      "args": [],
      "fileExtensions": {
        ".rb": "ruby",
        ".rbw": "ruby",
        ".rake": "ruby",
        ".gemspec": "ruby"
      }
    }
  }
}

Example server definition: pyright LSP server for Python

{
  "lspServers": {
    "python": {
      "command": "pyright-langserver",
      "args": ["--stdio"],
      "fileExtensions": {
        ".py": "python",
        ".pyw": "python",
        ".pyi": "python"
      }
    }
  }
}

Managing language servers with the /lsp command

You can list and manage your LSP servers in an interactive CLI session using the /lsp slash command:

Slash commandDescription
/lsp or /lsp showShow the status of all configured LSP servers.
/lsp test SERVER-NAMETest whether a server starts correctly.
/lsp reloadReload LSP configurations from disk.
/lsp logsOpen the live LSP services panel to view server logs.
/lsp helpShow /lsp command information.

Listing available LSP servers

  1. In Copilot CLI, confirm that the LSP server you chose is available by using the /lsp slash command. You will see output such as:

    ● LSP Server Status:
    
      User-configured servers:
        • ruby: ruby-lsp (.rb, .rbw, .rake, .gemspec)
        • omnisharp: omnisharp (.cs)
    
      User config: /Users/username/.copilot/lsp-config.json

Confirming that an LSP server is available

  1. After adding and configuring an LSP server, start (or restart) Copilot CLI.

  2. Use the slash command: /lsp test SERVER-NAME to check that the LSP server is working correctly.

    Copilot CLI attempts to start a temporary, standalone instance of the server and reports whether it was successful or if there were any errors. It then kills the temporary server process.

Further reading