lsp-integration

This skill should be used when the user asks to "add LSP server", "configure language server", "set up LSP in plugin", "add code intelligence", "integrate language server protocol", "use pyright-lsp", "use typescript-lsp", "use rust-lsp", "socket transport", "initializationOptions", mentions LSP servers, or discusses extensionToLanguage mappings. Provides guidance for integrating Language Server Protocol servers into Claude Code plugins for enhanced code intelligence.

16 stars

Best use case

lsp-integration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

This skill should be used when the user asks to "add LSP server", "configure language server", "set up LSP in plugin", "add code intelligence", "integrate language server protocol", "use pyright-lsp", "use typescript-lsp", "use rust-lsp", "socket transport", "initializationOptions", mentions LSP servers, or discusses extensionToLanguage mappings. Provides guidance for integrating Language Server Protocol servers into Claude Code plugins for enhanced code intelligence.

Teams using lsp-integration 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

$curl -o ~/.claude/skills/lsp-integration/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/lsp-integration/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/lsp-integration/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How lsp-integration Compares

Feature / Agentlsp-integrationStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

This skill should be used when the user asks to "add LSP server", "configure language server", "set up LSP in plugin", "add code intelligence", "integrate language server protocol", "use pyright-lsp", "use typescript-lsp", "use rust-lsp", "socket transport", "initializationOptions", mentions LSP servers, or discusses extensionToLanguage mappings. Provides guidance for integrating Language Server Protocol servers into Claude Code plugins for enhanced code intelligence.

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

# LSP Integration for Claude Code Plugins

## Overview

Language Server Protocol (LSP) servers provide code intelligence features like go-to-definition, find references, and hover information. Claude Code plugins can bundle or configure LSP servers to enhance Claude's understanding of code.

**Key capabilities:**

- Enable go-to-definition for code navigation
- Find all references to symbols
- Get hover information and documentation
- Support language-specific features (completions, diagnostics)

## LSP Server Configuration

Plugins can provide LSP servers in the plugin manifest:

### Basic Configuration

```json
{
  "name": "my-plugin",
  "lspServers": {
    "python": {
      "command": "pyright-langserver",
      "args": ["--stdio"],
      "extensionToLanguage": {
        ".py": "python",
        ".pyi": "python"
      }
    }
  }
}
```

### Separate File Configuration

LSP servers can also be configured in a separate `.lsp.json` file at the plugin root:

```json
{
  "go": {
    "command": "gopls",
    "args": ["serve"],
    "extensionToLanguage": {
      ".go": "go"
    }
  }
}
```

Reference this file in `plugin.json`:

```json
{
  "name": "my-plugin",
  "lspServers": "./.lsp.json"
}
```

### Configuration Fields

**command** (required): The LSP server executable

**args** (optional): Command-line arguments for the server

**extensionToLanguage** (required): Maps file extensions to language IDs

```json
{
  "extensionToLanguage": {
    ".py": "python",
    ".pyi": "python",
    ".pyw": "python"
  }
}
```

**env** (optional): Environment variables for the server process

```json
{
  "env": {
    "PYTHONPATH": "${CLAUDE_PLUGIN_ROOT}/lib"
  }
}
```

**transport** (optional): Communication transport - `stdio` (default) or `socket`

```json
{
  "lspServers": {
    "dart": {
      "transport": "socket",
      "command": "dart",
      "args": ["language-server", "--port", "8123"],
      "extensionToLanguage": { ".dart": "dart" }
    }
  }
}
```

Socket transport connects to the server via TCP port instead of stdin/stdout.

**initializationOptions** (optional): Options passed to the server during LSP initialization

```json
{
  "initializationOptions": {
    "typescript": {
      "tsdk": "./node_modules/typescript/lib"
    },
    "diagnostics": true,
    "formatting": { "tabSize": 2 }
  }
}
```

**settings** (optional): Settings passed via `workspace/didChangeConfiguration`

**workspaceFolder** (optional): Workspace folder path for the server

**startupTimeout** (optional): Maximum time to wait for server startup in milliseconds

**shutdownTimeout** (optional): Maximum time to wait for graceful shutdown in milliseconds

**restartOnCrash** (optional): Whether to automatically restart the server if it crashes

**maxRestarts** (optional): Maximum number of restart attempts before giving up

## What Claude Gains from LSP

When an LSP plugin is installed and its language server binary is available, Claude gains two key capabilities:

### Automatic Diagnostics

After every file edit Claude makes, the language server analyzes the changes and reports errors and warnings back automatically. Claude sees type errors, missing imports, and syntax issues without needing to run a compiler or linter. If Claude introduces an error, it notices and fixes the issue in the same turn.

### Code Navigation

Claude can use the language server to:

- Jump to definitions
- Find all references to a symbol
- Get type information on hover
- List symbols in a file
- Find implementations of interfaces
- Trace call hierarchies

These operations give Claude more precise navigation than grep-based search.

## Pre-built LSP Plugins

Claude Code provides official LSP plugins for common languages. Install from the marketplace:

| Language   | Plugin              | Binary Required              |
| ---------- | ------------------- | ---------------------------- |
| C/C++      | `clangd-lsp`        | `clangd`                     |
| C#         | `csharp-lsp`        | `csharp-ls`                  |
| Go         | `gopls-lsp`         | `gopls`                      |
| Java       | `jdtls-lsp`         | `jdtls`                      |
| Kotlin     | `kotlin-lsp`        | `kotlin-language-server`     |
| Lua        | `lua-lsp`           | `lua-language-server`        |
| PHP        | `php-lsp`           | `intelephense`               |
| Python     | `pyright-lsp`       | `pyright-langserver`         |
| Rust       | `rust-analyzer-lsp` | `rust-analyzer`              |
| Swift      | `swift-lsp`         | `sourcekit-lsp`              |
| TypeScript | `typescript-lsp`    | `typescript-language-server` |

Install the language server binary first, then install the plugin:

```bash
# Example: Python
pip install pyright  # or: npm install -g pyright
claude /install-plugin pyright-lsp
```

**Troubleshooting**: If you see `Executable not found in $PATH` in the `/plugin` Errors tab, install the required binary from the table above.

## Creating Custom LSP Integration

### Step 1: Choose or Build LSP Server

Options:

1. **Use existing LSP server** - Most languages have official or community servers
2. **Bundle with plugin** - Include server binary in plugin
3. **Require user installation** - Document server installation in README

### Step 2: Configure in plugin.json

```json
{
  "name": "go-lsp",
  "version": "1.0.0",
  "description": "Go language server integration",
  "lspServers": {
    "go": {
      "command": "gopls",
      "args": ["serve"],
      "extensionToLanguage": {
        ".go": "go",
        ".mod": "go.mod"
      }
    }
  }
}
```

### Step 3: Bundle Server (Optional)

For self-contained plugins, bundle the server:

```
my-lsp-plugin/
├── .claude-plugin/
│   └── plugin.json
└── servers/
    └── my-lsp-server
```

Use `${CLAUDE_PLUGIN_ROOT}` for the command path:

```json
{
  "lspServers": {
    "mylang": {
      "command": "${CLAUDE_PLUGIN_ROOT}/servers/my-lsp-server",
      "args": ["--stdio"]
    }
  }
}
```

### Step 4: Document Requirements

In your plugin README:

- List required external dependencies
- Provide installation instructions
- Note supported language versions
- Describe available features

## Extension to Language Mapping

The `extensionToLanguage` field maps file extensions to LSP language identifiers:

### Common Mappings

```json
{
  "extensionToLanguage": {
    ".py": "python",
    ".js": "javascript",
    ".ts": "typescript",
    ".jsx": "javascriptreact",
    ".tsx": "typescriptreact",
    ".rs": "rust",
    ".go": "go",
    ".java": "java",
    ".rb": "ruby",
    ".php": "php",
    ".c": "c",
    ".cpp": "cpp",
    ".h": "c",
    ".hpp": "cpp",
    ".cs": "csharp"
  }
}
```

### Multiple Extensions

A single language can have multiple extensions:

```json
{
  "extensionToLanguage": {
    ".ts": "typescript",
    ".mts": "typescript",
    ".cts": "typescript",
    ".d.ts": "typescript"
  }
}
```

## LSP Server Lifecycle

### Startup

LSP servers start automatically when:

1. Claude Code session begins
2. Plugin with LSP server is enabled
3. User opens a file matching configured extensions

### Communication

- Uses stdio for client-server communication
- Follows LSP specification for messages
- Claude Code manages the connection

### Shutdown

Servers terminate when:

- Claude Code session ends
- Plugin is disabled
- Server crashes (auto-restart may occur)

## Best Practices

### Performance

1. **Lazy initialization** - Servers start when needed, not at session start
2. **Minimal configuration** - Only enable features you need
3. **Resource limits** - Consider memory/CPU impact of servers

### Compatibility

1. **Check LSP version** - Ensure server supports required protocol version
2. **Test cross-platform** - Verify on macOS, Linux, Windows
3. **Handle missing servers** - Gracefully degrade if server not installed

### Documentation

1. **List prerequisites** - External tools, versions required
2. **Provide setup guide** - Step-by-step installation
3. **Document features** - Which LSP capabilities are supported

## Troubleshooting

### Server Not Starting

**Check:**

- Command path is correct
- Server is installed and executable
- Required dependencies are available
- `${CLAUDE_PLUGIN_ROOT}` is used for bundled servers

### No Code Intelligence

**Check:**

- File extension matches `extensionToLanguage` mapping
- Language ID is correct for the server
- Server supports the requested feature

### Debug Mode

Enable debug logging:

```bash
claude --debug
```

Look for:

- LSP server startup messages
- Communication logs
- Error responses

## Quick Reference

### Minimal LSP Configuration

```json
{
  "lspServers": {
    "language": {
      "command": "server-command",
      "extensionToLanguage": {
        ".ext": "language-id"
      }
    }
  }
}
```

### Full LSP Configuration

```json
{
  "lspServers": {
    "language": {
      "command": "${CLAUDE_PLUGIN_ROOT}/servers/lsp-server",
      "args": ["--stdio", "--log-level", "warn"],
      "extensionToLanguage": {
        ".ext1": "language",
        ".ext2": "language"
      },
      "env": {
        "CONFIG_PATH": "${CLAUDE_PLUGIN_ROOT}/config"
      },
      "transport": "stdio",
      "initializationOptions": {},
      "settings": {},
      "workspaceFolder": ".",
      "startupTimeout": 10000,
      "shutdownTimeout": 5000,
      "restartOnCrash": true,
      "maxRestarts": 3
    }
  }
}
```

### Best Practices Summary

**DO:**

- Use `${CLAUDE_PLUGIN_ROOT}` for bundled server paths
- Map all relevant file extensions
- Document external dependencies
- Test on multiple platforms
- Handle server unavailability gracefully

**DON'T:**

- Hardcode absolute paths
- Assume servers are pre-installed
- Bundle large binaries without consideration
- Ignore server startup errors

## Additional Resources

### Reference Files

For detailed information, consult:

- **`references/popular-lsp-servers.md`** - Curated list of LSP servers by language with installation commands
- **`references/lsp-capabilities.md`** - LSP protocol capabilities and what they enable

### Examples

- **`examples/minimal-lsp-plugin/`** - Complete directory structure for a minimal LSP plugin
- **`examples/lsp-json-configs.md`** - Various `.lsp.json` configuration patterns

### External Resources

- **LSP Specification**: <https://microsoft.github.io/language-server-protocol/>
- **Claude Code Plugins Reference**: <https://docs.anthropic.com/en/docs/claude-code/plugins-reference>
- **Language Server List**: <https://langserver.org/>

Related Skills

moai-context7-lang-integration

16
from diegosouzapw/awesome-omni-skill

Enterprise-grade Context7 MCP integration patterns for language-specific documentation access with real-time library resolution and intelligent caching

MCP Integration

16
from diegosouzapw/awesome-omni-skill

Model Context Protocol (MCP) integration specialist. Use when creating MCP server configurations, implementing MCP integrations, or optimizing MCP performance. Specializes in MCP server architecture and integration patterns.

mapbox-integration-patterns

16
from diegosouzapw/awesome-omni-skill

Official integration patterns for Mapbox GL JS across popular web frameworks. Covers setup, lifecycle management, token handling, search integration, and common pitfalls. Based on Mapbox's create-web-app scaffolding tool.

kuroco-frontend-integration

16
from diegosouzapw/awesome-omni-skill

Kurocoとフロントエンドフレームワークの統合パターンおよびAI自動デプロイメント。使用キーワード:「Kuroco Nuxt」「Kuroco Next.js」「フロントエンド連携」「Nuxt3」「Nuxt2」「App Router」「Pages Router」「SSG」「SSR」「静的生成」「コンテンツ表示」「ログイン実装」「会員登録」「signup」「KurocoPages」「フロントエンド環境構築」「Vue」「React」「useAsyncData」「$fetch」「asyncData」「composable」「useAuth」「認証状態」「プロフィール取得」「profile」「generateStaticParams」「動的ルート」「v-html」「dangerouslySetInnerHTML」「XSS対策」「サードパーティCookie」「credentials include」「AI自動デプロイ」「Kuroco自動化」「サイト登録API」「自動ビルド」「自動デプロイ」「temp-upload」「presigned URL」「S3アップロード」「artifact_url」「KurocoFront」「プレビューデプロイ」「stage_url」「add_site」「site_key」「kuroco_front/deploy」「CI/CD」「フロントエンドビルド」「ZIP配備」「自動公開」「nuxt generate」「next build」「vite build」「デプロイAPI」「一時アップロード」「署名付きURL」。Nuxt/Next.jsでのKuroco連携、認証実装、SSG/SSR設定、AI自動デプロイに関する質問で使用。

integration

16
from diegosouzapw/awesome-omni-skill

Backend-Frontend integration patterns expert. Type-safe API contracts with Pydantic-Zod validation sync (Python FastAPI) or Prisma-TypeScript native (Next.js). Shadcn forms connected to backend, error handling, loading states. Use when creating full-stack features.

hubspot-integration

16
from diegosouzapw/awesome-omni-skill

Expert patterns for HubSpot CRM integration including OAuth authentication, CRM objects, associations, batch operations, webhooks, and custom objects. Covers Node.js and Python SDKs. Use when: hubs...

gRPC Integration

16
from diegosouzapw/awesome-omni-skill

Comprehensive guide to gRPC for high-performance microservices communication with Protocol Buffers.

External KI Integration

16
from diegosouzapw/awesome-omni-skill

Skill for accessing external AI services (ChatGPT, Claude, Hugging Face, etc.) via browser automation (Chrome Relay) and APIs to assist with tasks.

dapr-integration

16
from diegosouzapw/awesome-omni-skill

Integrate Dapr building blocks for event-driven microservices - Pub/Sub, State Management, Secrets, Service Invocation, and Jobs API. Use when implementing event-driven architecture for Phase 5. (project)

benchling-integration

16
from diegosouzapw/awesome-omni-skill

Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.

arch-cross-service-integration

16
from diegosouzapw/awesome-omni-skill

Use when designing or implementing cross-service communication, data synchronization, or service boundary patterns.

api-integration

16
from diegosouzapw/awesome-omni-skill

API 集成和设计最佳实践。用于设计、实现和优化 RESTful API、GraphQL API 或其他 API 集成。包括错误处理、认证、限流、版本控制等。