{
  "markdown": "# csharp-roslyn-lsp\n\nA Claude Code plugin that integrates Microsoft's official **roslyn-language-server** — the same C# language server that powers the VS Code C# extension and C# Dev Kit.\n\nThis gives Claude Code semantic understanding of your C# codebase: go-to-definition, find-references, call hierarchy, and real-time diagnostics — instead of relying on grep.\n\n## Why this plugin?\n\nThe official Claude Code marketplace ships a `csharp-lsp` plugin based on the community `csharp-ls` server, but it has [packaging issues](https://github.com/anthropics/claude-code/issues/15359) and [missing LSP handler support](https://github.com/anthropics/claude-code/issues/16360). This plugin uses Microsoft's **roslyn-language-server** which is more feature-complete and actively maintained as part of the [dotnet/roslyn](https://github.com/dotnet/roslyn) project.\n\n> **Credit:** Based on [jrusbatch's integration guide](https://gist.github.com/jrusbatch/1d2c539ef17476c8703f04a2e9148693), simplified for one-command installation with no absolute paths.\n\n## Prerequisites\n\n| Requirement | Version | Check |\n|---|---|---|\n| .NET SDK | **10.0+** | `dotnet --version` |\n| Claude Code | **2.1.50+** | `claude --version` |\n\n> .NET SDK 10.0 download: https://dotnet.microsoft.com/download\n\n## Quick Start\n\n### 1. Install the language server\n\n```bash\ndotnet tool install --global roslyn-language-server --prerelease\n```\n\nVerify it's on your PATH:\n\n```bash\n# Linux / macOS\nwhich roslyn-language-server\n\n# Windows (PowerShell)\nwhere.exe roslyn-language-server\n```\n\nIf not found, add the .NET tools directory to your PATH:\n\n```bash\n# Linux / macOS — add to ~/.bashrc or ~/.zshrc:\nexport PATH=\"$PATH:$HOME/.dotnet/tools\"\n\n# Windows — usually added automatically, but verify:\n# %USERPROFILE%\\.dotnet\\tools should be in your PATH\n```\n\n### 2. Install the plugin\n\n```bash\n# Open Claude Code\nclaude\n\n# Add this marketplace\n/plugin marketplace add burhancetinkaya/csharp-roslyn-lsp\n```\n\nThen exit and install:\n\n```bash\nclaude plugin install -s user csharp-roslyn-lsp\n```\n\n### 3. Verify\n\n```bash\nclaude\n```\n\nRun `/plugin` → go to the **Installed** tab. You should see:\n\n```\ncsharp-roslyn-lsp Plugin · csharp-roslyn-marketplace · ✔ enabled\n```\n\nTest it by asking Claude:\n\n```\nRun the C# LSP documentSymbol operation on src/MyService.cs\n```\n\nYou should see output like:\n\n```\n● LSP(operation: \"documentSymbol\", file: \"src/MyService.cs\")\n```\n\n## Supported LSP Operations\n\nThese are the operations Claude Code supports as of v2.1.62+:\n\n| Operation | Status | Description |\n|---|---|---|\n| `documentSymbol` | ✅ Stable | List all classes, methods, properties in a file |\n| `workspaceSymbol` | ✅ Stable | Search for symbols by name across the workspace |\n| `prepareCallHierarchy` | ✅ Stable | Start a call hierarchy at a position |\n| `incomingCalls` | ✅ Stable | Find all callers of a method |\n| `outgoingCalls` | ✅ Stable | Find all methods called by a method |\n| `goToDefinition` | ⚠️ Partial | Works sometimes, may hang on large solutions |\n| `findReferences` | ⚠️ Partial | Works sometimes, may hang on large solutions |\n| `hover` | ⚠️ Partial | Works sometimes, may hang on large solutions |\n| `goToImplementation` | ⚠️ Partial | Find implementations of interfaces/abstract methods |\n\n> **Why \"Partial\"?** Claude Code's LSP client doesn't yet implement `workspace/configuration`, `client/registerCapability`, and `window/workDoneProgress/create`. Structural operations (documentSymbol, workspaceSymbol, call hierarchy) work because they don't need full project graph analysis. Semantic operations sometimes hang waiting for responses that never come. Tracked at [#16360](https://github.com/anthropics/claude-code/issues/16360).\n\n## Project Structure\n\n```\ncsharp-roslyn-lsp/\n├── .claude-plugin/\n│   └── marketplace.json            ← Marketplace catalog\n├── plugins/\n│   └── csharp-roslyn-lsp/\n│       ├── .claude-plugin/\n│       │   └── plugin.json         ← Plugin metadata\n│       ├── .lsp.json               ← LSP server config\n│       └── README.md\n├── LICENSE\n└── README.md                       ← You are here\n```\n\n## Configuration Notes\n\n**No absolute paths.** Unlike many LSP setups, this plugin uses just `roslyn-language-server` as the command — it resolves from your PATH. No need to hardcode `~/.dotnet/tools/roslyn-language-server.cmd`.\n\n**Startup timeout is 120 seconds.** Roslyn needs to index your solution on first launch. For large solutions (100+ projects) this can take up to 2 minutes. Subsequent startups are faster thanks to caching.\n\n**Log level is set to Warning.** Change to `Information` in both `.claude-plugin/marketplace.json` and `plugins/csharp-roslyn-lsp/.lsp.json` if you need to debug. Keep them in sync.\n\n**Windows users:** The `dotnet tool install` command creates `roslyn-language-server.cmd` on Windows. Claude Code resolves `.cmd` extensions automatically — no changes needed.\n\n## Troubleshooting\n\n**\"Executable not found in $PATH\"** in `/plugin` Errors tab:\n- Run `dotnet tool list -g` and confirm `roslyn-language-server` is listed\n- Run `which roslyn-language-server` (or `where.exe` on Windows) to check PATH\n- Restart your terminal after adding PATH entries\n\n**LSP operations hang or return empty:**\n- This is the known Claude Code client limitation (#16360), not a plugin bug\n- `documentSymbol` and `workspaceSymbol` should always work\n- If semantic operations hang, Claude will fall back to grep automatically\n\n**\"No LSP server available for file type\":**\n- Make sure you ran `claude plugin install -s user csharp-roslyn-lsp`\n- Check `/plugin` → Installed tab shows the plugin as enabled\n- Try `/reload-plugins` or restart Claude Code\n\n**Solution not loading:**\n- Roslyn needs a `.sln` or `.csproj` file in or above your working directory\n- Run Claude Code from the solution root directory\n\n## Related Resources\n\n- [roslyn-language-server on NuGet](https://www.nuget.org/packages/roslyn-language-server)\n- [dotnet/roslyn on GitHub](https://github.com/dotnet/roslyn)\n- [Claude Code LSP documentation](https://code.claude.com/docs/en/plugins-reference.md)\n- [Claude Code plugin marketplace docs](https://code.claude.com/docs/en/plugin-marketplaces)\n- [Original integration guide by jrusbatch](https://gist.github.com/jrusbatch/1d2c539ef17476c8703f04a2e9148693)\n- [Issue #16360 — missing LSP handlers](https://github.com/anthropics/claude-code/issues/16360)\n- [Issue #15359 — broken official csharp-lsp plugin](https://github.com/anthropics/claude-code/issues/15359)\n\n## Contributing\n\nPRs welcome. If you find a workaround for the semantic operation hangs or a better Roslyn configuration, please open an issue or PR.\n\n## License\n\nMIT\n",
  "bytes": 6648,
  "sha": "916902f945216a3b105dbcbcd55321321e5d0d26a86d7ceb978b590035190e8c",
  "repo_slug": "burhancetinkaya/csharp-roslyn-lsp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_burhancetinkaya_csharp_roslyn_lsp_csharp_a578d5f1/readme"
}