Narsil MCP
公式Rustで実装された超高速🔥最高クラスのMCPサーバー。ニューラルエンジン、セキュリティプロファイリング、オプションのグラフフロントエンドを搭載
Narsil MCPで何ができますか?
-
コードベースの探索 — アシスタントに馴染みのないプロジェクトのマッピング、シンボルの検索、32言語にわたる参照の追跡を依頼します。
find_symbolsとfind_referencesを使用します。 -
セキュリティ脆弱性の分析 — 汚染解析、OWASP Top 10スキャン、CWEチェックを依頼して、インジェクションポイントを特定し、
scan_securityとsuggest_fixによる修正アドバイスを得ます。 -
関数関係の追跡 — コールグラフの可視化、呼び出し元・呼び出し先の検索、関数間のパスの特定を行い、
get_call_graphとfind_call_pathで実行フローを理解します。 -
サプライチェーンリスクの監査 — SBOMの生成、OSVに対する依存関係のチェック、
generate_sbom、check_dependencies、check_licensesを使用したライセンス準拠の検証を行います。 -
コード品質の問題の検出 — Python、JavaScript、TypeScript全体で、デッドコード、未初期化変数、型不一致を
find_dead_codeとcheck_type_errorsで特定します。
ドキュメント
narsil-mcp
高速かつプライバシー最優先の、ディープなコードインテリジェンスのためのMCPサーバー
Rustで構築されたMCP(Model Context Protocol)サーバーで、90の専門ツールを通じてAIアシスタントに深いコード理解を提供します。
narsil-mcpを選ぶ理由
| 機能 | narsil-mcp | XRAY | Serena | GitHub MCP |
|---|---|---|---|---|
| 言語 | 32 | 4 | 30+ (LSP) | N/A |
| ニューラル検索 | あり | なし | なし | なし |
| 汚染解析 | あり | なし | なし | なし |
| SBOM/ライセンス | あり | なし | なし | 一部 |
| オフライン/ローカル | あり | あり | あり | なし |
| WASM/ブラウザ | あり | なし | なし | なし |
| コールグラフ | あり | 一部 | なし | なし |
| 型推論 | あり | なし | なし | なし |
主な機能
- コードインテリジェンス - シンボル抽出、セマンティック検索、コールグラフ解析
- ニューラルセマンティック検索 - 埋め込みを使用した類似コードの検索(Voyage AI、OpenAI)
- セキュリティ解析 - 汚染解析、脆弱性スキャン、OWASP/CWEカバレッジ
- サプライチェーンセキュリティ - SBOM生成、依存関係監査、ライセンス準拠
- 高度な解析 - 制御フローグラフ、データフロー解析、デッドコード検出
narsil-mcpを選ぶ理由
- Rustで記述 - 驚異的に高速、メモリ安全、単一バイナリ(約30MB)
- Tree-sitter搭載 - 32言語に対応した正確なインクリメンタル解析
- 設定不要 - リポジトリを指定するだけですぐに使用可能
- MCP準拠 - Claude、Cursor、VS Code Copilot、Zed、および任意のMCPクライアントで動作
- プライバシー最優先 - 完全にローカルで動作し、データがマシンの外に出ることはありません
- 並列インデックス - Rayonを介して全コアを使用
- スマートな抜粋 - 完全な構文スコープに展開
- セキュリティ最優先 - 組み込みの脆弱性検出と汚染解析
- ニューラル埋め込み - Voyage AIまたはOpenAIによるオプションのセマンティック検索
- WASMサポート - WebAssemblyビルドでブラウザ内で実行可能
- リアルタイムストリーミング - 大規模リポジトリでもインデックス進行に応じて結果を表示
対応言語
| 言語 | 拡張子 | 抽出されるシンボル |
|---|---|---|
| Rust | .rs | 関数、構造体、列挙型、トレイト、impl、モジュール |
| Python | .py、.pyi | 関数、クラス |
| JavaScript | .js、.jsx、.mjs | 関数、クラス、メソッド、変数 |
| TypeScript | .ts、.tsx | 関数、クラス、インターフェース、型、列挙型 |
| Go | .go | 関数、メソッド、型 |
| C | .c、.h | 関数、構造体、列挙型、typedef |
| C++ | .cpp、.cc、.hpp | 関数、クラス、構造体、名前空間 |
| Java | .java | メソッド、クラス、インターフェース、列挙型 |
| C# | .cs | メソッド、クラス、インターフェース、構造体、列挙型、デリゲート、名前空間 |
| Bash | .sh、.bash、.zsh | 関数、変数 |
| Ruby | .rb、.rake、.gemspec | メソッド、クラス、モジュール |
| Kotlin | .kt、.kts | 関数、クラス、オブジェクト、インターフェース |
| PHP | .php、.phtml | 関数、メソッド、クラス、インターフェース、トレイト |
| Swift | .swift | クラス、構造体、列挙型、プロトコル、関数 |
| Verilog/SystemVerilog | .v、.vh、.sv、.svh | モジュール、タスク、関数、インターフェース、クラス |
| Scala | .scala、.sc | クラス、オブジェクト、トレイト、関数、val |
| Lua | .lua | 関数、メソッド |
| Haskell | .hs、.lhs | 関数、データ型、型クラス |
| Elixir | .ex、.exs | モジュール、関数 |
| Clojure | .clj、.cljs、.cljc、.edn | リスト(基本AST) |
| Dart | .dart | 関数、クラス、メソッド |
| Julia | .jl | 関数、モジュール、構造体 |
| R | .R、.r、.Rmd | 関数 |
| Perl | .pl、.pm、.t | 関数、パッケージ |
| Zig | .zig | 関数、変数 |
| Erlang | .erl、.hrl | 関数、モジュール、レコード |
| Elm | .elm | 関数、型 |
| Fortran | .f90、.f95、.f03、.f08、.f、.for、.fpp | プログラム、サブルーチン、関数、モジュール |
| PowerShell | .ps1、.psm1、.psd1 | 関数、クラス、列挙型 |
| Nix | .nix | バインディング |
| Groovy | .groovy、.gradle | メソッド、クラス、インターフェース、列挙型、関数 |
インストール
パッケージマネージャー経由(推奨)
macOS / Linux(Homebrew):
brew tap postrv/narsil
brew install narsil-mcp
Windows(Scoop):
scoop bucket add narsil https://github.com/postrv/scoop-narsil
scoop install narsil-mcp
Rust/Cargo(全プラットフォーム):
cargo install narsil-mcp
Node.js/npm(全プラットフォーム):
npm install -g narsil-mcp
# or
yarn global add narsil-mcp
# or
pnpm add -g narsil-mcp
Nix:
# Run directly without installing
nix run github:postrv/narsil-mcp -- --repos ./my-project
# Install to profile
nix profile install github:postrv/narsil-mcp
# With web visualization frontend
nix profile install github:postrv/narsil-mcp#with-frontend
# Development shell
nix develop github:postrv/narsil-mcp
ワンクリックインストールスクリプト
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.sh | bash
Windows(PowerShell):
irm https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.ps1 | iex
Windows(Git Bash / MSYS2):
curl -fsSL https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.sh | bash
Windowsユーザーへの注意: PowerShellインストーラーは、より優れたエラーメッセージとネイティブなWindows統合を提供します。ソースからビルドする場合、PATHを自動的に設定し、必要なビルドツールをチェックします。
ソースから
前提条件:
- 現在の安定版Rust(このリリースはRust 1.98および1.99で検証済み)
- Windowsの場合: Visual Studio Build Tools の「C++によるデスクトップ開発」
# Clone and build
git clone git@github.com:postrv/narsil-mcp.git
cd narsil-mcp
cargo build --release
# Binary will be at:
# - macOS/Linux: target/release/narsil-mcp
# - Windows: target/release/narsil-mcp.exe
機能ビルド
narsil-mcpは、さまざまなユースケースに対応する異なる機能セットをサポートしています:
# Default build - native MCP server (~30MB)
cargo build --release
# With RDF knowledge graph and CCG tools (~35MB) - SPARQL queries, Code Context Graph
cargo build --release --features graph
# With neural vector search (~32MB) - adds TF-IDF similarity
cargo build --release --features neural
# With ONNX model support (~50MB) - adds local neural embeddings
cargo build --release --features neural-onnx
# With embedded visualization frontend (~31MB)
cargo build --release --features frontend
# Full-featured build with graph + frontend (~40MB)
cargo build --release --features graph,frontend
# Experimental browser/WASM source build (not release-qualified)
cargo build --release --target wasm32-unknown-unknown --no-default-features --features wasm
| 機能 | 説明 | サイズ |
|---|---|---|
native(デフォルト) | 全ツールを備えた完全なMCPサーバー | 約30MB |
graph | + RDFナレッジグラフ、SPARQL、CCGツール | 約35MB |
frontend | + 組み込みの可視化Web UI | 約31MB |
neural | + TF-IDFベクトル検索、API埋め込み | 約32MB |
neural-onnx | + ローカルONNXモデル推論 | 約50MB |
wasm | 実験的なブラウザソースビルド(ファイルシステム、gitなし) | リリース認定外 |
重要:
--graphCLIフラグを使用するには、バイナリが--features graphでビルドされている必要があります。この機能なしでビルドされたバイナリに--graphを渡すと、警告が表示され、SPARQL/CCGツールは利用できません。詳細は以下のトラブルシューティングを参照してください。
詳細なインストール手順、トラブルシューティング、プラットフォーム別ガイドについては、docs/INSTALL.mdを参照してください。
使用方法
基本的な使用方法
macOS / Linux:
# Index a single repository
narsil-mcp --repos /path/to/your/project
# Index multiple repositories
narsil-mcp --repos ~/projects/project1 --repos ~/projects/project2
# Enable verbose logging
narsil-mcp --repos /path/to/project --verbose
# Force re-index on startup
narsil-mcp --repos /path/to/project --reindex
Windows(PowerShell / CMD):
# Index a single repository
narsil-mcp --repos C:\Users\YourName\Projects\my-project
# Index multiple repositories
narsil-mcp --repos C:\Projects\project1 --repos C:\Projects\project2
# Enable verbose logging
narsil-mcp --repos C:\Projects\my-project --verbose
# Force re-index on startup
narsil-mcp --repos C:\Projects\my-project --reindex
全機能セット
narsil-mcp \
--repos ~/projects/my-app \
--git \ # Enable git blame, history, contributors
--call-graph \ # Enable function call analysis
--persist \ # Save index to disk for fast startup
--watch \ # Auto-reindex on file changes
--lsp \ # Enable LSP for hover, go-to-definition
--streaming \ # Stream large result sets
--remote \ # Enable GitHub remote repo support
--neural \ # Enable neural semantic embeddings
--neural-backend api \ # Backend: "api" (Voyage/OpenAI) or "onnx"
--neural-model voyage-code-2 \ # Model to use
--neural-dimension 3072 \ # Override embedding dimensions (auto-detected per model)
--graph # Enable SPARQL/RDF knowledge graph and CCG tools (requires --features graph build)
--graphに関する注意: このフラグはSPARQLクエリとCode Context Graph(CCG)ツールを有効にしますが、バイナリが--features graphでビルドされている場合に限ります。デフォルトのバイナリにはこの機能は含まれていません。SPARQL/CCG機能が必要な場合は、ソースからビルドしてください:cargo build --release --features graphこの機能なしのバイナリに
--graphを渡すと、起動時に警告が表示され、サーバーはSPARQL/CCGツールなしで動作を継続します。
注意: ニューラル埋め込みにはAPIキー(またはカスタムエンドポイント)が必要です。最も簡単な設定方法は、対話式ウィザードを使用することです:
# Run the neural API key setup wizard
narsil-mcp config init --neural
ウィザードでは以下のことを行います:
- エディターの検出(Claude Desktop、Claude Code、Zed、VS Code、JetBrains)
- APIプロバイダーの入力を求める(Voyage AI、OpenAI、またはカスタム)
- APIキーの検証
- エディターのMCP設定に自動的に追加
または、以下の環境変数のいずれかを手動で設定することもできます:
EMBEDDING_API_KEY- 任意のプロバイダー用の汎用APIキーVOYAGE_API_KEY- Voyage AI専用のAPIキーOPENAI_API_KEY- OpenAI専用のAPIキーEMBEDDING_SERVER_ENDPOINT- カスタム埋め込みAPIエンドポイントURL(オプション、セルフホストモデルの使用を可能にします)
設定
v1.1.0以降では、ツールとパフォーマンスを細かく制御するためのオプション設定が導入されています。 既存の使用方法はすべて引き続き機能します - 設定は完全にオプションです!
クイックスタート
# Generate default config interactively
narsil-mcp config init
# List available tools
narsil-mcp tools list
# Apply a preset via CLI
narsil-mcp --repos ~/project --preset minimal
自動エディター検出
narsil-mcpはエディターを検出し、最適なプリセットを自動的に適用します:
| エディター | プリセット | ツール | コンテキストトークン | 理由 |
|---|---|---|---|---|
| Zed | 最小 | 26 | 約4,686 | 高速起動、最小コンテキスト |
| VS Code | バランス | 51 | 約8,948 | 優れた機能バランス |
| Claude Desktop | フル | 90 | 約12,001 | 最大機能 |
トークン節約:
- 最小プリセット: フルと比較して61%少ないトークン
- バランスプリセット: フルと比較して25%少ないトークン
プリセット
ユースケースに基づいてプリセットを選択してください:
# Minimal - Fast, lightweight (Zed, Cursor)
narsil-mcp --repos ~/project --preset minimal
# Balanced - Good defaults (VS Code, IntelliJ)
narsil-mcp --repos ~/project --preset balanced --git --call-graph
# Full - All features (Claude Desktop, comprehensive analysis)
narsil-mcp --repos ~/project --preset full --git --call-graph
# Security-focused - Security and supply chain tools
narsil-mcp --repos ~/project --preset security-focused
設定ファイル
ユーザー設定(~/.config/narsil-mcp/config.yaml):
version: "1.0"
preset: "balanced"
tools:
# Disable slow tools
overrides:
neural_search:
enabled: false
reason: "Too slow for interactive use"
performance:
max_tool_count: 50 # Limit total tools
プロジェクト設定(リポジトリルートの.narsil.yaml):
version: "1.0"
preset: "security-focused" # Override user preset
tools:
categories:
Security:
enabled: true
SupplyChain:
enabled: true
名前付きリポジトリプロファイルは、マルチリポジトリワークスペースに便利です:
version: "1.0"
profiles:
platform:
repos:
- ~/src/api
- ~/src/web
git: true
call_graph: true
persist: true
preset: balanced
narsil-mcp --profile platform
narsil-mcp config profiles
優先順位: CLIフラグ > 環境変数 > プロジェクト設定 > ユーザー設定 > デフォルト
環境変数
# Select repos/profile
export NARSIL_REPOS=~/src/api,~/src/web
export NARSIL_PROFILE=platform
# Apply preset
export NARSIL_PRESET=minimal
# Enable specific categories
export NARSIL_ENABLED_CATEGORIES=Repository,Symbols,Search
# Disable specific tools
export NARSIL_DISABLED_TOOLS=neural_search,generate_sbom
CLIコマンド
# View effective config
narsil-mcp config show
# Validate config file
narsil-mcp config validate ~/.config/narsil-mcp/config.yaml
# List tools by category
narsil-mcp tools list --category Search
# Search for tools
narsil-mcp tools search "git"
# Export config
narsil-mcp config export > my-config.yaml
# List named repository profiles
narsil-mcp config profiles
詳細情報:
可視化フロントエンド
コールグラフ、インポート、シンボル参照、制御フローをブラウザでインタラクティブに探索できます。
# Build with embedded frontend
cargo build --release --features frontend
# Run with HTTP server
narsil-mcp --repos ~/project --http --call-graph
# Open http://localhost:3000
5つのグラフビュー:
| ビュー | 説明 |
|---|---|
| コールグラフ | 深さ制御と方向フィルタリングを備えた関数呼び出し関係 |
| インポートグラフ | コードベース全体のファイルレベルのインポート依存関係 |
| シンボルグラフ | シンボルへのすべての参照(ファイルクラスタリング付き) |
| ハイブリッド | 分割予算付きのコール+インポートグラフの組み合わせ |
| 制御フロー | 基本ブロック、分岐、ループバックエッジを備えた実際のCFG |
機能:
- ドラッグ、ズーム、ダブルクリックによるドリルダウンを備えたインタラクティブなCytoscape.jsグラフ
- 色分け(緑/黄/オレンジ/赤)による複雑度メトリクスのオーバーレイ
- 汚染ソースとシンクを強調表示するセキュリティ脆弱性オーバーレイ
- 6つのレイアウトアルゴリズム(dagre、force-directed、breadthfirst、concentric、circle、grid)
- 構文ハイライト付きコードビューアーを備えたファイルツリーサイドバー
- URL駆動の状態(共有可能なリンク、ブラウザの戻る/進む)
- ダークモードサポート
- コード抜粋とソースへのナビゲーションを備えたノード詳細パネル
完全なドキュメント: セットアップ、APIエンドポイント、開発モードについてはdocs/frontend.mdを参照してください。
ニューラルセマンティック検索
ニューラル埋め込みを使用して類似コードを検索します - 変数名や構造が異なる場合でも機能します。
# Quick setup with wizard
narsil-mcp config init --neural
# Or manually with Voyage AI
export VOYAGE_API_KEY="your-key"
narsil-mcp --repos ~/project --neural --neural-model voyage-code-2
Voyage AI、OpenAI、カスタムエンドポイント、ローカルONNXモデルをサポートしています。
完全なドキュメント: セットアップ、バックエンド、ユースケースについてはdocs/neural-search.mdを参照してください。
型推論
Python、JavaScript、TypeScript用の組み込み型推論 - mypyやtscは不要です。
| ツール | 説明 |
|---|---|
infer_types | 関数内のすべての変数の推論型を取得 |
check_type_errors | 潜在的な型不一致を検出 |
get_typed_taint_flow | 型情報による強化されたセキュリティ解析 |
def process(data):
result = data.split(",") # result: list[str]
count = len(result) # count: int
return count * 2 # returns: int
Forgemax統合(実験的)
大規模なエージェントワークフローのために、narsil-mcpはForgemaxを通じて使用できます。Forgemaxは、90のツールすべてをわずか2つ(search + execute)に集約するCode Mode MCPゲートウェイで、ツールスキーマのオーバーヘッドを約12,000トークンから約1,000トークンに削減します。
# Install Forgemax
cargo install forgemax
# Run narsil-mcp through Forgemax (uses forge.toml in repo root)
forgemax
同梱のforge.tomlは、narsil-mcpを適切なデフォルトで設定します:
[servers.narsil]
command = "narsil-mcp"
args = ["--repos", ".", "--git", "--call-graph", "--persist", "--watch"]
transport = "stdio"
[sandbox]
timeout_secs = 10
max_heap_mb = 64
max_concurrent = 8
LLMは、サンドボックス化されたV8アイソレート内の型付きプロキシオブジェクトを通じて呼び出しを行うJavaScriptを記述します。認証情報、ファイルパス、内部状態がホストから流出することはありません。このアプローチは、複数のMCPサーバーを同時に使用する場合に特に有用で、ツール全体のコンテキストを小さく予測可能に保ちます。
MCP設定
設定ファイルを作成して、AIアシスタントにnarsil-mcpを追加します。推奨される設定は以下のとおりです。
Claude Code(プロジェクトルートの.mcp.json - 推奨):
プロジェクトごとの設定として、プロジェクトディレクトリに.mcp.jsonを作成します:
{
"mcpServers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", ".", "--git", "--call-graph"]
}
}
}
次に、プロジェクト内でClaude Codeを起動します:
cd /path/to/project
claude
--reposに.を使用すると、現在のディレクトリが自動的にインデックス化されます。Claudeは90のコードインテリジェンスツールにアクセスできるようになります。
ヒント: 以降の起動を高速化するには、
--persist --index-path .claude/cacheを追加します。
グローバル設定の場合は、代わりに~/.claude/settings.jsonを編集します。高度な設定についてはClaude Code統合を参照してください。
Cursor(.cursor/mcp.json):
{
"mcpServers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", ".", "--git", "--call-graph"]
}
}
}
VS Code + GitHub Copilot(.vscode/mcp.json):
{
"servers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", ".", "--git", "--call-graph"]
}
}
}
Copilot Enterprise向け注意: MCPサポートにはVS Code 1.102以上が必要で、組織の管理者が有効化する必要があります。
Claude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", "/path/to/your/projects", "--git"]
}
}
}
Zed(settings.json → コンテキストサーバー):
{
"context_servers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", ".", "--git"]
}
}
}
Zed向け注意: narsil-mcpは即座に起動し、バックグラウンドでインデックス化を行うため、初期化タイムアウトを防ぎます。
Claude Codeプラグイン
Claude Codeユーザー向けに、スラッシュコマンドとスキルを備えたプラグインを提供し、ツールを効果的に使用できるようにします。
マーケットプレイスからインストール(推奨):
# Add the narsil-mcp marketplace
/plugin marketplace add postrv/narsil-mcp
# Install the plugin
/plugin install narsil@narsil-mcp
またはGitHubから直接インストール:
/plugin install github:postrv/narsil-mcp/narsil-plugin
含まれるもの:
| コンポーネント | 説明 |
|---|---|
/narsil:security-scan | 包括的なセキュリティ監査を実行 |
/narsil:explore | 馴染みのないコードベースを探索 |
/narsil:analyze-function | 特定の関数を詳細に調査 |
/narsil:find-feature | 機能が実装されている場所を特定 |
/narsil:supply-chain | サプライチェーンセキュリティを分析 |
| スキル | 90のツールを効果的に使用する方法をClaudeにガイド |
| MCP設定 | 適切なデフォルト設定でnarsil-mcpを自動起動 |
完全なドキュメントはnarsil-plugin/README.mdを参照してください。
Ralph自動化統合
Ralphは、自律的なコード開発のためのClaude Code自動化スイートです。narsil-mcpが利用可能な場合、Ralphは拡張されたコードインテリジェンス機能を獲得します:
| 機能 | narsil-mcpなし | narsil-mcpあり |
|---|---|---|
| セキュリティスキャン | 基本(clippy) | OWASP/CWE脆弱性検出 |
| コード理解 | ファイルベース | コールグラフ、シンボル参照 |
| アーキテクチャ分析 | 手動 | CCG L0/L1/L2自動レイヤー |
| 依存関係分析 | cargo tree | インポートグラフ、循環検出 |
セットアップ:
# Install narsil-mcp (Ralph auto-detects it)
cargo install narsil-mcp
# Ralph's quality gates use these tools:
narsil-mcp scan_security --repo <name>
narsil-mcp check_type_errors --repo <name> --path src
narsil-mcp find_injection_vulnerabilities --repo <name>
Ralphはnarsil-mcpが利用できない場合でもグレースフルに機能を縮小します。すべてのコア自動化機能はnarsil-mcpなしでも動作します。
ドキュメント: 完全な統合の詳細はRalph READMEを参照してください。
プレイブックとチュートリアル
実用的な使用ガイドは**docs/playbooks**を参照してください:
| ガイド | 説明 |
|---|---|
| はじめに | クイックセットアップと最初のツール呼び出し |
| コードベースを理解する | 馴染みのないプロジェクトを探索 |
| バグを修正する | コールグラフと汚染解析でデバッグ |
| セキュリティ監査 | OWASP/CWEスキャンで脆弱性を発見 |
| コードレビュー | 変更を効果的にレビュー |
各プレイブックは、Claudeが質問に答えるために使用する正確なツールチェーンを示しています。
WebAssembly(ブラウザ)での使用
リポジトリには実験的なWebAssemblyソースとローカルビルドスクリプトが含まれています。
@narsil-mcp/wasmはnpmに公開されておらず、1.7.1 CLIリリースの配布チャネルではありません。
WASMビルドと例は、そのリリースの認定範囲に含まれていません。実験的なソースワークフローについてはdocs/wasm.mdを参照してください。
利用可能なツール(93)
リポジトリとファイル管理
| ツール | 説明 |
|---|---|
list_repos | メタデータ付きでインデックス化されたすべてのリポジトリを一覧表示 |
get_project_structure | ファイルアイコンとサイズ付きのディレクトリツリーを取得 |
get_file | オプションの行範囲付きでファイル内容を取得 |
get_excerpt | コンテキスト付きで特定の行の周囲のコードを抽出 |
reindex | リポジトリの再インデックス化をトリガー |
discover_repos | ディレクトリ内のリポジトリを自動検出 |
validate_repo | パスが有効なリポジトリかどうかを確認 |
get_index_status | インデックス統計と有効な機能を表示 |
シンボル検索とナビゲーション
| ツール | 説明 |
|---|---|
find_symbols | 型/パターンで構造体、クラス、関数を検索 |
get_symbol_definition | 周囲のコンテキスト付きでシンボルソースを取得 |
find_references | シンボルへのすべての参照を検索 |
get_dependencies | インポートと依存先を分析 |
workspace_symbol_search | ワークスペース全体でシンボルをファジー検索 |
find_symbol_usages | インポート付きのクロスファイルシンボル使用法 |
get_export_map | ファイル/モジュールからエクスポートされたシンボルを取得 |
コード検索
| ツール | 説明 |
|---|---|
search_code | 関連性ランキング付きのキーワード検索 |
semantic_search | BM25ランク付けされたセマンティック検索 |
hybrid_search | ランクフュージョン付きのBM25 + TF-IDFの組み合わせ |
search_chunks | AST対応コードチャンクの検索 |
find_similar_code | スニペットに類似したコードを検索(TF-IDF) |
find_similar_to_symbol | シンボルに類似したコードを検索 |
AST対応チャンキング
| ツール | 説明 |
|---|---|
get_chunks | ファイルのAST対応チャンクを取得 |
get_chunk_stats | コードチャンクに関する統計 |
get_embedding_stats | 埋め込みインデックス統計 |
ニューラルセマンティック検索(--neuralが必要)
| ツール | 説明 |
|---|---|
neural_search | ニューラル埋め込みを使用したセマンティック検索(異なる名前でも類似コードを検出) |
find_semantic_clones | 関数のType-3/4セマンティッククローンを検索 |
get_neural_stats | ニューラル埋め込みインデックス統計 |
コールグラフ分析(--call-graphが必要)
| ツール | 説明 |
|---|---|
get_call_graph | リポジトリ/関数のコールグラフを取得 |
get_callers | 関数を呼び出す関数を検索 |
get_callees | 関数によって呼び出される関数を検索 |
find_call_path | 2つの関数間のパスを検索 |
get_complexity | サイクロマティック/認知的複雑度を取得 |
get_function_hotspots | 高度に接続された関数を検索 |
制御フロー分析
| ツール | 説明 |
|---|---|
get_control_flow | 基本ブロックと分岐を示すCFGを取得 |
find_dead_code | 到達不能なコードブロックを検索 |
データフロー分析
| ツール | 説明 |
|---|---|
get_data_flow | 変数の定義と使用 |
get_reaching_definitions | 各ポイントに到達する代入 |
find_uninitialized | 初期化前に使用される変数 |
find_dead_stores | 読み取られない代入 |
型推論(Python/JavaScript/TypeScript)
| ツール | 説明 |
|---|---|
infer_types | 外部型チェッカーなしで関数内の変数の型を推論 |
check_type_errors | mypy/tscを実行せずに潜在的な型エラーを検出 |
get_typed_taint_flow | データフローと型推論を組み合わせた拡張汚染解析 |
インポート/依存関係グラフ
| ツール | 説明 |
|---|---|
get_import_graph | インポートグラフを構築および分析 |
find_circular_imports | 循環依存関係を検出 |
get_incremental_status | マークルツリーと変更統計 |
セキュリティ分析 - 汚染追跡
| ツール | 説明 |
|---|---|
find_injection_vulnerabilities | SQLインジェクション、XSS、コマンドインジェクション、パストラバーサルを検出 |
trace_taint | ソースからの汚染データフローをトレース |
get_taint_sources | 汚染ソースを一覧表示(ユーザー入力、ファイル、ネットワーク) |
get_security_summary | 包括的なセキュリティリスク評価 |
セキュリティ分析 - ルールエンジン
| ツール | 説明 |
|---|---|
scan_security | セキュリティルールでスキャン(OWASP、CWE、暗号、シークレット) |
check_owasp_top10 | OWASP Top 10 2021の脆弱性をスキャン |
check_cwe_top25 | CWE Top 25の弱点をスキャン |
explain_vulnerability | 詳細な脆弱性の説明を取得 |
suggest_fix | 検出結果の修正提案を取得 |
サプライチェーンセキュリティ
| ツール | 説明 |
|---|---|
generate_sbom | SBOMを生成(CycloneDX/SPDX/JSON) |
check_dependencies | 既知の脆弱性をチェック(OSVデータベース) |
check_licenses | コンプライアンス問題のライセンスを分析 |
find_upgrade_path | 脆弱な依存関係の安全なアップグレードパスを検索 |
Git統合(--gitが必要)
| ツール | 説明 |
|---|---|
get_blame | ファイルのGit blame |
get_file_history | ファイルのコミット履歴 |
get_recent_changes | リポジトリの最近のコミット |
get_hotspots | 変更頻度と複雑度が高いファイル |
get_contributors | リポジトリ/ファイルのコントリビューター |
get_commit_diff | 特定のコミットの差分 |
get_symbol_history | シンボルを変更したコミット |
get_branch_info | 現在のブランチとステータス |
get_modified_files | 作業ツリーの変更 |
LSP統合(--lspが必要)
| ツール | 説明 |
|---|---|
get_hover_info | 型情報とドキュメント |
get_type_info | 正確な型情報 |
go_to_definition | 定義の場所を検索 |
リモートリポジトリサポート(--remoteが必要)
| ツール | 説明 |
|---|---|
add_remote_repo | GitHubリポジトリをクローンしてインデックス化 |
list_remote_files | GitHub API経由でファイルを一覧表示 |
get_remote_file | GitHub API経由でファイルを取得 |
メトリクス
| ツール | 説明 |
|---|---|
get_metrics | パフォーマンス統計とタイミング |
SPARQL / ナレッジグラフ(--graphが必要)
| ツール | 説明 |
|---|---|
sparql_query | RDFナレッジグラフに対してSPARQLクエリを実行 |
list_sparql_templates | 利用可能なSPARQLクエリテンプレートを一覧表示 |
run_sparql_template | パラメータ付きで定義済みSPARQLテンプレートを実行 |
コードコンテキストグラフ(CCG)(--graphが必要)
CCGは、コードベースの標準化されたAI消費可能な表現を階層化レイヤーで提供します。
| ツール | 説明 |
|---|---|
get_ccg_manifest | レイヤー0マニフェスト(約1-2KB JSON-LD)- リポジトリID、カウント |
export_ccg_manifest | レイヤー0マニフェストをファイルにエクスポート |
export_ccg_architecture | レイヤー1アーキテクチャ(約10-50KB JSON-LD)- モジュール、API |
export_ccg_index | レイヤー2シンボルインデックス(約100-500KB N-Quads gzip圧縮) |
export_ccg_full | レイヤー3完全詳細(約1-20MB N-Quads gzip圧縮) |
export_ccg | すべてのCCGレイヤーをバンドルとしてエクスポート |
query_ccg | SPARQLを使用してCCGをクエリ |
get_ccg_acl | CCGレイヤー用のWebACLアクセス制御を生成 |
get_ccg_access_info | CCGアクセス層情報を取得 |
import_ccg | URLまたはファイルからCCGレイヤーをインポート |
import_ccg_from_registry | codecontextgraph.comレジストリからCCGをインポート |
セキュリティルール
narsil-mcpには、rules/に組み込みのセキュリティルールが含まれています:
コアルールセット:
owasp-top10.yaml- OWASP Top 10 2021の脆弱性パターンcwe-top25.yaml- CWE Top 25の最も危険な弱点crypto.yaml- 暗号化の問題(弱いアルゴリズム、ハードコードされたキー)secrets.yaml- シークレット検出(APIキー、パスワード、トークン) 言語別ルール:rust.yaml- Rustセキュリティパターン(unsafe transmute、FFI境界、コマンドインジェクション、TOCTOU)elixir.yaml- Elixir/BEAMパターン(アトム枯渇、binary_to_term、Code.eval、Ecto SQLインジェクション)go.yaml- Goセキュリティパターン(SQLインジェクション、TLS、コマンドインジェクション)java.yaml- Javaの脆弱性(XXE、デシリアライゼーション、LDAPインジェクション)csharp.yaml- C#のセキュリティ問題(デシリアライゼーション、XSS、パストラバーサル)kotlin.yaml- Kotlin/Androidパターン(WebView、インテント、シークレット)bash.yaml- シェルスクリプトの脆弱性(コマンドインジェクション、eval)
インフラストラクチャと設定:
iac.yaml- Infrastructure as Code(Terraform、CloudFormation、Kubernetes)config.yaml- 設定ファイルのセキュリティ(ハードコードされた認証情報、安全でない設定)
カスタムルールはscan_security --ruleset /path/to/rules.yamlで読み込むことができます。
アーキテクチャ
+-----------------------------------------------------------------+
| MCP Server |
| +-----------------------------------------------------------+ |
| | JSON-RPC over stdio | |
| +-----------------------------------------------------------+ |
| | |
| +---------------------------v-------------------------------+ |
| | Code Intel Engine | |
| | +------------+ +------------+ +------------------------+ | |
| | | Symbol | | File | | Search Engine | | |
| | | Index | | Cache | | (Tantivy + TF-IDF) | | |
| | | (DashMap) | | (DashMap) | +------------------------+ | |
| | +------------+ +------------+ | |
| | +------------+ +------------+ +------------------------+ | |
| | | Call Graph | | Taint | | Security Rules | | |
| | | Analysis | | Tracker | | Engine | | |
| | +------------+ +------------+ +------------------------+ | |
| +-----------------------------------------------------------+ |
| | |
| +---------------------------v-------------------------------+ |
| | Tree-sitter Parser | |
| | +------+ +------+ +------+ +------+ +------+ | |
| | | Rust | |Python| | JS | | TS | | Go | ... | |
| | +------+ +------+ +------+ +------+ +------+ | |
| +-----------------------------------------------------------+ |
| | |
| +---------------------------v-------------------------------+ |
| | Repository Walker | |
| | (ignore crate - respects .gitignore) | |
| +-----------------------------------------------------------+ |
+-----------------------------------------------------------------+
パフォーマンス
Apple M1(criterion.rs)でベンチマーク:
パーススループット
| 言語 | 入力サイズ | 時間 | スループット |
|---|---|---|---|
| Rust(大規模ファイル) | 278 KB | 131 µs | 1.98 GiB/s |
| Rust(中規模ファイル) | 27 KB | 13.5 µs | 1.89 GiB/s |
| Python | ~4 KB | 16.7 µs | - |
| TypeScript | ~5 KB | 13.9 µs | - |
| 混合(5ファイル) | ~15 KB | 57 µs | - |
検索レイテンシ
| 操作 | コーパスサイズ | 時間 |
|---|---|---|
| シンボル完全一致 | 1,000シンボル | 483 ns |
| シンボル前方一致 | 1,000シンボル | 2.7 µs |
| シンボルあいまい一致 | 1,000シンボル | 16.5 µs |
| BM25全文検索 | 1,000ドキュメント | 80 µs |
| TF-IDF類似度 | 1,000ドキュメント | 130 µs |
| ハイブリッド(BM25+TF-IDF) | 1,000ドキュメント | 151 µs |
エンドツーエンドのインデックス作成
| リポジトリ | ファイル数 | シンボル数 | 時間 | メモリ |
|---|---|---|---|---|
| narsil-mcp(このリポジトリ) | 53 | 1,733 | 220 ms | ~50 MB |
| rust-analyzer | 2,847 | ~50K | 2.1s | 89 MB |
| linux kernel | 78,000+ | ~500K | 45s | 2.1 GB |
主要メトリクス:
- Tree-sitterパース: ~2 GiB/sの持続スループット
- シンボル検索: 完全一致で**<1µs**
- 全文検索: ほとんどのクエリで**<1ms**
- ハイブリッド検索はrayonを介してBM25 + TF-IDFを並列実行
開発
# Run the full test suite
cargo test
# Run benchmarks (criterion.rs)
cargo bench
# Run with debug logging
RUST_LOG=debug cargo run -- --repos ./test-fixtures
# Format code
cargo fmt
# Lint
cargo clippy
# Test with MCP Inspector
npx @modelcontextprotocol/inspector ./target/release/narsil-mcp --repos ./path/to/repo
トラブルシューティング
Tree-sitterビルドエラー
ビルド中にCコンパイラやtree-sitterが見つからないというエラーが表示される場合:
# macOS
xcode-select --install
# Ubuntu/Debian
sudo apt install build-essential
# For WASM builds
brew install emscripten # macOS
ニューラル検索APIエラー
# Check your API key is set
echo $VOYAGE_API_KEY # or $OPENAI_API_KEY
# Common issue: wrong key format
export VOYAGE_API_KEY="pa-..." # Voyage keys start with "pa-"
export OPENAI_API_KEY="sk-..." # OpenAI keys start with "sk-"
インデックスがファイルを見つけられない
# Check .gitignore isn't excluding files
narsil-mcp --repos /path --verbose # Shows skipped files
# Force reindex
narsil-mcp --repos /path --reindex
大規模リポジトリでのメモリ問題
# For very large repos (>50K files), increase stack size
RUST_MIN_STACK=8388608 narsil-mcp --repos /path/to/huge-repo
# Or index specific subdirectories
narsil-mcp --repos /path/to/repo/src --repos /path/to/repo/lib
グラフ機能が動作しない
--graphを渡して次のような警告が表示される場合:
WARN: --graph flag was passed but the binary was built without the 'graph' feature.
SPARQL and CCG tools will not be available.
これは、graph機能を有効にしてコンパイルされていないバイナリを使用していることを意味します。修正するには:
# Build from source with the graph feature
cargo build --release --features graph
# Or with multiple features
cargo build --release --features graph,frontend
# Then run with --graph
./target/release/narsil-mcp --repos ~/project --graph
なぜ別の機能なのか? graph機能はOxigraph RDFデータベース(バイナリサイズが約5MB増加)を追加しますが、これはほとんどのユースケースでは必要ありません。デフォルトのバイナリを小さく保つためにオプションとして維持されています。
グラフが有効かどうかを確認する方法: 起動ログを確認してください:
graph=trueは機能がコンパイルされ、かつ有効になっていることを意味しますgraph=falseは機能がコンパイルされていないか、--graphが渡されていないことを意味します
ロードマップ
完了済み
- 多言語シンボル抽出(32言語)
- Tantivyによる全文検索(BM25ランキング)
- ハイブリッド検索(BM25 + TF-IDF with RRF)
- AST対応コードチャンキング
- Git blame/履歴統合
- 複雑度メトリクスによるコールグラフ解析
- 制御フローグラフ(CFG)解析
- 到達定義によるデータフロー解析(DFG)
- デッドコードおよびデッドストア検出
- インジェクション脆弱性のためのテイント解析
- セキュリティルールエンジン(OWASP、CWE、暗号、シークレット)
- SBOM生成(CycloneDX、SPDX)
- 依存関係の脆弱性チェック(OSV)
- ライセンスコンプライアンス解析
- 循環依存検出付きインポートグラフ
- クロス言語シンボル解決
- Merkleツリーによるインクリメンタルインデックス作成
- インデックスの永続化
- ファイル変更のウォッチモード
- LSP統合
- リモートリポジトリサポート
- ストリーミングレスポンス
新機能
v1.6.x(現在)
- クラッシュプルーフチャンキング -
chunk_file()およびextract_signature()における安全でないバイトレベル文字列スライシングを修正。これにより、マルチバイトUTF-8文字(絵文字、CJK、アクセント付き文字)を含むファイルを処理する際にhybrid_search、search_chunks、get_chunk_statsがクラッシュしていました。すべてのバイトスライシングは、フォールバック付きの安全なcontent.get()を使用するようになりました。 - NaN安全なソート操作 - 検索、埋め込み、git、インデックス、抽出モジュールの5箇所で、NaN浮動小数点値に対して
partial_cmp().unwrap()がパニックを引き起こす問題を修正。すべてのソートはunwrap_or(Ordering::Equal)を使用するようになりました。 - 多層防御チャンキング - リポジトリ全体の
chunk_file()ループの周りにcatch_unwindラッパーを追加。1つのファイルでのパニックは、MCPサーバー全体をクラッシュさせる代わりにスキップされます。 - ビジュアライゼーションフロントエンドの刷新 - HashRouterルーティング、ファイルツリーサイドバー、シンタックスハイライト付きコードビューアー、ダッシュボード、リポジトリ別概要ページを備えた完全なSPA
- グラフビューのパフォーマンス - インポートグラフはファイルシステムウォークの代わりにキャッシュされたインデックスデータを使用。シンボルグラフはマークダウンラウンドトリップの代わりにファイルキャッシュを直接反復。すべてのビューは早期終了のために
max_nodesを尊重 - 実際の制御フローグラフ - フロービューは、単一ブロックのスタブの代わりに、適切な基本ブロック、分岐条件、ループバックエッジを持つ実際のCFGビルダー(
cfg::analyze_function)を使用 - ハイブリッドグラフ予算分割 - ハイブリッドビューは、バランスの取れた結果のためにコールグラフとインポートグラフの間で60/40のノード予算を割り当て
- 修正#14: 設定可能な埋め込み次元 -
--neural-dimensionCLI引数とdefault_dimension_for_model()ルックアップを追加。text-embedding-3-largeなどのモデルがハードコードされた1536の代わりに正しい次元(3072)を使用するように - 修正#13: Nixフロントエンドビルド -
flake.nixにfrontendDist導出を追加し、buildNpmPackageを使用してnix profile install github:postrv/narsil-mcp#with-frontendが動作するように - Rustセキュリティルール - コマンドインジェクション、transmute、FFI境界、TOCTOU、ReDoS、static mut、SSRFなどをカバーする18の新しいルール(RUST-004からRUST-021)
- Elixirセキュリティルール - アトム枯渇、binary_to_termデシリアライゼーション、Code.evalインジェクション、Ecto SQLインジェクション、Phoenix XSS、Erlang分散セキュリティをカバーする18の新しいルール(EX-001からEX-018)
serde_yamlからserde-saphyrへ移行 - 非推奨のserde_yamlを、積極的にメンテナンスされパニックフリーのYAMLライブラリに置き換え- カスタムファビコン - フロントエンドはデフォルトのViteロゴの代わりにnarsil-mcpブランディングアイコンを使用
- 依存関係のセキュリティ -
timeを0.3.47(RUSTSEC-2026-0009)に、bytesを1.11.1(RUSTSEC-2026-0007)に更新 - テスト数が1,611から1,763に増加(+152テスト)
v1.5.x
- 決定論的コールグラフ解決 - スコープヒント伝播により、被呼び出し側の解決があいまいさなく行われます(例:
App::run()はsrc/app/mod.rs::runに正しく解決されます) - 8つのグラフ解析修正 - 修飾ノードキー、ホットスポットフィルタリング、CFG式処理、インポートパス解析
- Nixフレークの改善 - DRYな
mkPkgヘルパー、不要なmacOSフレームワークの削除、サンドボックスビルドのための--libテスト戦略
v1.4.x
- SPARQL / RDFナレッジグラフ - Oxigraphを介したSPARQLでコードインテリジェンスデータをクエリ
- コードコンテキストグラフ(CCG) - 階層化レイヤー(L0-L3)を持つ、標準化されたAI消費可能なコードベース表現のための12のツール
- 型認識セキュリティ解析 - 型推論とトレイト実装による強化されたテイントトラッキング
- 多言語CFG/DFG - 制御フローおよびデータフロー解析をGo、Java、C#、Kotlinに拡張
- Infrastructure as Codeスキャン - Terraform、CloudFormation、Kubernetesのための新しい
iac.yamlルール - 言語別セキュリティルール - Go、Java、C#、Kotlin、Bashのための新しいルール
- 6つの新しい言語 - Erlang、Elm、Fortran、PowerShell、Nix、Groovy
- 合計90ツール - 新しいSPARQL、CCG、解析機能により79から増加
v1.2.x
exclude_testsパラメータ - 22のツールがテストファイルのフィルタリングをサポート- npmパッケージ -
npm install -g narsil-mcpでインストール
v1.1.x
- マルチプラットフォーム配布 - Homebrew、Scoop、npm、Cargo、または直接ダウンロードでインストール
- 設定可能なツールプリセット - 最小、バランス、フル、セキュリティ重視のプリセット
- 自動エディタ検出 - Zed、VS Code、Claude Desktopの最適なデフォルト
- 対話型セットアップウィザード - 簡単な設定のための
narsil-mcp config init - 32言語サポート - Dart、Julia、R、Perl、Zigなどを追加
- パフォーマンス向上 - バックグラウンドインデックス作成による高速起動
v1.0.x
- ニューラルセマンティック検索 - Voyage AIまたはOpenAI埋め込みを使用して類似コードを検索
- 型推論 - 外部ツールなしでPython/JavaScript/TypeScriptの型を推論
- 多言語テイント解析 - PHP、Java、C#、Ruby、Kotlinのセキュリティスキャン
- WASMビルド - コードプレイグラウンドや教育ツール用にブラウザで実行
- 147のバンドル済みセキュリティルール - OWASP、CWE、暗号、シークレット、Rust、Elixir検出
- IDE設定を含む - Claude Desktop、Cursor、VS Code、Zedテンプレート
ライセンス
次のいずれかの条件下でライセンスされています:
- Apache License, Version 2.0(LICENSE-APACHEまたはhttp://www.apache.org/licenses/LICENSE-2.0)
- MITライセンス(LICENSE-MITまたはhttp://opensource.org/licenses/MIT)
お客様の選択により。
クレジット
以下を使用して構築:
- tree-sitter - インクリメンタルパース
- tantivy - 全文検索
- tokio - 非同期ランタイム
- rayon - データ並列処理
- serde - シリアライゼーション