Skip to content

LSP: initialize リクエストで clientInfo を通じた自己識別

原文(日本語に翻訳)

LSP: Claude Code は initialize リクエストの clientInfo を通じて言語サーバーに自己識別するようになりました。

原文(英語)

LSP: Claude Code now identifies itself to language servers via clientInfo in the initialize request

概要

Claude Code v2.1.98 では、Language Server Protocol (LSP) の initialize リクエストに clientInfo フィールドが追加されました。これにより、Claude Code が言語サーバー(LSP サーバー)に接続する際、自分が Claude Code であることを名前とバージョン情報で明示的に伝えるようになりました。言語サーバーはこの情報を使って、接続してきたクライアントが Claude Code であることを識別し、クライアント固有の最適化や機能を提供できるようになります。

基本的な使い方

この機能はユーザーが特別な操作をしなくても自動的に機能します。Claude Code が LSP サーバーに接続する際、initialize リクエストに以下のような clientInfo が自動的に含まれます。

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "clientInfo": {
      "name": "Claude Code",
      "version": "2.1.98"
    },
    "capabilities": { ... },
    "rootUri": "file:///path/to/project"
  }
}

言語サーバーはこの情報を受け取り、接続クライアントを識別できます。

実践例

LSP サーバーでのクライアント識別活用

言語サーバーの開発者や管理者は、clientInfo を使ってクライアント固有のレスポンスを実装できます。

typescript
// カスタム LSP サーバーでの clientInfo 活用例(TypeScript)
import { createConnection, TextDocuments, InitializeParams } from 'vscode-languageserver/node';

const connection = createConnection();

connection.onInitialize((params: InitializeParams) => {
  const clientInfo = params.clientInfo;
  
  if (clientInfo?.name === 'Claude Code') {
    console.log(`Claude Code v${clientInfo.version} が接続しました`);
    // Claude Code 固有の設定や最適化を適用
  }
  
  return {
    capabilities: {
      // ...サーバーの機能を返す
    }
  };
});

LSP ログでのクライアント識別確認

bash
# LSP サーバーのデバッグログで接続クライアントを確認
# 例: pylsp(Python LSP Server)のログ
tail -f ~/.cache/pylsp/pylsp.log

# ログに Claude Code からの接続が記録される:
# [INFO] Client connected: Claude Code 2.1.98

複数クライアント環境での Claude Code 識別

bash
# 例えば、同じ言語サーバーに VS Code と Claude Code が接続する場合、
# サーバーはそれぞれを識別できる

# VS Code からの initialize リクエスト:
# clientInfo: { name: "Visual Studio Code", version: "1.90.0" }

# Claude Code からの initialize リクエスト:
# clientInfo: { name: "Claude Code", version: "2.1.98" }

# サーバーは適切に各クライアントに対応できる

LSP 対応言語での恩恵

Claude Code が LSP を通じて以下のような言語サポートを利用する際、clientInfo によってより正確な識別が可能になります。

bash
# Python プロジェクトで Claude Code を使用
cd /path/to/python-project

# Claude Code が pylsp に接続する際、clientInfo が送信される
claude "このコードの型エラーを修正してください"
# pylsp は Claude Code であることを識別し、
# 適切な診断情報を返す

# TypeScript プロジェクトでも同様
cd /path/to/ts-project
claude "このコードをリファクタリングしてください"
# typescript-language-server が Claude Code を識別

言語サーバーの接続ログ確認

bash
# Claude Code のデバッグモードで LSP 通信を確認
claude --debug "ファイルを分析してください"

# デバッグログに LSP initialize リクエストが表示される:
# [LSP] --> initialize { clientInfo: { name: "Claude Code", version: "2.1.98" }, ... }
# [LSP] <-- initializeResult { capabilities: { ... } }

注意点

  • clientInfo フィールドは LSP 仕様(Language Server Protocol specification 3.15 以降)で定義されています
  • この変更はユーザーが意識しなくても自動的に機能します。特別な設定は不要です
  • 古い言語サーバーで clientInfo が認識されない場合でも、LSP の仕様上このフィールドは無視されるため、互換性の問題は生じません
  • 言語サーバーが clientInfo を活用するかどうかは、各言語サーバーの実装に依存します
  • Claude Code のバージョンが更新されると、clientInfo.version の値も更新されます
  • この機能により、言語サーバーのログやデバッグ情報で Claude Code からの接続を特定しやすくなります

関連情報