{"id":96610,"date":"2026-06-10T09:00:00","date_gmt":"2026-06-10T16:00:00","guid":{"rendered":"https:\/\/github.blog\/?p=96610"},"modified":"2026-06-05T16:33:30","modified_gmt":"2026-06-05T23:33:30","slug":"give-github-copilot-cli-real-code-intelligence-with-language-servers","status":"publish","type":"post","link":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/","title":{"rendered":"Give GitHub Copilot CLI real code intelligence with language servers"},"content":{"rendered":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><p class=\"wp-block-paragraph\">Ever watched GitHub Copilot CLI extract a JAR file to a temporary directory, grep through <code>.class<\/code> files, and piece together an API signature from raw bytecode? The agent is resourceful, but without a language server, that&rsquo;s the best it can do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Language Server Protocol (LSP) is the standard that powers go to definition, find references, and type resolution in editors like VS Code. It works just as well in the terminal. The <strong>LSP Setup<\/strong> skill automates the installation and configuration of LSP servers for Copilot CLI, so the agent gets precise, structured answers about your code instead of relying on text search heuristics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, you&rsquo;ll learn how the skill works under the hood, see the configuration format it generates, and get set up for any of the 14 languages it supports today.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-problem-heuristic-code-understanding\">The problem: heuristic code understanding<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Without an LSP server, the agent in GitHub Copilot CLI reverse-engineers API information through text search and binary extraction. For a Java project, that might look like:<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code># Find the dependency JAR \nfind ~\/.m2\/repository -name \"*httpclient*.jar\" \n \n# Extract it to a temp directory \nmkdir \/tmp\/httpclient &amp;&amp; cd \/tmp\/httpclient \njar xf ~\/.m2\/repository\/org\/apache\/httpcomponents\/httpclient\/4.5.14\/httpclient-4.5.14.jar \n \n# Search extracted class files for a method \ngrep -r \"execute\" --include=\"*.class\" .<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='# Find the dependency JAR \nfind ~\/.m2\/repository -name \"*httpclient*.jar\" \n \n# Extract it to a temp directory \nmkdir \/tmp\/httpclient &amp;&amp; cd \/tmp\/httpclient \njar xf ~\/.m2\/repository\/org\/apache\/httpcomponents\/httpclient\/4.5.14\/httpclient-4.5.14.jar \n \n# Search extracted class files for a method \ngrep -r \"execute\" --include=\"*.class\" .' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p class=\"wp-block-paragraph\">For Python, the agent might <code>cat<\/code> files inside <code>site-packages<\/code>. For TypeScript, it walks <code>node_modules<\/code>. These text-based approaches work for simple cases, but they&rsquo;re doing pattern-matching over raw text rather than true semantic analysis, so they miss generics, overloads, and transitive types, and can&rsquo;t see compiled bytecode at all. That&rsquo;s exactly the gap a language server close.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An LSP server solves this structurally. When the agent sends a <code>textDocument\/definition<\/code> request for a symbol, the language server returns the exact source location, fully resolved type, and signature.<\/p>\n\n\n\n<aside data-color-mode=\"light\" data-dark-theme=\"dark\" data-light-theme=\"light_dimmed\" class=\"wp-block-group post-aside--large p-4 p-md-6 is-style-light-dimmed has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-light-dimmed--2\" style=\"border-top-width:4px\">\n<h2 class=\"wp-block-heading h5-mktg gh-aside-title is-typography-preset-h5\" id=\"h-what-is-an-agent-skill\" style=\"margin-top:0\">What is an agent skill?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/agentskills.io\/\">Agent skill<\/a> is a reusable instruction set that extends what an AI coding agent can do. Skills are defined in Markdown files with YAML frontmatter and follow a standard structure: trigger descriptions, step-by-step workflows, reference data, and behavioral constraints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The LSP Setup skill uses this structure to guide the agent through a multi-step installation process, detecting the operating system, choosing the right package manager, writing valid configuration, and verifying the result.<\/p>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-the-lsp-setup-skill-works\">How the LSP Setup skill works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When triggered, the skill executes a seven-step workflow:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-language-selection\">1. Language selection<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent uses <code>ask_user<\/code> with a set of choices to determine which language the user needs LSP support for. This drives all subsequent steps.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-operating-system-detection\">2. Operating system detection<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent runs <code>uname -s<\/code> (or checks <code>$env:OS<\/code> \/ <code>%OS%<\/code> on Windows) to determine the target platform. Install commands vary by operating system. For example, <code>brew install jdtls<\/code> on macOS versus downloading from eclipse.org on Linux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-lsp-server-lookup\">3. LSP server lookup<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The skill includes a reference file (<code>references\/lsp-servers.md<\/code>) with curated data for 14 languages: install commands per operating system, binary names, and ready-to-use config snippets. The agent reads this file and selects the matching entry.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-configuration-scope\">4. Configuration scope<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent asks whether the config should be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>User-level<\/strong>: <code>~\/.copilot\/lsp-config.json<\/code>&mdash;applies to all repositories<\/li>\n\n\n\n<li><strong>Repository-level<\/strong>: <code>lsp.json<\/code> at the repository root or <code>.github\/lsp.json<\/code>&mdash;scoped to a single project<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Repository-level configuration takes precedence when both exist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-installation\">5. Installation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent runs the appropriate install command. For example:<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code># TypeScript on any OS \nnpm install -g typescript typescript-language-server \n \n# Java on macOS \nbrew install jdtls \n \n# Rust on any OS \nrustup component add rust-analyzer<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"# TypeScript on any OS \nnpm install -g typescript typescript-language-server \n \n# Java on macOS \nbrew install jdtls \n \n# Rust on any OS \nrustup component add rust-analyzer\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"6-configuration\">6. Configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent writes or merges an entry into the chosen config file. The format uses a <code>lspServers<\/code> object where each key is a server identifier:<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>{ \n  \"lspServers\": { \n    \"java\": { \n      \"command\": \"jdtls\", \n      \"args\": [], \n      \"fileExtensions\": { \n        \".java\": \"java\" \n      } \n    } \n  } \n} <\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='{ \n  \"lspServers\": { \n    \"java\": { \n      \"command\": \"jdtls\", \n      \"args\": [], \n      \"fileExtensions\": { \n        \".java\": \"java\" \n      } \n    } \n  } \n}' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p class=\"wp-block-paragraph\">Key rules the skill enforces:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>command<\/code> must be on <code>$PATH<\/code> or an absolute path<\/li>\n\n\n\n<li><code>args<\/code> typically includes <code>\"--stdio\"<\/code> for standard I\/O transport (some servers like <code>jdtls<\/code> handle this internally)<\/li>\n\n\n\n<li><code>fileExtensions<\/code> maps each extension (with leading dot) to a <a href=\"https:\/\/code.visualstudio.com\/docs\/languages\/identifiers#_known-language-identifiers\">language identifier<\/a><\/li>\n\n\n\n<li>Existing entries in the config file are preserved &mdash; the agent merges, never overwrites<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"7-verification\">7. Verification<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The agent runs <code>which &lt;binary&gt;<\/code> (or <code>where.exe<\/code> on Windows) to confirm the server is accessible, then validates the config file is well-formed JSON.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"supported-languages\">Supported languages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The skill comes with a <a href=\"https:\/\/github.com\/github\/awesome-copilot\/blob\/main\/skills\/lsp-setup\/references\/lsp-servers.md\">set of predefined language servers<\/a> for several programming languages. If the coding agent faces one that it is not mapped out already, it will search for an appropriate server and walk you through manual configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-changes-after-setup\">What changes after setup<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once an LSP server is configured, the CLI agent can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Resolve types across dependencies<\/strong> &mdash; no more grepping through JAR files or <code>node_modules<\/code><\/li>\n\n\n\n<li><strong>Jump to definitions<\/strong> in third-party libraries, even when source isn&rsquo;t checked into the repository<\/li>\n\n\n\n<li><strong>Find all references<\/strong> to a symbol across the project<\/li>\n\n\n\n<li><strong>Read hover documentation<\/strong> for any function, class, or type<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This means the agent spends less time on tool calls and produces more accurate code on the first pass. For you, that&rsquo;s less time waiting while the agent decompiles a JAR file or greps through node_modules to answer a question your IDE already knows, and fewer wrong turns built on a misread signature. The agent reasons about your code with the same structured understanding you get from go-to-definition in your editor, so you can hand it bigger, gnarlier tasks and trust the result.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"get-started\">Get started<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Download the skill<\/strong>: visit the <a href=\"https:\/\/awesome-copilot.github.com\/skills\/#file=skills%2Flsp-setup%2FSKILL.md\">Awesome Copilot LSP Setup skill page<\/a> and click the <strong>Download<\/strong> button to get a ZIP file.<\/li>\n\n\n\n<li><strong>Extract the ZIP<\/strong> to <code>~\/.copilot\/skills\/<\/code> by running:<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>unzip lsp-setup.zip -d ~\/.copilot\/skills\/<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"unzip lsp-setup.zip -d ~\/.copilot\/skills\/\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Restart GitHub Copilot CLI<\/strong>: if Copilot CLI is already running, type <code>\/exit<\/code> first. Then relaunch <code>copilot<\/code> so it picks up the new skill.<\/li>\n\n\n\n<li><strong>Ask the agent<\/strong> to set up a language server: for example, <em>&ldquo;set up LSP for Java&rdquo;<\/em> or <em>&ldquo;enable code intelligence for Python&rdquo;<\/em>.<\/li>\n\n\n\n<li><strong>Verify<\/strong>: after the skill installs and configures the LSP server, restart Copilot CLI one more time (<code>\/exit<\/code>, then relaunch), run <code>\/lsp<\/code> to check the server status, and try go-to-definition on a symbol from one of your dependencies.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The skill is part of the <a href=\"https:\/\/awesome-copilot.github.com\/\">Awesome Copilot<\/a> project. It&rsquo;s open source, so contributions and feedback are welcome!<\/p>\n<\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence. <\/p>\n","protected":false},"author":2278,"featured_media":93467,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"yes","_gh_post_is_no_robots":"","_gh_post_is_featured":"yes","_gh_post_is_excluded":"","_gh_post_is_unlisted":"","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLI-Square.jpg","_gh_post_sq_img_id":"93504","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"","_gh_post_recirc_hide":"","_gh_post_recirc_col_1":"","_gh_post_recirc_col_2":"","_gh_post_recirc_col_3":"","_gh_post_recirc_col_4":"","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[3293,3295],"tags":[2535,3754],"coauthors":[3869],"class_list":["post-96610","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-and-ml","category-github-copilot","tag-github-copilot","tag-github-copilot-cli"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Give GitHub Copilot CLI real code intelligence with language servers - The GitHub Blog<\/title>\n<meta name=\"description\" content=\"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Give GitHub Copilot CLI real code intelligence with language servers\" \/>\n<meta property=\"og:description\" content=\"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-10T16:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bruno Borges\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bruno Borges\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/\"},\"author\":{\"name\":\"Natalie Guevara\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/37273876e05b418f9e59da3267030711\"},\"headline\":\"Give GitHub Copilot CLI real code intelligence with language servers\",\"datePublished\":\"2026-06-10T16:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/\"},\"wordCount\":891,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260\",\"keywords\":[\"GitHub Copilot\",\"GitHub Copilot CLI\"],\"articleSection\":[\"AI &amp; ML\",\"GitHub Copilot\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/\",\"name\":\"Give GitHub Copilot CLI real code intelligence with language servers - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260\",\"datePublished\":\"2026-06-10T16:00:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/37273876e05b418f9e59da3267030711\"},\"description\":\"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\\\/decompile with real code intelligence.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260\",\"width\":2400,\"height\":1260,\"caption\":\"Decorative header image showing the GitHub Copilot CLI ASCII art.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/give-github-copilot-cli-real-code-intelligence-with-language-servers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI &amp; ML\",\"item\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GitHub Copilot\",\"item\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/github-copilot\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Give GitHub Copilot CLI real code intelligence with language servers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/37273876e05b418f9e59da3267030711\",\"name\":\"Natalie Guevara\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=gd9cd9e7ea5c1a52ff241c7cd2df20d97\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=g\",\"caption\":\"Natalie Guevara\"},\"description\":\"Content Manager, GitHub Blog\",\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/naguevara\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Give GitHub Copilot CLI real code intelligence with language servers - The GitHub Blog","description":"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/","og_locale":"en_US","og_type":"article","og_title":"Give GitHub Copilot CLI real code intelligence with language servers","og_description":"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence.","og_url":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/","og_site_name":"The GitHub Blog","article_published_time":"2026-06-10T16:00:00+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","type":"image\/jpeg"}],"author":"Bruno Borges","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bruno Borges","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#article","isPartOf":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/"},"author":{"name":"Natalie Guevara","@id":"https:\/\/github.blog\/#\/schema\/person\/37273876e05b418f9e59da3267030711"},"headline":"Give GitHub Copilot CLI real code intelligence with language servers","datePublished":"2026-06-10T16:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/"},"wordCount":891,"image":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","keywords":["GitHub Copilot","GitHub Copilot CLI"],"articleSection":["AI &amp; ML","GitHub Copilot"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/","url":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/","name":"Give GitHub Copilot CLI real code intelligence with language servers - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","datePublished":"2026-06-10T16:00:00+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/37273876e05b418f9e59da3267030711"},"description":"Install and configure LSP servers for GitHub Copilot CLI, replacing brute-force grep\/decompile with real code intelligence.","breadcrumb":{"@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","width":2400,"height":1260,"caption":"Decorative header image showing the GitHub Copilot CLI ASCII art."},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/give-github-copilot-cli-real-code-intelligence-with-language-servers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"AI &amp; ML","item":"https:\/\/github.blog\/ai-and-ml\/"},{"@type":"ListItem","position":3,"name":"GitHub Copilot","item":"https:\/\/github.blog\/ai-and-ml\/github-copilot\/"},{"@type":"ListItem","position":4,"name":"Give GitHub Copilot CLI real code intelligence with language servers"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/37273876e05b418f9e59da3267030711","name":"Natalie Guevara","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=gd9cd9e7ea5c1a52ff241c7cd2df20d97","url":"https:\/\/secure.gravatar.com\/avatar\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d34214ae173f24fa973342259c80a7987a36de04c1edf4ab27385db6fe99a838?s=96&d=mm&r=g","caption":"Natalie Guevara"},"description":"Content Manager, GitHub Blog","url":"https:\/\/github.blog\/author\/naguevara\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pamS32-p8e","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2026\/01\/CLIBanner_BlogHeader_01.jpg?fit=2400%2C1260","_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/96610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/2278"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=96610"}],"version-history":[{"count":3,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/96610\/revisions"}],"predecessor-version":[{"id":96613,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/96610\/revisions\/96613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/93467"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=96610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=96610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=96610"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=96610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}