mcpField
M
MCP Language Server

MCP Language Server

ローカル
github.com/isaacphi開発ツール1.6k73 週間前に更新

MCP Language Server について

mcp-language-server は、言語サーバーを起動し、その意味解析機能を LLM に提供する MCP サーバーです。gopls、rust-analyzer、pyright、typescript-language-server、clangd に対応し、クライアントがコードベースを移動しやすくします。ベータ版として公開されています。

主な機能

  1. 01シンボルの完全なソース定義の取得
  2. 02シンボルのすべての参照箇所の検索
  3. 03ファイルの診断情報の表示
  4. 04ホバーによるドキュメントと型情報の表示
  5. 05プロジェクト全体にわたるシンボルのリネーム
  6. 06行番号を指定した複数箇所の編集

活用シーン

  1. 01LLM がコードベース内の関数や型の定義へ移動すること
  2. 02シンボルをリネームする前にすべての参照を確認すること
  3. 03コンパイラのエラーや警告を読み取り修正を支援すること

MCP 対応

本プロジェクトは MCP サーバーであり、言語サーバーをラップして definition、references、rename_symbol などのツールを MCP クライアントに公開します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

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

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

詳細

MCP Language Server

Go Tests Go Report Card GoDoc Go Version

これは、LLM に 言語サーバーを実行して公開する MCP サーバーです。MCP 用の言語サーバーではありません。そういうものがあるとすれば、ですが。

デモ

mcp-language-server は、定義の取得、参照、名前変更、診断などのセマンティックツールを利用できるようにすることで、MCP 対応クライアントがコードベースをより簡単にナビゲートできるようにします。

デモ

セットアップ

  1. Go をインストール:https://golang.org/doc/install の手順に従います
  2. このサーバーをインストールまたは更新:go install github.com/isaacphi/mcp-language-server@latest
  3. 言語サーバーをインストール: 以下のガイドのいずれかに従います
  4. 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/... を実行します。

コメント

MCP は初めてですか?

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

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