🚀 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}:运行指定语言的集成测试。