mcpField
L
LSP MCP Server

LSP MCP Server

ローカル
github.com/Tritlo開発ツール12866 週間前に更新

LSP MCP Server について

LSP MCP Server は、MCP クライアントと Language Server Protocol サーバーをつなぎ、言語に応じたコード情報を提供します。ツールとリソースを通じて、ホバー情報、補完候補、診断結果、コードアクションを利用できます。

主な機能

  1. 01コード位置のホバー情報を取得
  2. 02補完候補を取得
  3. 03診断結果とコードアクションを取得
  4. 04解析対象のドキュメントを開閉
  5. 05LSP サーバーの再起動と設定
  6. 06診断リソースによる更新の取得

活用シーン

  1. 01ソースファイル内のシンボルや型情報を確認する
  2. 02指定したカーソル位置で補完候補を求める
  3. 03開いているファイルのエラーや警告を確認する
  4. 04選択範囲に対するコードアクションを取得する

MCP 対応

このサーバーは LSP サーバーを起動して接続し、その機能を MCP ツールとリソースとして公開します。診断リソースは更新のサブスクリプションに対応しています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"lsp-mcp-tritlo": {
"command": "npx",
"args": [
"-y",
"tritlo/lsp-mcp"
]
}
}
}
起動コマンドnpx -y tritlo/lsp-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtritlo/lsp-mcp

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

LSP MCP サーバー

LSP (Language Server Protocol) インターフェースと対話するための MCP (Model Context Protocol) サーバーです。 このサーバーは、LLM が LSP の Hover プロバイダーや Completion プロバイダーに問い合わせることを可能にするブリッジとして機能します。

概要

MCP サーバーは次のように動作します:

  1. LSP サーバーに接続する LSP クライアントを起動します
  2. LSP サーバーにリクエストを送信する MCP ツールを公開します
  3. LLM が理解して利用できる形式で結果を返します

これにより、LLM は LSP を活用してより正確なコード提案を得ることができます。

設定:

{
  "mcpServers": {
    "lsp-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "tritlo/lsp-mcp",
        "<language-id>",
        "<path-to-lsp>",
        "<lsp-args>"
      ]
    }
  }
}

機能

MCP ツール
  • get_info_on_location: ファイル内の特定の位置のホバー情報を取得します
  • get_completions: ファイル内の特定の位置の補完候補を取得します
  • get_code_actions: ファイル内の特定の範囲のコードアクションを取得します
  • open_document: 解析のために LSP サーバーでファイルを開きます
  • close_document: LSP サーバーでファイルを閉じます
  • get_diagnostics: 開いているファイルの診断メッセージ(エラー、警告)を取得します
  • start_lsp: 指定したルートディレクトリで LSP サーバーを起動します
  • restart_lsp_server: MCP サーバーを再起動せずに LSP サーバーを再起動します
  • set_log_level: 実行時にサーバーのログ詳細レベルを変更します
MCP リソース
  • lsp-diagnostics:// リソース:サブスクリプションによるリアルタイム更新を伴う診断メッセージにアクセスするためのリソース
  • lsp-hover:// リソース:特定のファイル位置のホバー情報を取得するためのリソース
  • lsp-completions:// リソース:特定の位置のコード補完候補を取得するためのリソース
追加機能
  • 複数の重大度レベルを備えた包括的なログシステム
  • 可読性を高めるための色付きコンソール出力
  • 実行時に設定可能なログレベル
  • 詳細なエラー処理とレポート
  • シンプルなコマンドラインインターフェース

前提条件

  • Node.js (v16 以降)
  • npm

デモサーバーの場合:

  • GHC (8.10 以降)
  • Cabal (3.0 以降)

インストール

MCP サーバーのビルド
  1. このリポジトリをクローンします:

    git clone https://github.com/your-username/lsp-mcp.git
    cd lsp-mcp
    
  2. 依存関係をインストールします:

    npm install
    
  3. MCP サーバーをビルドします:

    npm run build
    

テスト

このプロジェクトには、TypeScript LSP サポートの統合テストが含まれています。これらのテストは、LSP-MCP サーバーがホバー情報、補完、診断、コードアクションなどの LSP 操作を正しく処理することを検証します。

テストの実行

TypeScript LSP テストを実行するには:

npm test

または具体的には:

npm run test:typescript
テストカバレッジ

テストは以下の機能を検証します:

  • モックプロジェクトを使用した TypeScript LSP の初期化
  • 解析のための TypeScript ファイルのオープン
  • 関数と型のホバー情報の取得
  • コード補完候補の取得
  • 診断エラーメッセージの取得
  • エラーに対するコードアクションの取得

テストプロジェクトは test/ts-project/ にあり、診断フィードバックをテストするための意図的なエラーを含む TypeScript ファイルが含まれています。

使用方法

LSP 実行ファイルへのパスと、LSP サーバーに渡す引数を指定して MCP サーバーを実行します:

npx tritlo/lsp-mcp <language> /path/to/lsp [lsp-args...]

例えば:

npx tritlo/lsp-mcp haskell /usr/bin/haskell-language-server-wrapper lsp
重要:LSP サーバーの起動

バージョン 0.2.0 以降では、LSP 機能を使用する前に start_lsp ツールを呼び出して LSP サーバーを明示的に起動する必要があります。これにより、正しいルートディレクトリで適切に初期化されることが保証され、npx などのツールを使用する場合に特に重要です:

{
  "tool": "start_lsp",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}
ログ

サーバーには 8 つの重大度レベルを備えた包括的なログシステムが含まれています:

  • debug: デバッグ目的の詳細情報
  • info: システム動作に関する一般的な情報メッセージ
  • notice: 重要な運用イベント
  • warning: 注意が必要となる可能性のある潜在的な問題
  • error: 動作に影響を与えるがシステムを停止させないエラー状態
  • critical: 即時の対応が必要な重大な状態
  • alert: システムが不安定な状態
  • emergency: システムが使用不能な状態

デフォルトでは、ログは次の場所に送信されます:

  1. 可読性を高めるための色分けされたコンソール出力
  2. クライアントへの MCP 通知(notifications/message メソッド経由)
デバッグログの表示

詳細なデバッグを行うには、次の方法があります。

  1. Claude の実行時に claude --mcp-debug フラグを使用すると、Claude とサーバー間のすべての MCP トラフィックを確認できます。

    claude --mcp-debug
    
  2. set_log_level ツールを使用して、実行時にログレベルを変更します。

    {
      "tool": "set_log_level",
      "arguments": {
        "level": "debug"
      }
    }
    

デフォルトのログレベルは info で、冗長なデバッグメッセージを除外しつつ、適度な運用上の詳細を表示します。

API

サーバーは以下の MCP ツールを提供します。

get_info_on_location

ファイル内の特定の位置にあるホバー情報を取得します。

パラメータ:

  • file_path: ファイルのパス
  • language_id: ファイルが書かれているプログラミング言語(例: "haskell")
  • line: 行番号
  • column: 列位置

例:

{
  "tool": "get_info_on_location",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "line": 3,
    "column": 5
  }
}
get_completions

ファイル内の特定の位置にある補完候補を取得します。

パラメータ:

  • file_path: ファイルのパス
  • language_id: ファイルが書かれているプログラミング言語(例: "haskell")
  • line: 行番号
  • column: 列位置

例:

{
  "tool": "get_completions",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "line": 3,
    "column": 10
  }
}
get_code_actions

ファイル内の特定の範囲に対するコードアクションを取得します。

パラメータ:

  • file_path: ファイルのパス
  • language_id: ファイルが書かれているプログラミング言語(例: "haskell")
  • start_line: 開始行番号
  • start_column: 開始列位置
  • end_line: 終了行番号
  • end_column: 終了列位置

例:

{
  "tool": "get_code_actions",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "start_line": 3,
    "start_column": 5,
    "end_line": 3,
    "end_column": 10
  }
}
start_lsp

指定したルートディレクトリで LSP サーバーを起動します。これは、他の LSP 関連ツールを使用する前に呼び出す必要があります。

パラメータ:

  • root_dir: LSP サーバーのルートディレクトリ(絶対パスを推奨)

例:

{
  "tool": "start_lsp",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}
restart_lsp_server

MCP サーバーを再起動せずに、LSP サーバープロセスを再起動します。これは、LSP サーバーの問題からの復旧や、LSP サーバー設定への変更の適用に役立ちます。

パラメータ:

  • root_dir: (省略可能) LSP サーバーのルートディレクトリ。指定した場合、再起動後にサーバーはこのディレクトリで初期化されます。

root_dir を指定しない例(以前に設定されたルートディレクトリを使用):

{
  "tool": "restart_lsp_server",
  "arguments": {}
}

root_dir を指定する例:

{
  "tool": "restart_lsp_server",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}
open_document

解析のために LSP サーバーでファイルを開きます。これは、診断情報にアクセスしたり、そのファイルに対して他の操作を実行したりする前に呼び出す必要があります。

パラメータ:

  • file_path: 開くファイルのパス
  • language_id: ファイルが書かれているプログラミング言語(例: "haskell")

例:

{
  "tool": "open_document",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell"
  }
}
close_document

ファイルの操作が完了したら、LSP サーバーでそのファイルを閉じます。これはリソースの管理とクリーンアップに役立ちます。

パラメータ:

  • file_path: 閉じるファイルのパス

例:

{
  "tool": "close_document",
  "arguments": {
    "file_path": "/path/to/your/file"
  }
}
get_diagnostics

1 つまたはすべての開いているファイルの診断メッセージ(エラー、警告)を取得します。

パラメータ:

  • file_path: (省略可能) 診断情報を取得するファイルのパス。指定しない場合、開いているすべてのファイルの診断情報を返します。

特定のファイルの例:

{
  "tool": "get_diagnostics",
  "arguments": {
    "file_path": "/path/to/your/file"
  }
}

開いているすべてのファイルの例:

{
  "tool": "get_diagnostics",
  "arguments": {}
}
set_log_level

サーバーのログレベルを設定して、ログメッセージの詳細度を制御します。

パラメータ:

  • level: 設定するログレベル。debug、info、notice、warning、error、critical、alert、emergency のいずれか。

例:

{
  "tool": "set_log_level",
  "arguments": {
    "level": "debug"
  }
}

MCP リソース

ツールに加えて、サーバーは診断情報、ホバー情報、コード補完などの LSP 機能にアクセスするためのリソースを提供します。

診断リソース

サーバーは lsp-diagnostics:// リソーススキームを介して診断情報を公開します。これらのリソースを購読すると、診断情報が変更されたときにリアルタイムで更新を受け取ることができます。

リソース URI:

  • lsp-diagnostics:// - 開いているすべてのファイルの診断情報
  • lsp-diagnostics:///path/to/file - 特定のファイルの診断情報

重要: 診断情報にアクセスする前に、open_document ツールを使用してファイルを開く必要があります。

ホバー情報リソース

サーバーは lsp-hover:// リソーススキームを通じてホバー情報を公開します。これにより、ファイル内の特定の位置にあるコード要素に関する情報を取得できます。

リソース URI の形式:

lsp-hover:///path/to/file?line={line}&column={column}&language_id={language_id}

パラメータ:

  • line: 行番号 (1 始まり)
  • column: 列位置 (1 始まり)
  • language_id: プログラミング言語 (例: "haskell")

例:

lsp-hover:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell
コード補完リソース

サーバーは lsp-completions:// リソーススキームを通じてコード補完の候補を公開します。これにより、ファイル内の特定の位置にある補完候補を取得できます。

リソース URI の形式:

lsp-completions:///path/to/file?line={line}&column={column}&language_id={language_id}

パラメータ:

  • line: 行番号 (1 始まり)
  • column: 列位置 (1 始まり)
  • language_id: プログラミング言語 (例: "haskell")

例:

lsp-completions:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell
利用可能なリソースの一覧表示

利用可能なリソースを確認するには、MCP の resources/list エンドポイントを使用します。レスポンスには、現在開いているファイルで利用可能なすべてのリソースが含まれます:

  • 開いているすべてのファイルの診断リソース
  • 開いているすべてのファイルのホバー情報テンプレート
  • 開いているすべてのファイルのコード補完テンプレート
リソース更新の購読

診断リソースは、診断が変更されたとき (例: ファイルが変更され、新しいエラーや警告が表示されたとき) にリアルタイムの更新を受け取るための購読をサポートしています。診断リソースを購読するには、MCP の resources/subscribe エンドポイントを使用します。

注: ホバーリソースと補完リソースは、特定時点のクエリを表すため、購読をサポートしていません。

リソースとツールの使い分け

LSP の機能にアクセスするには、2 つのアプローチから選択できます:

  1. ツールベースのアプローチ: get_diagnostics、get_info_on_location、get_completions ツールを使用すると、シンプルかつ直接的に情報を取得できます。
  2. リソースベースのアプローチ: lsp-diagnostics://、lsp-hover://、lsp-completions:// リソースを使用すると、より RESTful なアプローチで情報を取得できます。

どちらのアプローチも、同じデータを同じ形式で提供し、ファイルを先に開く必要があるという同じ要件を課します。

トラブルシューティング

  • サーバーの起動に失敗する場合は、LSP 実行ファイルへのパスが正しいことを確認してください
  • 詳細なエラーメッセージについては、ログファイル (設定されている場合) を確認してください

ライセンス

MIT ライセンス

拡張機能

LSP-MCP サーバーは、さまざまなプログラミング言語向けに機能を強化する言語固有の拡張機能をサポートしています。拡張機能は以下を提供できます:

  • カスタムの LSP 固有のツールと機能
  • 言語固有のリソースハンドラーとテンプレート
  • 言語関連のタスク向けの専用プロンプト
  • リアルタイムデータ用のカスタム購読ハンドラー
利用可能な拡張機能

現在、以下の拡張機能が利用可能です:

  • Haskell: Haskell 開発向けの専用プロンプトを提供します。型付きホール (typed-hole) の探索ガイダンスなどが含まれます
拡張機能の使用

拡張機能は、サーバー起動時に言語 ID を指定すると自動的に読み込まれます:

npx tritlo/lsp-mcp haskell /path/to/haskell-language-server-wrapper lsp
拡張機能の名前空間

拡張機能が提供するすべての機能には、言語 ID の名前空間が付けられます。たとえば、Haskell 拡張機能の型付きホールプロンプトは haskell.typed-hole-use として利用できます。

新しい拡張機能の作成

新しい拡張機能を作成するには:

  1. src/extensions/ に、言語名の TypeScript ファイル(例:typescript.ts)を新規作成します

  2. 以下のオプション関数のいずれかを備えた Extension インターフェースを実装します:

    • getToolHandlers(): カスタムツールの実装を提供します
    • getToolDefinitions(): MCP API でカスタムツールを定義します
    • getResourceHandlers(): カスタムリソースハンドラーを実装します
    • getSubscriptionHandlers(): カスタムサブスクリプションハンドラーを実装します
    • getUnsubscriptionHandlers(): カスタムアンサブスクリプションハンドラーを実装します
    • getResourceTemplates(): カスタムリソーステンプレートを定義します
    • getPromptDefinitions(): 言語タスク用のカスタムプロンプトを定義します
    • getPromptHandlers(): カスタムプロンプトハンドラーを実装します
  3. 実装した関数をエクスポートします

拡張機能システムは、一致する言語 ID が指定されると、拡張機能を自動的に読み込みます。

謝辞

  • Language Server Protocol の実装を提供してくれた HLS チーム
  • Model Context Protocol の仕様を提供してくれた Anthropic

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。