[BUG] LSP client does not respond to client/registerCapability, blocking servers that use dynamic registration

Resolved 💬 3 comments Opened Mar 9, 2026 by arcanemachine Closed Apr 6, 2026

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:

  1. Client sends initialize → server responds
  2. Client sends initialized notification
  3. Server sends client/registerCapability (a server-to-client request with an id) → Claude Code never sends a response
  4. 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

  1. Install the elixir-lsp plugin from the claude-code-elixir marketplace:
  1. Have an Elixir project with mix.exs and compiled dependencies
  2. Use the LSP tool on any .ex file, e.g. hover on a module alias
  3. 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/registerCapability with {"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-elixir v2.0.0 (by George Guimaraes)
  • The specific client/registerCapability request Expert sends is to register file watchers for **/mix.lock and **/*.{ex,exs}

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗