🚀 Symbols MCP
このMCPサーバーは、任意の言語サーバーに接続することで、コードベースのシンボルを読み取り、検査し、ナビゲートすることを可能にします。

🚀 クイックスタート
この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
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
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に置き換えることができます。
トラブルシューティング
検索:結果が見つからない
検索機能を機能させるには、TS言語サーバーがコードベースのインデックスを計算し、メモリに保持する必要があります。これは、常に少なくとも1つのコードファイルを開いておくことで行われます。SYMBOLS_PRELOAD_FILES="src/index.ts"変数を使用して、いくつかのファイルへのパスを指定します。
Roslyn
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の両方を調整して、マシンで動作するようにし、後者を追跡してください。
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
C/C++用の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にリストを指定して、1つまたは複数のファイルを事前に読み込んで開いておくことができます。
Gopls
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
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
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がワークスペースのルートで見られるファイルのいずれかと一致する最初の言語サーバーが起動されます。
{
"mcpServers": {
"symbols": {
"command": "npx",
"args": [
"-y", "@p1va/symbols@latest", "start",
"-w", "optional/path/to/workspace",
"-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}:指定された言語の統合テストを実行します。