MCP Language Server について
mcp-language-server は、言語サーバーを起動し、その意味解析機能を LLM に提供する MCP サーバーです。gopls、rust-analyzer、pyright、typescript-language-server、clangd に対応し、クライアントがコードベースを移動しやすくします。ベータ版として公開されています。
主な機能
- 01シンボルの完全なソース定義の取得
- 02シンボルのすべての参照箇所の検索
- 03ファイルの診断情報の表示
- 04ホバーによるドキュメントと型情報の表示
- 05プロジェクト全体にわたるシンボルのリネーム
- 06行番号を指定した複数箇所の編集
活用シーン
- 01LLM がコードベース内の関数や型の定義へ移動すること
- 02シンボルをリネームする前にすべての参照を確認すること
- 03コンパイラのエラーや警告を読み取り修正を支援すること
MCP 対応
本プロジェクトは MCP サーバーであり、言語サーバーをラップして definition、references、rename_symbol などのツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Language Server
これは、LLM に 言語サーバーを実行して公開する MCP サーバーです。MCP 用の言語サーバーではありません。そういうものがあるとすれば、ですが。
デモ
mcp-language-server は、定義の取得、参照、名前変更、診断などのセマンティックツールを利用できるようにすることで、MCP 対応クライアントがコードベースをより簡単にナビゲートできるようにします。

セットアップ
- Go をインストール:https://golang.org/doc/install の手順に従います
- このサーバーをインストールまたは更新:
go install github.com/isaacphi/mcp-language-server@latest - 言語サーバーをインストール: 以下のガイドのいずれかに従います
- MCP クライアントを設定: 以下のガイドのいずれかに従います
Go(gopls)
gopls をインストール:go install golang.org/x/tools/gopls@latest
MCP クライアントを設定:クライアントごとに異なりますが、設定方法は似ています。Claude Desktop の場合は、以下を ~/Library/Application\ Support/Claude/claude_desktop_config.json に追加します。
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": ["--workspace", "/Users/you/dev/yourproject/", "--lsp", "gopls"],
"env": {
"PATH": "/opt/homebrew/bin:/Users/you/go/bin",
"GOPATH": "/users/you/go",
"GOCACHE": "/users/you/Library/Caches/go-build",
"GOMODCACHE": "/Users/you/go/pkg/mod"
}
}
}
}
注意:すべてのクライアントでこれらの環境変数が必要なわけではありません。Claude Desktop では、お使いのマシンとユーザー名に合わせて上記の環境変数を更新する必要があります。
PATHにはgoとgoplsへのパスを含める必要があります。echo $(which go):$(which gopls)で確認できます。GOPATH、GOCACHE、GOMODCACHEはお使いのマシンでは異なる場合があります。これらはデフォルト値です。
Rust(rust-analyzer)
rust-analyzer をインストール:rustup component add rust-analyzer
MCP クライアントを設定:クライアントごとに異なりますが、設定方法は似ています。Claude Desktop の場合は、以下を ~/Library/Application\ Support/Claude/claude_desktop_config.json に追加します。
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
]
}
}
}
Python(pyright)
pyright をインストール:npm install -g pyright
MCP クライアントを設定:クライアントごとに異なりますが、設定方法は似ています。Claude Desktop の場合は、以下を ~/Library/Application\ Support/Claude/claude_desktop_config.json に追加します。
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"pyright-langserver",
"--",
"--stdio"
]
}
}
}
TypeScript(typescript-language-server)
typescript-language-serverをインストール:npm install -g typescript typescript-language-server
MCP クライアントを設定:クライアントごとに異なりますが、手順はほぼ同じです。Claude Desktopの場合は、以下を~/Library/Application\ Support/Claude/claude_desktop_config.jsonに追加します。
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"typescript-language-server",
"--",
"--stdio"
]
}
}
}
C/C++(clangd)
clangdをインストール:LLVM公式リリースページからビルド済みバイナリをダウンロードするか、システムのパッケージマネージャー(例:apt install clangd、brew install clangd)を使ってインストールします。
MCP クライアントを設定:クライアントごとに異なりますが、手順はほぼ同じです。Claude Desktopの場合は、以下を~/Library/Application\\ Support/Claude/claude_desktop_config.jsonに追加します。
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"/path/to/your/clangd_binary",
"--",
"--compile-commands-dir=/path/to/yourproject/build_or_compile_commands_dir"
]
}
}
}
<p><strong>注意</strong>:</p>
<ul>
<li><code>/path/to/your/clangd_binary</code>を、clangd実行ファイルの実際のパスに置き換えてください。</li>
<li><code>--compile-commands-dir</code>には、<code>compile_commands.json</code>ファイルが含まれるディレクトリを指定してください(例:<code>./build</code>、<code>./cmake-build-debug</code>)。</li>
<li>clangdが効果的に動作するよう、プロジェクト用の<code>compile_commands.json</code>が生成されていることを確認してください。</li>
</ul>
その他
このリポジトリでテストしたのは上記のサーバーのみですが、ほかの多くのサーバーとも互換性があるはずです。注意:
- 言語サーバーはstdio経由で通信する必要があります。
--以降の引数は、言語サーバーに引数として渡されます。- 環境変数はすべて言語サーバーに引き継がれます。
ツール
definition:コードベース内の任意のシンボル(関数、型、定数など)のソースコード定義全体を取得します。references:コードベース全体から、シンボルのすべての使用箇所と参照を検索します。diagnostics:警告やエラーなど、特定のファイルの診断情報を提供します。hover:指定した位置のドキュメント、型ヒント、その他のホバー情報を表示します。rename_symbol:プロジェクト全体でシンボルの名前を変更します。edit_file:行番号に基づいて、ファイルに複数のテキスト編集を加えられます。検索と置換に基づく編集ツールと比べて、より確実でコンテキストを節約できるファイル編集方法を提供します。
概要
このコードベースでは、LSP 通信を処理するために gopls のコードを編集して使用しています。詳細は ATTRIBUTION をご覧ください。ここにあるものはすべて、寛容な BSD スタイルのライセンスの対象です。
MCP 通信には mcp-go を使用しています。ご尽力に感謝します。
これはベータ版ソフトウェアです。問題が発生した場合や、どのような提案でもありましたら、Issue を作成してお知らせください。
コントリビューション
PR は小規模に保ち、重要な変更については、まず Issue を作成してください。AI による粗雑なコードでも、テストされ、チェックに合格し、ひどく不自然でなければ問題ありません。
セットアップ
リポジトリをクローンします:
git clone https://github.com/isaacphi/mcp-language-server.git
cd mcp-language-server
便宜のため、justfile が含まれています:
just -l
Available recipes:
build # Build
check # Run code audit checks
fmt # Format code
generate # Generate LSP types and methods
help # Help
install # Install locally
snapshot # Update snapshot tests
test # Run tests
Claude Desktop(または同様のアプリ)がローカルバイナリを使用するように設定します:
{
"mcpServers": {
"language-server": {
"command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server",
"args": [
"--workspace",
"/path/to/workspace",
"--lsp",
"language-server-executable"
],
"env": {
"LOG_LEVEL": "DEBUG"
}
}
}
}
変更を加えた後は、再ビルドしてください。
ロギング
LOG_LEVEL 環境変数を DEBUG に設定すると、言語サーバーとの送受信メッセージや言語サーバーのログを含め、すべてのコンポーネントで詳細なログが stderr に出力されます。
LSP とのやり取り
internal/lsp/methods.goには、接続された言語サーバーを呼び出すための生成コードが含まれています。internal/protocol/tsprotocol.goには、LSP 型の生成コードが含まれています。これはgoplsのソースコードから借用しました。ご尽力に感謝します。- LSP では、言語サーバーが同じメソッドに対して異なる型を返すことが許されています。Go はこれを好まないため、
internal/protocol/interfaces.goにいくつか不格好な回避策があります。
ローカル開発とスナップショットテスト
ツールの変更を簡単に試せるスナップショットテストスイートがあります。モックワークスペース上で実際の言語サーバーを実行し、出力とログを記録します。
テストの実行には、言語サーバーがローカルにインストールされている必要があります。go、rust、python、typescript のテストがあります。
integrationtests/
├── tests/ # Tests are in this folder
├── snapshots/ # Snapshots of tool outputs
├── test-output/ # Gitignored folder showing the final state of each workspace and logs after each test run
└── workspaces/ # Mock workspaces that the tools run on
スナップショットを更新するには、UPDATE_SNAPSHOTS=true go test ./integrationtests/... を実行します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。