local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Provides specialized prompts for Haskell development, including typed-hole exploration guidance when working with the Haskell Language Server.
Supports integration with Node.js projects, allowing language models to access language server features for JavaScript and TypeScript codebases.
Enables interaction with TypeScript language servers to provide hover information, code completions, diagnostics, and code actions for TypeScript projects.
LSP MCP サーバー
LSP(言語サーバープロトコル)インターフェースと連携するためのMCP(モデルコンテキストプロトコル)サーバー。このサーバーは、LLMがLSPホバープロバイダーおよび補完プロバイダーにクエリを実行できるようにするブリッジとして機能します。
概要
MCP サーバーは次のように動作します。
- LSPサーバーに接続するLSPクライアントの起動
- LSP サーバーにリクエストを送信する MCP ツールを公開する
- LLMが理解して使用できる形式で結果を返す
これにより、LLM は LSP を利用してより正確なコード提案を行うことができます。
構成:
特徴
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サーバーの構築
- このリポジトリをクローンします:Copy
- 依存関係をインストールします:Copy
- MCP サーバーを構築します。Copy
テスト
このプロジェクトには、TypeScript LSPサポートの統合テストが含まれています。これらのテストでは、LSP-MCPサーバーがホバー情報、補完、診断、コードアクションなどのLSP操作を正しく処理できるかどうかを確認します。
テストの実行
TypeScript LSP テストを実行するには:
または具体的には:
テスト範囲
テストでは次の機能が検証されます。
- モックプロジェクトでTypeScript LSPを初期化する
- 分析のためにTypeScriptファイルを開く
- 関数と型のホバー情報を取得する
- コード補完の提案を取得する
- 診断エラーメッセージの取得
- エラーに対するコードアクションの取得
テスト プロジェクトはtest/ts-project/
にあり、診断フィードバックをテストするための意図的なエラーを含む TypeScript ファイルが含まれています。
使用法
LSP 実行可能ファイルへのパスと、LSP サーバーに渡す引数を指定して、MCP サーバーを実行します。
例えば:
重要: LSPサーバーの起動
バージョン0.2.0以降では、LSP機能を使用する前に、 start_lsp
ツールを呼び出してLSPサーバーを明示的に起動する必要があります。これにより、正しいルートディレクトリで適切に初期化されます。これは、npxなどのツールを使用する場合に特に重要です。
ログ記録
サーバーには、8 つの重大度レベルを備えた包括的なログ システムが含まれています。
debug
: デバッグ用の詳細情報info
: システム操作に関する一般的な情報メッセージnotice
:重要な運用イベントwarning
: 注意が必要な潜在的な問題error
: 動作に影響するがシステムを停止させないエラー状態critical
:直ちに対応が必要な重大な状態alert
: システムは不安定な状態ですemergency
:システムは使用不可です
デフォルトでは、ログは次の場所に送信されます。
- 読みやすさを向上させるために色分けされたコンソール出力
- クライアントへの MCP 通知 (
notifications/message
メソッド経由)
デバッグログの表示
詳細なデバッグを行うには、次の操作を実行できます。
- Claude を実行するときに
claude --mcp-debug
フラグを使用して、Claude とサーバー間のすべての MCP トラフィックを表示します。Copy set_log_level
ツールを使用して実行時にログ レベルを変更します。Copy
デフォルトのログ レベルはinfo
で、詳細なデバッグ メッセージを除外しながら、中程度の操作詳細を表示します。
API
サーバーは次の MCP ツールを提供します。
位置情報を取得する
ファイル内の特定の場所のホバー情報を取得します。
パラメータ:
file_path
: ファイルへのパスlanguage_id
: ファイルが記述されているプログラミング言語(例:"haskell")line
: 行番号column
: 列の位置
例:
get_completeions
ファイル内の特定の場所にある補完候補を取得します。
パラメータ:
file_path
: ファイルへのパスlanguage_id
: ファイルが記述されているプログラミング言語(例:"haskell")line
: 行番号column
: 列の位置
例:
get_code_actions
ファイル内の特定の範囲のコード アクションを取得します。
パラメータ:
file_path
: ファイルへのパスlanguage_id
: ファイルが記述されているプログラミング言語(例:"haskell")start_line
: 開始行番号start_column
: 開始列位置end_line
: 終了行番号end_column
: 終了列の位置
例:
開始_lsp
指定されたルートディレクトリでLSPサーバーを起動します。他のLSP関連ツールを使用する前に、この関数を呼び出す必要があります。
パラメータ:
root_dir
: LSPサーバーのルートディレクトリ(絶対パスを推奨)
例:
再起動lspサーバー
MCPサーバーを再起動せずにLSPサーバープロセスを再起動します。これは、LSPサーバーの問題からの回復や、LSPサーバー設定への変更の適用に役立ちます。
パラメータ:
root_dir
: (オプション) LSPサーバーのルートディレクトリ。指定すると、サーバーは再起動後にこのディレクトリで初期化されます。
root_dir を使用しない例 (以前に設定したルート ディレクトリを使用):
root_dir の例:
ドキュメントを開く
LSPサーバー内のファイルを分析用に開きます。診断情報にアクセスしたり、ファイルに対して他の操作を実行したりする前に、この関数を呼び出す必要があります。
パラメータ:
file_path
: 開くファイルへのパスlanguage_id
: ファイルが記述されているプログラミング言語(例:"haskell")
例:
ドキュメントを閉じる
作業が完了したら、LSPサーバー内のファイルを閉じます。これにより、リソース管理とクリーンアップが容易になります。
パラメータ:
file_path
: 閉じるファイルへのパス
例:
診断情報を取得する
開いている 1 つまたはすべてのファイルの診断メッセージ (エラー、警告) を取得します。
パラメータ:
file_path
: (オプション) 診断情報を取得するファイルへのパス。指定しない場合は、開いているすべてのファイルの診断情報を返します。
特定のファイルの例:
開いているすべてのファイルの例:
ログレベル設定
ログ メッセージの詳細度を制御するためにサーバーのログ レベルを設定します。
パラメータ:
level
: 設定するログレベル。debug、info
、notice
、warning
、error
、critical
、alert
、emergency
のいずれかにdebug
ます。
例:
MCPリソース
ツールに加えて、サーバーは診断、ホバー情報、コード補完などの LSP 機能にアクセスするためのリソースも提供します。
診断リソース
サーバーはlsp-diagnostics://
リソーススキームを介して診断情報を公開します。これらのリソースをサブスクライブすることで、診断情報が変更された際にリアルタイムで更新情報を受け取ることができます。
リソース URI:
lsp-diagnostics://
- 開いているすべてのファイルの診断lsp-diagnostics:///path/to/file
- 特定のファイルの診断
重要: 診断にアクセスする前に、 open_document
ツールを使用してファイルを開く必要があります。
ホバー情報リソース
サーバーはlsp-hover://
リソーススキームを介してホバー情報を公開します。これにより、ファイル内の特定の位置にあるコード要素に関する情報を取得できます。
リソース URI 形式:
パラメータ:
line
: 行番号(1から始まる)column
: 列位置(1から始まる)language_id
: プログラミング言語(例:"haskell")
例:
コード補完リソース
サーバーはlsp-completions://
リソーススキームを介してコード補完候補を公開します。これにより、ファイル内の特定の位置で補完候補を取得できます。
リソース URI 形式:
パラメータ:
line
: 行番号(1から始まる)column
: 列位置(1から始まる)language_id
: プログラミング言語(例:"haskell")
例:
利用可能なリソースの一覧
利用可能なリソースを見つけるには、MCPのresources/list
エンドポイントを使用してください。レスポンスには、現在開いているファイルで利用可能なすべてのリソースが含まれます。これには以下が含まれます。
- 開いているすべてのファイルの診断リソース
- 開いているすべてのファイルのホバー情報テンプレート
- 開いているすべてのファイルのコード補完テンプレート
リソース更新の購読
診断リソースは、診断情報が変更された場合(例:ファイルが変更され、新しいエラーや警告が表示された場合)にリアルタイムで更新情報を受け取るためのサブスクリプションをサポートしています。MCP resources/subscribe
エンドポイントを使用して診断リソースをサブスクライブしてください。
注: ホバー リソースと完了リソースは、ポイントインタイム クエリを表すため、サブスクリプションをサポートしません。
リソースとツールの操作
LSP 機能にアクセスするには、次の 2 つの方法から選択できます。
- ツールベースのアプローチ:
get_diagnostics
、get_info_on_location
、およびget_completions
ツールを使用して、シンプルかつ直接的に情報を取得します。 - リソースベースのアプローチ: より RESTful なアプローチを実現するには
lsp-diagnostics://
、lsp-hover://
、およびlsp-completions://
リソースを使用します。
どちらのアプローチも同じ形式で同じデータを提供し、最初にファイルを開く必要があるという同じ要件を適用します。
トラブルシューティング
- サーバーの起動に失敗した場合は、LSP実行ファイルへのパスが正しいことを確認してください。
- 詳細なエラーメッセージについては、ログファイル(設定されている場合)を確認してください。
ライセンス
MITライセンス
拡張機能
LSP-MCPサーバーは、さまざまなプログラミング言語に対応する機能を強化する言語固有の拡張機能をサポートしています。拡張機能により、以下の機能が提供されます。
- LSP固有のカスタムツールと機能
- 言語固有のリソースハンドラーとテンプレート
- 言語関連のタスクに特化したプロンプト
- リアルタイムデータ用のカスタムサブスクリプションハンドラー
利用可能な拡張機能
現在、次の拡張機能が利用可能です。
- Haskell :型付きホール探索ガイダンスを含む、Haskell開発のための特別なプロンプトを提供します。
拡張機能の使用
サーバーの起動時に言語 ID を指定すると、拡張機能は自動的に読み込まれます。
拡張機能の名前空間
拡張機能が提供するすべての機能は、言語IDで名前空間化されます。例えば、Haskell拡張機能の typed-hole プロンプトはhaskell.typed-hole-use
として利用できます。
新しい拡張機能の作成
新しい拡張機能を作成するには:
src/extensions/
に、言語名を冠した新しい TypeScript ファイルを作成します (例:typescript.ts
)- 次のいずれかのオプション関数を使用して Extension インターフェイスを実装します。
getToolHandlers()
: カスタムツール実装を提供するgetToolDefinitions()
: MCP API でカスタムツールを定義するgetResourceHandlers()
: カスタムリソースハンドラーを実装するgetSubscriptionHandlers()
: カスタムサブスクリプションハンドラーを実装するgetUnsubscriptionHandlers()
: カスタムの購読解除ハンドラーを実装するgetResourceTemplates()
: カスタムリソーステンプレートを定義するgetPromptDefinitions()
: 言語タスクのカスタムプロンプトを定義するgetPromptHandlers()
: カスタムプロンプトハンドラーを実装する
- 実装関数をエクスポートする
一致する言語 ID が指定されると、拡張機能システムは拡張機能を自動的に読み込みます。
謝辞
- 言語サーバープロトコル実装のHLSチーム
- モデルコンテキストプロトコル仕様のAnthropic
This server cannot be installed
大規模言語モデルを言語サーバー プロトコル インターフェイスにブリッジし、LLM が LSP のホバー情報、補完、診断、コード アクションにアクセスして、コード提案を改善できるようにします。