LSP Integration — Phase 7 of /cc-setup

SkillAI & models

LSP server detection, installation, and Claude Code integration, auto-invoke when setting up a new project, running /cc-setup, or configuring IDE tooling

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the LSP Integration — Phase 7 of /cc-setup skill

What this skill tells your AI

The instructions your AI receives, as published by thelobbi/claude in plugins/claude-code-expert/skills-old/lsp-integration/SKILL.md and read by ahel’s review.

LSP (Language Server Protocol) servers power real-time diagnostics, type checking, and formatting. Claude Code integrates with LSP through PostToolUse hooks to catch errors immediately after writing files.

18-Server Detection Matrix

LanguageLSP ServerInstall CommandDetect Signal
TypeScript/JStypescript-language-servernpm i -g typescript-language-server typescripttsconfig.json, package.json
Python (strict)pyrightnpm i -g pyrightpyproject.toml, requirements.txt
Python (general)pylsppip install python-lsp-server.py files
Gogoplsgo install golang.org/x/tools/gopls@latestgo.mod
Rustrust-analyzerrustup component add rust-analyzerCargo.toml
JavajdtlsEclipse JDT LS (via Mason/LspInstall)pom.xml, build.gradle
C#omnisharpdotnet tool install -g csharp-ls*.csproj, *.sln
Rubysolargraphgem install solargraphGemfile
PHPintelephensenpm i -g intelephensecomposer.json
Elixirelixir-lsmix archive.install hex elixir_lsmix.exs
Sveltesvelte-language-servernpm i -g svelte-language-serversvelte.config.*
Vuevue-language-servernpm i -g @vue/language-servernuxt.config.*
Tailwind CSStailwindcss-language-servernpm i -g @tailwindcss/language-servertailwind.config.*
GraphQLgraphql-language-service-clinpm i -g graphql-language-service-cli*.graphql, schema.gql
Prismaprisma-language-servernpm i -g @prisma/language-serverprisma/ directory
YAMLyaml-language-servernpm i -g yaml-language-server.yaml, .yml files
Dockerfiledockerfile-language-servernpm i -g dockerfile-language-server-nodejsDockerfile
Bashbash-language-servernpm i -g bash-language-server.sh files, .claude/hooks/

Detection Script

Run during Phase 1 of /cc-setup to identify which LSPs to recommend:

#!/usr/bin/env bash
# Detect and report LSP recommendations for current project
check_lsp() {
  local name="$1" signal="$2" install="$3"
  if ls $signal 2>/dev/null | head -1 | grep -q .; then
    if command -v "$(echo "$name" | cut -d/ -f1)" &>/dev/null; then
      echo "  OK:      $name"
    else
      echo "  MISSING: $name — install: $install"
    fi
  fi
}

echo "=== LSP Detection ==="
check_lsp "typescript-language-server" "tsconfig.json package.json" "npm i -g typescript-language-server typescript"
check_lsp "pyright" "pyproject.toml requirements.txt" "npm i -g pyright"
check_lsp "gopls" "go.mod" "go install golang.org/x/tools/gopls@latest"
check_lsp "rust-analyzer" "Cargo.toml" "rustup component add rust-analyzer"
check_lsp "solargraph" "Gemfile" "gem install solargraph"
check_lsp "svelte-language-server" "svelte.config.*" "npm i -g svelte-language-server"
check_lsp "tailwindcss-language-server" "tailwind.config.*" "npm i -g @tailwindcss/language-server"
check_lsp "prisma-language-server" "prisma/" "npm i -g @prisma/language-server"
check_lsp "bash-language-server" ".claude/hooks/" "npm i -g bash-language-server"

Claude Code Hook Integration

Claude Code doesn't use LSP directly, but you can use PostToolUse hooks to run LSP-powered diagnostics after file writes.

TypeScript — PostToolUse diagnostics hook

#!/usr/bin/env bash
# .claude/hooks/auto-typecheck.sh
# Registered on: PostToolUse (Write|Edit matcher on *.ts, *.tsx)
INPUT=$(head -c 65536)
FILE=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // ""')

if [[ "$FILE" != *.ts ]] && [[ "$FILE" != *.tsx ]]; then
  echo '{"decision": "approve"}'
  exit 0
fi

# Run whole-project check filtered to changed file — single-file mode ignores tsconfig.json
ERRORS=$(npx tsc --noEmit 2>&1 | grep -F "$(basename "$FILE")" | head -5)
if [ -n "$ERRORS" ]; then
  echo "TypeScript errors in $(basename "$FILE"):" >&2
  echo "$ERRORS" >&2
fi

echo '{"decision": "approve"}'

Python — pyright diagnostics hook

#!/usr/bin/env bash
# Registered on: PostToolUse (Write|Edit matcher on *.py)
INPUT=$(head -c 65536)
FILE=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // ""')

if [[ "$FILE" != *.py ]]; then
  echo '{"decision": "approve"}'
  exit 0
fi

ERRORS=$(pyright "$FILE" 2>&1 | grep -E "error:" | head -5)
if [ -n "$ERRORS" ]; then
  echo "Pyright errors:" >&2
  echo "$ERRORS" >&2
fi

echo '{"decision": "approve"}'

Rust — cargo check hook

#!/usr/bin/env bash
# Registered on: PostToolUse (Write|Edit matcher on *.rs)
INPUT=$(head -c 65536)
FILE=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // ""')

if [[ "$FILE" != *.rs ]]; then
  echo '{"decision": "approve"}'
  exit 0
fi

cargo check 2>&1 | grep -E "^error" | head -10 >&2
echo '{"decision": "approve"}'

settings.json Hook Registration

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/auto-typecheck.sh"
          }
        ]
      }
    ]
  }
}

Why LSP Integration Matters

  • Immediate feedback: Errors surface right after Claude writes a file, not at build time
  • Type-safe edits: TypeScript errors caught before Claude attempts to run tests
  • Batch diagnostics: Run tsc --noEmit across the whole project to catch cross-file breakage
  • Cost savings: Catching errors early avoids multiple round-trips of write → test → fix

LSP vs Built-in IDE Diagnostics

Claude Code has a built-in LSP tool (via mcp__ide__getDiagnostics) when running in VS Code or JetBrains IDE extensions. The hook approach above is for CLI usage where no IDE is attached.

ContextDiagnostics Source
VS Code extensionmcp__ide__getDiagnostics (built-in)
JetBrains extensionmcp__ide__getDiagnostics (built-in)
CLI (terminal)PostToolUse hook → tsc --noEmit / pyright
CI/CD headlessPostToolUse hook → LSP CLI tools

Cost Note

LSP installation is one-time. The diagnostics hooks add ~100ms per file write, which is negligible vs the cost of a missed type error causing a failed test run (which requires another full turn).

Signals

GitHub stars
21
Forks
2
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
lsp-integration
Source
github.com/thelobbi/claude