[BUG] LSP client does not respond to client/registerCapability, blocking servers that use dynamic registration
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Code's LSP client does not respond to client/registerCapability requests sent by the server during initialization. This causes any LSP server that uses dynamic capability registration to hang indefinitely in a "server is starting" state.
Every LSP tool call fails with:Cannot send notification to LSP server 'plugin:elixir-lsp:expert': server is starting
The server never leaves the "starting" state.
During the LSP handshake:
- Client sends
initialize→ server responds - Client sends
initializednotification - Server sends
client/registerCapability(a server-to-client request with anid) → Claude Code never sends a response - Server blocks waiting for the response, so all subsequent operations (
textDocument/didOpen,textDocument/hover, etc.) are never processed
Per the LSP spec, client/registerCapability is a standard server-to-client request. The client must respond with {"jsonrpc":"2.0","id":<id>,"result":null}.
This blocks any LSP server that uses dynamic capability registration, which is a standard LSP protocol mechanism. Many servers use it — for example, to register file watchers via workspace/didChangeWatchedFiles after initialization.
What Should Happen?
Claude Code's LSP client should respond to client/registerCapability requests with {"jsonrpc":"2.0","id":<id>,"result":null}, allowing the server to proceed with initialization. After that, all LSP operations (hover, go-to-definition, document symbols, etc.) work correctly.
Error Messages/Logs
Error performing hover: Failed to sync file open /workspace/projects/hello_world/lib/hello_world.ex: Cannot send notification to LSP server 'plugin:elixir-lsp:expert': server is starting
Steps to Reproduce
- Install the
elixir-lspplugin from theclaude-code-elixirmarketplace:
- Plugin:
elixir-lsp@claude-code-elixirv2.0.0 (by George Guimaraes)
- Have an Elixir project with
mix.exsand compiled dependencies - Use the LSP tool on any
.exfile, e.g. hover on a module alias - The call fails with "server is starting" — permanently
Verification that the server itself works:
- Manually running the full LSP handshake in a Python script — including responding to
client/registerCapabilitywith{"jsonrpc":"2.0","id":1,"result":null}— produces correct results (hover returns docs, document symbols returns module structure, etc.)
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.71 (Claude Code)
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Xterm
Additional Information
- LSP server: Expert v0.1.0-rc.5 (the official Elixir language server)
- Plugin:
elixir-lsp@claude-code-elixirv2.0.0 (by George Guimaraes) - The specific
client/registerCapabilityrequest Expert sends is to register file watchers for**/mix.lockand**/*.{ex,exs}
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗