/ 目錄 / 演練場 / mcp-language-server
● 社群 isaacphi ⚡ 即開即用

mcp-language-server

作者 isaacphi · isaacphi/mcp-language-server

讓你的 agent 具備真實的 LSP 語意 — go-to-definition、references、rename、diagnostics — 透過任何 stdio 語言伺服器。

isaacphi/mcp-language-server 是一個 Go 執行檔,它將 MCP 連接到任何 stdio LSP(gopls、rust-analyzer、pyright、typescript-language-server、clangd)。Agent 可以進行符號精確的操作,而不是文字搜尋近似。

為什麼要用

核心特性

即時演示

實際使用效果

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

如何安全地在倉庫中重新命名符號

👤 使用 agent 的多語言開發者 ⏱ ~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. 啟動指向你的工作區和 LSP 的 MCP
    新增 MCP 設定:command=mcp-language-server, args=['--workspace','.','--lsp','gopls']。✓ 已複製
    → 工具出現
  2. 先找到引用
    尋找檔案 auth.go 中符號 'LegacyAuth' 的引用。✓ 已複製
    → 精確的跨倉庫引用
  3. 重新命名
    在定義處將 rename_symbol 'LegacyAuth' -> 'Auth'。✓ 已複製
    → 所有呼叫站點都正確更新

結果: 倉庫中語意正確的重新命名。

注意事項
  • 當工具失敗時,agent 會回退到文字尋找取代 — 在重新命名後驗證診斷 — 編譯錯誤表示 LSP 拒絕了,agent 作弊了
搭配使用: github

如何讓 agent 像你在 IDE 中一樣導航

👤 厭倦重複 grep 的 agent 使用者 ⏱ ~10 min beginner

何時使用: Agent 不斷讀取整個檔案來查找一個函式。

步驟
  1. 查詢定義
    查詢 src/billing.ts 中 'computeTax' 的定義。✓ 已複製
    → 確切的檔案:行位置
  2. 取得診斷
    取得目前檔案的診斷。✓ 已複製
    → LSP 的紅色波浪線

結果: Agent 像 IDE 使用者一樣導航。

注意事項
  • LSP 未初始化 — 首次呼叫緩慢 — 使用工作區中的檔案清單進行預熱;pyright 特別是索引速度很慢
搭配使用: contextplus

如何為多語言 monorepo 執行多個 LSP

👤 在 Go+TS+Python monorepo 上工作的開發者 ⏱ ~25 min advanced

何時使用: 你想要每種語言都有語意操作。

步驟
  1. 為每個 LSP 註冊一個 MCP
    新增 3 個 MCP 項目:lsp-go (gopls)、lsp-ts (tsserver)、lsp-py (pyright),每個都限於其工作區子資料夾。✓ 已複製
    → 3 組特定語言的工具
  2. 輪流使用它們
    TypeScript 問題使用 lsp-ts:definition;Go 問題使用 lsp-go:definition。✓ 已複製
    → 每種語言的正確語意

結果: 跨所有語言的語意感知導航。

注意事項
  • Agent 忘記哪個 MCP 處理哪種語言 — 以描述性方式重新命名工具前綴,並在你的專案記憶體中提及

組合

與其他 MCP 搭配,撬動十倍槓桿

language-server + contextplus

將 LSP 導航與語意/嵌入搜尋結合以進行更廣泛的查詢

使用 language-server 的 references 來找到 computeTax 的確切用法,然後使用 contextplus 語意搜尋來查找概念相關的函式。✓ 已複製
language-server + github

重新命名 + 提交 + PR

透過 LSP 將 LegacyAuth 重新命名為 Auth,提交到新分支,開啟 PR。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
definition file: str, symbol_or_position 跳至聲明 free (local LSP)
references file: str, symbol_or_position 查找用法 free
diagnostics file: str 檢查錯誤/警告 free
hover file, position 符號的型別資訊/文件 free
rename_symbol file, position, new_name 安全重新命名 free
edit_file file, edits LSP 驗證的編輯 free

成本與限制

運行它的成本

API 配額
無 — 本地 LSP
每次呼叫 Token 數
小 — LSP 回應很緊湊
費用
免費
提示
在嵌入搜尋之前使用 LSP 支援的工具 — 通常更便宜且更精確。

安全

權限、密鑰、影響範圍

最小權限: 工作區的檔案系統讀/寫
憑證儲存:
資料出站: 僅限本地主機;LSP 在進程內執行
切勿授予: 不要指向包含祕密的工作區 — LSP 有時會索引它們

故障排查

常見錯誤與修復

工具回傳 'LSP not ready'

首次呼叫觸發初始化 — 在 2-5 秒後重試,或用 hover 呼叫進行預熱。

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