🚀 Symbols MCP
Symbols MCP 通過連接到語言服務器,實現對代碼庫符號的讀取、檢查和導航,為代碼開發提供了高效的符號探索和導航解決方案,幫助開發者更便捷地處理代碼庫及其依賴。

🚀 快速開始
通過連接到指定的語言服務器,Symbols MCP 服務器能讓編碼工具輕鬆高效地探索和導航代碼庫及其依賴項。該服務器提供了一套簡潔的工具集,易於使用且對模型上下文的佔用較少。
✨ 主要特性
可用工具
outline:返回文件中代碼符號的大綱,支持緊湊格式或附帶小代碼片段。
inspect:返回符號的文檔、簽名、聲明和實現位置,支持本地和第三方符號(如 npm、NuGet 等)。
search:在代碼庫中返回匹配的符號。
references:查找代碼庫中符號的所有引用。
rename:重命名代碼庫中符號的所有引用。
diagnostics:返回給定文件中的活動診斷信息。
completion:返回給定位置的上下文補全列表。
logs:返回語言服務器的日誌,用於故障排除。
📦 安裝指南
快速啟動(run 命令)
使用 run 命令啟動 MCP 服務器,並在命令行中定義所需的語言服務器命令。
npx -y "@p1va/symbols" run [run options] <lsp-cmd> [lsp args]
以下是經過測試的語言服務器的配置,其他標準輸入輸出(stdio)語言服務器理論上也可以使用。為簡化示例,採用 Claude Code 模式。
Pyright
安裝
npm install -g pyright
驗證安裝
pyright-langserver
若上述命令可用,則安裝成功。
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"pyright-langserver", "--stdio"
]
}
}
}
ℹ️ 若不想全局安裝 pyright,且能接受較慢的啟動速度,可將上述 JSON 中的 pyright-langserver --stdio 替換為 npx -y -p pyright pyright-langserver --stdio。
故障排除
未找到虛擬環境
如果 logs 工具輸出包含錯誤,或者 diagnostics 工具僅報告模塊導入錯誤(即使在 IDE 中沒有出現此類錯誤),這可能表明 Pyright 未檢測到虛擬環境。
可以更新 pyproject.toml 文件,正確指向虛擬環境的位置。
[tool.pyright]
venvPath = "."
venv = ".venv"
TypeScript
安裝
npm install -g typescript-language-server
驗證安裝
typescript-language-server --version
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"typescript-language-server", "--stdio"
],
"env": {
"SYMBOLS_PRELOAD_FILES": "src/index.ts",
"SYMBOLS_DIAGNOSTICS_STRATEGY": "push"
}
}
}
}
ℹ️ 若不想全局安裝 typescript-language-server,且能接受較慢的啟動速度,可將上述 JSON 中的 typescript-language-server --stdio 替換為 npx -y typescript-language-server --stdio。
故障排除
搜索無結果
要使搜索功能正常工作,TypeScript 語言服務器需要計算代碼庫索引並將其保存在內存中。這可以通過始終保持至少一個代碼文件打開來實現。使用 SYMBOLS_PRELOAD_FILES="src/index.ts" 變量指定幾個文件的路徑。
Roslyn
安裝
官方的 C# 語言服務器作為自包含可執行文件,通過 VS IDE NuGet 源 分發。
為方便下載和提取,我們使用 dotnet CLI 和一個臨時項目文件 ServerDownload.csproj,文件內容如下:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageNameBase>Microsoft.CodeAnalysis.LanguageServer</PackageNameBase>
<PackageVersion>5.0.0-1.25353.13</PackageVersion>
<RestorePackagesPath Condition=" '$(RestorePackagesPath)' == '' ">/tmp/lsp-download</RestorePackagesPath>
<ServerPath Condition=" '$(DownloadPath)' == '' ">./LspServer/</ServerPath>
<TargetFramework>net9.0</TargetFramework>
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
<AutomaticallyUseReferenceAssemblyPackages>false</AutomaticallyUseReferenceAssemblyPackages>
<RestoreSources>
https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json
</RestoreSources>
</PropertyGroup>
<ItemGroup>
<PackageDownload Include="$(PackageNameBase).$(Platform)" version="[$(PackageVersion)]" />
</ItemGroup>
<Target Name="SimplifyPath" AfterTargets="Restore">
<PropertyGroup>
<PackageIdFolderName>$(PackageNameBase.ToLower()).$(Platform.ToLower())</PackageIdFolderName>
<PackageContentPath>$(RestorePackagesPath)/$(PackageIdFolderName)/$(PackageVersion)/content/LanguageServer/$(Platform)/</PackageContentPath>
</PropertyGroup>
<ItemGroup>
<ServerFiles Include="$(PackageContentPath)**/*" />
</ItemGroup>
<Copy SourceFiles="@(ServerFiles)" DestinationFolder="$(ServerPath)%(RecursiveDir)" />
<RemoveDir Directories="$(RestorePackagesPath)" />
</Target>
</Project>
然後從以下列表中選擇與機器匹配的平臺標識符:
win-x64、win-arm64、linux-x64、linux-arm64、linux-musl-x64、linux-musl-arm64、osx-x64、osx-arm64 或 neutral
最後恢復臨時項目,觸發語言服務器的下載。
根據實際情況調整 RestorePackagesPath 和 ServerPath,並記錄 ServerPath 的值。
dotnet restore ServerDownload.csproj \
/p:Platform=your-platform-id \
/p:RestorePackagesPath=/tmp/your/download/location \
/p:ServerPath=$HOME/.csharp-lsp
驗證安裝
運行以下命令驗證安裝結果:
$HOME/.csharp-lsp/Microsoft.CodeAnalysis.LanguageServer --version
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"dotnet", "$HOME/.csharp-lsp/Microsoft.CodeAnalysis.LanguageServer.dll",
"--logLevel=Information",
"--extensionLogDirectory=$HOME/.csharp-lsp/logs",
"--stdio"
],
"env": {
"SYMBOLS_WORKSPACE_LOADER": "roslyn"
}
}
}
}
ℹ️ Roslyn 語言服務器也隨 VS Code 的 C# Dev Kit 擴展提供,但啟動命令較為複雜,且每次擴展更新時都會改變。如果想嘗試,可以使用另一種方式(config init * start),它會提供啟動命令的模板。
故障排除
搜索無結果
如果在首次讀取文件之前,search 工具未找到結果,可以通過預加載不同項目的幾個文件來預熱:
"SYMBOLS_PRELOAD_FILES": "src/Project/Program.cs"
Linux:達到 Inotify 實例最大數量
如果在 Linux 系統上,LSP 日誌提示已達到每個用戶的 inotify 實例最大數量,可以使用以下命令增加該數量:
sudo sysctl fs.inotify.max_user_instances=512
這允許語言服務器繼續監控解決方案/項目中的文件。
此外,JetBrains 提供了關於 此問題 的更多詳細信息。
Clang
驗證安裝
clangd --help
若上述命令可用,則安裝成功。
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"clangd",
],
"env": {
"SYMBOLS_DIAGNOSTICS_STRATEGY": "push",
"SYMBOLS_PRELOAD_FILES": "path/to/file.cpp"
}
}
}
}
故障排除
通用錯誤
確保在工作目錄中找到 compile_commands.json 文件,或者使用 --compile-commands-dir=path/to/dir 參數指定其目錄路徑。
搜索無結果
首次打開文件時會生成索引。可以通過在 SYMBOLS_PRELOAD_FILES 中提供一個或多個文件的列表來預加載並保持這些文件打開,以進行預熱。
Gopls
安裝
go install golang.org/x/tools/gopls@latest
驗證安裝
gopls version
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"gopls"
],
"env": {
"SYMBOLS_DIAGNOSTICS_STRATEGY": "push",
"GOPATH" : "$HOME/go",
"GOCACHE": "$HOME/.cache/go-build",
"GOMODCACHE": "$HOME/go/pkg/mod"
}
}
}
}
Rust-analyzer
安裝
rustup component add rust-analyzer
驗證安裝
rust-analyzer --version
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"rust-analyzer"
]
}
}
}
Eclipse JDT
安裝
請按照 項目的 GitHub README 中的安裝說明進行操作。
驗證安裝
根據實際安裝路徑調整並測試以下命令:
$HOME/.java-lsp/jdtls/bin/jdtls --help
配置
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "run",
"-w", "optional/path/to/workspace",
"$HOME/.java-lsp/jdtls/bin/jdtls",
"-configuration", "$HOME/.cache/jdtls/config",
"-data", "$HOME/.cache/jdtls/workspace/$SYMBOLS_WORKSPACE_NAME"
],
"env": {
"SYMBOLS_DIAGNOSTICS_STRATEGY": "push"
}
}
}
}
自動檢測(config 和 start 命令)
如果希望保持 MCP 配置的簡潔性和可移植性,可以將語言服務器定義移到一個單獨的文件中,讓 MCP 服務器從該文件讀取配置,並根據代碼庫自動檢測要啟動的語言服務器。
🆕
1. config init
初始化配置
用戶範圍
運行以下命令創建用戶範圍的配置文件:
npx -y "@p1va/symbols@latest" config init --global
該命令將在以下位置創建配置文件:
- Linux:
~/.config/symbols-nodejs/language-servers.yaml
- MacOS:
~/Library/Preferences/symbols-nodejs/language-servers.yaml
- Windows:
%APPDATA%\symbols-nodejs\Config\language-servers.yaml
工作區(默認當前目錄)
運行以下命令創建工作區配置文件:
npx -y "@p1va/symbols@latest" config init -w path/to/workspace
該命令將初始化 path/to/workspace/language-servers.yaml 文件。
npx -y "@p1va/symbols@latest" config init
該命令將初始化 ./language-servers.yaml 文件。
⚙️
2. config show
調整配置
使用編輯器(這裡使用 code)調整生成的配置文件,註釋、取消註釋或添加新的語言服務器。
code $(npx -y @p1va/symbols config path)
顯示活動配置
最後,在工作區(例如啟動 Claude Code 的目錄)中運行以下命令,查看更改是否生效:
npx -y @p1va/symbols config show
npx -y @p1va/symbols config show -w path/to/workspace
npx -y @p1va/symbols config show -c path/to/config.yaml
⚡️
3. start
在 MCP 配置中更新此 MCP 服務器。第一個 `workspace_files` 與工作區根目錄中任何文件匹配的語言服務器將被啟動。
```jsonc
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "start",
// 默認當前目錄
"-w", "optional/path/to/workspace",
// 默認當前工作區的 language-servers.yaml
"-c", "optional/path/to/config.yaml"
]
}
}
}
```
📚 詳細文檔
開發命令
pnpm lint:輸出代碼檢查違規信息。
pnpm lint:fix:嘗試修復代碼檢查違規問題。
pnpm format:格式化代碼庫。
pnpm dev:以開發模式啟動。
pnpm build:運行代碼檢查並構建項目。
pnpm start:啟動構建後的項目。
pnpm test:unit:運行單元測試。
pnpm test:integration:{language id}:運行指定語言的集成測試。