MCP Language Server

by isaacphi
Verified
BSD 3-Clause
172
  • Apple
  • Linux

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Integrates with Python language server (pyright) to provide code intelligence, including definitions, references, diagnostics, and code lens for Python codebases

  • Integrates with Rust language server (rust-analyzer) to provide code intelligence, including definitions, references, diagnostics, and code lens for Rust codebases

  • Integrates with TypeScript language server (tsserver) to provide code intelligence, including definitions, references, diagnostics, and code lens for TypeScript codebases

MCP 言語サーバー

言語サーバーを実行し、言語サーバーと通信するためのツールを提供するモデル コンテキスト プロトコル (MCP) サーバー。

モチベーション

ファイルシステムサーバーを備えたClaudeデスクトップは、小規模なプロジェクトでは魔法のように快適に動作します。しかし、いくつかのファイルを追加したりインポートしたりすると、だんだんと使い物にならなくなります。このプロジェクトでは、大規模プロジェクトでも同じような体験を実現したいと考えています。

言語サーバーは、LLMがしばしば苦労するタスク、例えば型の正確な理解、関係性の理解、正確なシンボル参照の提供などに優れています。このプロジェクトは、これらのツールをLLMに導入することを目的としています。LSPはMCPの明確なインスピレーションにもなっているので、これらを融合させてみるのはいかがでしょうか?

状態

⚠️ プレベータ品質 ⚠️

このサーバーを以下の言語サーバーでテストしました

  • パイライト(Python)
  • tsserver (TypeScript)
  • ゴプルス(Go)
  • 錆分析ツール (Rust)

しかし、もっと多くのものと互換性があるはずです。

ツール

  • read_definition : コードベースから任意のシンボル (関数、型、定数など) の完全なソース コード定義を取得します。
  • find_references : コードベース全体でシンボルのすべての使用箇所と参照を検索します。
  • get_diagnostics : 警告やエラーなど、特定のファイルの診断情報を提供します。
  • get_codelens : コードの追加のコンテキストとアクションに関するコード レンズのヒントを取得します。
  • execute_codelens : コード レンズ アクションを実行します。
  • apply_text_edit : プログラムによってファイルに対して複数のテキスト編集を行うことができます。

舞台裏では、この MCP サーバーは言語サーバーからのworkspace/applyEdit要求に応じて動作し、リファクタリング要求、インポートの追加、コードのフォーマットなどを適用できます。

各ツールは、行番号や追加のコンテキストなど、出力をカスタマイズするための様々なオプションをサポートしています。詳細な使用方法については、ツールのドキュメントをご覧ください。行番号は、 apply_text_edit正確な編集を行うために必要です。

について

このコードベースは、LSP通信を処理するためにgoplsのコードを編集して使用しています。詳細は帰属を参照してください。

MCP 通信にはmcp-go が使用されます。

前提条件

Go をインストールします。https: //golang.org/doc/installの指示に従ってください。

このサーバーを取得または更新:

go install github.com/isaacphi/mcp-language-server@latest

コードベース用の言語サーバーをインストールします。

  • Python (pyright): npm install -g pyright
  • TypeScript (tsserver): npm install -g typescript typescript-language-server
  • Go (gopls): go install golang.org/x/tools/gopls@latest
  • Rust (rust-analyzer): rustup component add rust-analyzer
  • または任意の言語サーバーを使用する

設定

Claude Desktop 設定 (または同様の MCP 対応クライアント) に次のような構成を追加します。

{ "mcpServers": { "language-server": { "command": "go", "args": [ "run", "github.com/isaacphi/mcp-language-server@latest", "--workspace", "/Users/you/dev/yourcodebase", "--lsp", "/opt/homebrew/bin/pyright-langserver", "--", "--stdio" ], "env": { "LOG_LEVEL": "INFO" } } } }

交換する:

  • /Users/you/dev/yourcodebaseにプロジェクトへの絶対パスを記述します
  • /opt/homebrew/bin/pyright-langserverに言語サーバへのパスを記述します( whichコマンドを使って見つけます。例: which pyright-langserver
  • --の後の引数は言語サーバーに引数として送信されます。
  • すべての環境変数は言語サーバーに渡されます。一部の環境変数は、お使いの言語サーバーで必須となる場合があります。例えば、 gopls正常に動作させるには、 GOPATHGOCACHEが必要でした。
  • LOG_LEVELはオプションです。下記を参照してください。

発達

リポジトリをクローンします。

git clone https://github.com/isaacphi/mcp-language-server.git cd mcp-language-server

開発依存関係をインストールします:

go mod download

建てる:

go build

テストを実行します:

go test ./...

テストスナップショットを更新します。

UPDATE_SNAPSHOTS=true go test ./integrationtests/...

ローカルバイナリを使用するように Claude Desktop (または同様のもの) を構成します。

{ "mcpServers": { "language-server": { "command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", "args": [ "--workspace", "/path/to/workspace", "--lsp", "/path/to/language/server" ], "env": { "LOG_LEVEL": "DEBUG" } } } }

変更後に再構築します。

フィードバック

含む

env: { "LOG_LEVEL": "DEBUG", }

詳細なLSPおよびアプリケーションログを取得するには、 LOG_LEVEL DEBUGに設定すると、すべてのコンポーネントの詳細なログ出力が有効になります。wire wire:DEBUGを指定してLOG_COMPONENT_LEVELSを追加すると、生のLSP JSONメッセージが表示されます。問題を報告する際は、できるだけ多くの情報を含めてください。

私が注目している機能は次のとおりです。

  • [x] 定義を読む
  • [x] 参照を取得する
  • [x] 編集を適用
  • [x] 診断を受ける
  • [x] コードレンズ
  • [ ] ホバー情報
  • [ ] コードアクション
  • [ ] コンテキストとキャンセルの扱いの改善
  • [ ] 共通言語用のLSPサーバー設定オプションとプリセットを追加
  • [ ] ツール(ページネーションなど)用のより一貫性がありスケーラブルな API を作成する
  • [ ] 定義や参照を読むときに、診断、コード レンズ、ホバー、コード アクションを組み合わせて、抽象度の高いツールを作成します。
-
security - not tested
A
license - permissive license
-
quality - not tested

言語サーバーを実行し、サーバーと通信するためのツールを提供します。言語サーバーは、型の正確な理解、関係の理解、正確なシンボル参照の提供など、LLMがしばしば困難に感じるタスクに優れています。

  1. Motivation
    1. Status
      1. Tools
        1. About
          1. Prerequisites
            1. Setup
              1. Development
                1. Feedback
                  ID: 217llrqnne