/ ディレクトリ / プレイグラウンド / mcp-language-server
● コミュニティ isaacphi ⚡ 即起動

mcp-language-server

作者 isaacphi · isaacphi/mcp-language-server

エージェントに本物のLSPセマンティクスを提供します — 定義への移動、参照、名前変更、診断 — あらゆるstdio言語サーバー経由で。

isaacphi/mcp-language-serverはGoバイナリで、MCPを任意のstdio LSP (gopls、rust-analyzer、pyright、typescript-language-server、clangd) にブリッジします。エージェントはテキスト検索の近似ではなく、シンボル正確な操作を得られます。

なぜ使うのか

主な機能

ライブデモ

実際の動作

language-server.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "language-server",
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "language-server": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/isaacphi/mcp-language-server"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add language-server -- TODO 'See README: https://github.com/isaacphi/mcp-language-server'

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: mcp-language-server

リポジトリ全体でシンボルを安全に名前変更する方法

👤 エージェントを使用するポリグロット開発者 ⏱ ~15 min intermediate

使うタイミング: スコープを理解した名前変更が欲しい場合(検索と置換ではなく)。

前提条件
  • Goがインストールされている — brew install go
  • 自分の言語用LSP — gopls: go install golang.org/x/tools/gopls@latest; pyright: pip install pyright; など
  • MCPをインストール — go install github.com/isaacphi/mcp-language-server@latest
フロー
  1. MCPをワークスペース+LSPに向けて起動
    MCP設定を追加: command=mcp-language-server, args=['--workspace','.','--lsp','gopls']。✓ コピーしました
    → ツールが表示される
  2. まず参照を検索
    ファイルauth.goのシンボル'LegacyAuth'の参照。✓ コピーしました
    → リポジトリ全体の正確な参照
  3. 名前変更
    定義サイトでrename_symbol 'LegacyAuth' -> 'Auth'。✓ コピーしました
    → すべてのコールサイトが正しく更新される

結果: リポジトリ全体でセマンティック的に正確な名前変更。

注意点
  • ツールが失敗するとエージェントがテキスト検索と置換にフォールバック — 名前変更後に診断を確認 — コンパイルエラーはLSPが拒否したことを意味し、エージェントが不正行為をした
組み合わせ: github

IDEのようにエージェントをナビゲートさせる方法

👤 再度grepするのに疲れたエージェントユーザー ⏱ ~10 min beginner

使うタイミング: エージェントが1つの関数を見つけるためにファイル全体を読んでいる場合。

フロー
  1. 定義をクエリ
    src/billing.tsの'computeTax'の定義。✓ コピーしました
    → 正確なファイル:行位置
  2. 診断を取得
    現在のファイルの診断。✓ コピーしました
    → LSPからの赤い波線

結果: エージェントがIDEユーザーのようにナビゲート。

注意点
  • LSPが初期化されていない — 最初の呼び出しが遅い — ワークスペース内のファイルリストでウォームアップ; pyrightは特にインデックス作成が遅い
組み合わせ: contextplus

ポリグロットモノリポ用に複数LSPを実行する方法

👤 Go+TS+Pythonモノリポで働く開発者 ⏱ ~25 min advanced

使うタイミング: すべての言語でセマンティック操作が欲しい場合。

フロー
  1. LSPごとに1つのMCPを登録
    3つのMCPエントリを追加: lsp-go (gopls)、lsp-ts (tsserver)、lsp-py (pyright)、各々がワークスペースサブフォルダにスコープされています。✓ コピーしました
    → 言語固有ツールの3セット
  2. 順番に使用
    TypeScript質問にはlsp-ts:definitionを使用; Goにはlsp-go:definitionを使用。✓ コピーしました
    → 言語ごとの正確なセマンティクス

結果: すべての言語にわたるセマンティック対応ナビゲーション。

注意点
  • エージェントがどのMCPがどの言語を処理するかを忘れる — ツールプレフィックスを説明的に名前変更し、プロジェクトメモリで言及

組み合わせ

他のMCPと組み合わせて10倍の力を

language-server + contextplus

LSPナビゲーションをセマンティック/エンベッディング検索と組み合わせて、より広いクエリに対応

language-serverの参照を使用してcomputeTaxの正確な使用法を見つけ、その後contextplus semantic searchで概念的に関連のある関数を見つけます。✓ コピーしました
language-server + github

名前変更+コミット+PR

LSP経由でLegacyAuthをAuthに名前変更し、新しいブランチにコミットし、PRを開きます。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
definition file: str, symbol_or_position 宣言にジャンプ 無料 (ローカルLSP)
references file: str, symbol_or_position 使用箇所を検索 無料
diagnostics file: str エラー/警告を確認 無料
hover file, position シンボルの型情報/ドキュメント 無料
rename_symbol file, position, new_name 安全な名前変更 無料
edit_file file, edits LSP検証済みの編集 無料

コストと制限

運用コスト

APIクォータ
なし — ローカルLSP
呼び出しあたりのトークン
小 — LSP応答はコンパクト
金額
無料
ヒント
エンベッディング検索の前にLSP-backedツールを使用します — 多くの場合、より安価でより正確です。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: ワークスペースへのファイルシステム読み書き
認証情報の保管: なし
データ送信先: ローカルホストのみ; LSPはインプロセスで実行
絶対に付与しない: シークレット付きワークスペースを指さないでください — LSPは時々それらをインデックスします

トラブルシューティング

よくあるエラーと対処法

ツールが'LSP not ready'を返す

最初の呼び出しが初期化をトリガー — 2-5秒後に再試行、またはホバー呼び出しでウォームアップ。

gopls: 'no packages found'

ワークスペースをモジュールルート (go.modがある場所) に指定し、サブフォルダではなく。

確認: go env GOMOD
pyrightが大きなリポジトリで遅い

pyrightconfig.jsonを設定してベンダーディレクトリを除外。

rename_symbolが成功を報告しますがコンパイルはまだ失敗

名前変更が文字列リテラルまたはLSPが見えない反射ベースのコードにタッチ。古い名前をgrepで確認。

代替案

mcp-language-server 他との比較

代替案代わりに使う場面トレードオフ
Context+LSPセマンティクスではなくエンベッディング+メモリグラフが欲しい場合名前変更/参照ほど正確ではない
Serena MCPより高レベルなリファクタリング付きLSPが欲しい場合異なるセットアップ; Pythonベース

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る