Narsil MCP
ทางการเซิร์ฟเวอร์ MCP ที่เร็วที่สุด 🔥 ระดับแนวหน้าใน Rust 🦀 พร้อมนิวรัลเอนจิน การวิเคราะห์ความปลอดภัย และส่วนหน้าสำหรับกราฟแบบเลือกใช้ได้
คุณทำอะไรได้บ้างด้วย Narsil MCP?
- Find symbols across 32 languages — Search for functions, classes, or interfaces by name or pattern using
find_symbolsorworkspace_symbol_search. - Trace tainted data for security audits — Follow user input through the codebase with
trace_taintand detect injection vulnerabilities like SQLi or XSS. - Analyze function call relationships — Map callers, callees, and paths between functions with
get_call_graph,get_callers, andfind_call_path. - Generate a software bill of materials — Export a CycloneDX or SPDX SBOM and check dependencies against the OSV database with
generate_sbomandcheck_dependencies. - Infer types without external checkers — Get inferred types for Python, JavaScript, or TypeScript variables using
infer_typesand find potential type errors. - Query the codebase as a knowledge graph — Run SPARQL queries against the RDF graph or export tiered CCG layers for AI consumption with
sparql_queryandexport_ccg.
เอกสาร
narsil-mcp
เซิร์ฟเวอร์ MCP ที่รวดเร็วและให้ความสำคัญกับความเป็นส่วนตัวสำหรับปัญญาโค้ดเชิงลึก
เซิร์ฟเวอร์ MCP (Model Context Protocol) ที่ขับเคลื่อนด้วย Rust มอบความเข้าใจโค้ดเชิงลึกแก่ผู้ช่วย AI ผ่านเครื่องมือเฉพาะทาง 90 รายการ
ทำไมต้อง narsil-mcp?
| คุณสมบัติ | narsil-mcp | XRAY | Serena | GitHub MCP |
|---|---|---|---|---|
| ภาษา | 32 | 4 | 30+ (LSP) | N/A |
| การค้นหาแบบนิวรัล | ใช่ | ไม่ | ไม่ | ไม่ |
| การวิเคราะห์ Taint | ใช่ | ไม่ | ไม่ | ไม่ |
| SBOM/ใบอนุญาต | ใช่ | ไม่ | ไม่ | บางส่วน |
| ออฟไลน์/ภายในเครื่อง | ใช่ | ใช่ | ใช่ | ไม่ |
| WASM/เบราว์เซอร์ | ใช่ | ไม่ | ไม่ | ไม่ |
| กราฟการเรียกใช้ | ใช่ | บางส่วน | ไม่ | ไม่ |
| การอนุมานประเภท | ใช่ | ไม่ | ไม่ | ไม่ |
คุณสมบัติหลัก
- ปัญญาโค้ด - การสกัดสัญลักษณ์, การค้นหาเชิงความหมาย, การวิเคราะห์กราฟการเรียกใช้
- การค้นหาเชิงความหมายแบบนิวรัล - ค้นหาโค้ดที่คล้ายกันโดยใช้ embeddings (Voyage AI, OpenAI)
- การวิเคราะห์ความปลอดภัย - การวิเคราะห์ Taint, การสแกนช่องโหว่, ความครอบคลุม OWASP/CWE
- ความปลอดภัยของซัพพลายเชน - การสร้าง SBOM, การตรวจสอบการพึ่งพา, การปฏิบัติตามใบอนุญาต
- การวิเคราะห์ขั้นสูง - กราฟการไหลควบคุม, การวิเคราะห์การไหลของข้อมูล, การตรวจจับโค้ดที่ตายแล้ว
ทำไมต้องเลือก narsil-mcp?
- เขียนด้วย Rust - รวดเร็วมาก, ปลอดภัยด้านหน่วยความจำ, ไบนารีเดียว (~30MB)
- ขับเคลื่อนด้วย Tree-sitter - การแยกวิเคราะห์ที่แม่นยำและเพิ่มขึ้นสำหรับ 32 ภาษา
- ไม่ต้องตั้งค่า - ชี้ไปที่ repos แล้วเริ่มได้เลย
- สอดคล้องกับ MCP - ทำงานร่วมกับ Claude, Cursor, VS Code Copilot, Zed และไคลเอนต์ MCP ใดๆ
- ให้ความสำคัญกับความเป็นส่วนตัว - ทำงานภายในเครื่องทั้งหมด ไม่มีข้อมูลออกจากเครื่องของคุณ
- การทำดัชนีแบบขนาน - ใช้ทุกคอร์ผ่าน Rayon
- ข้อความที่ตัดตอนมาอย่างชาญฉลาด - ขยายไปยังขอบเขตทางวากยสัมพันธ์ที่สมบูรณ์
- ให้ความสำคัญกับความปลอดภัย - การตรวจจับช่องโหว่และการวิเคราะห์ Taint ในตัว
- Neural embeddings - การค้นหาเชิงความหมายเสริมด้วย Voyage AI หรือ OpenAI
- รองรับ WASM - ทำงานในเบราว์เซอร์ด้วยบิลด์ WebAssembly
- การสตรีมแบบเรียลไทม์ - ผลลัพธ์เมื่อการทำดัชนีดำเนินไปสำหรับ repos ขนาดใหญ่
ภาษาที่รองรับ
| ภาษา | นามสกุล | สัญลักษณ์ที่สกัด |
|---|---|---|
| Rust | .rs | ฟังก์ชัน, structs, enums, traits, impls, mods |
| Python | .py, .pyi | ฟังก์ชัน, คลาส |
| JavaScript | .js, .jsx, .mjs | ฟังก์ชัน, คลาส, เมธอด, ตัวแปร |
| TypeScript | .ts, .tsx | ฟังก์ชัน, คลาส, อินเทอร์เฟซ, ประเภท, enums |
| Go | .go | ฟังก์ชัน, เมธอด, ประเภท |
| C | .c, .h | ฟังก์ชัน, structs, enums, typedefs |
| C++ | .cpp, .cc, .hpp | ฟังก์ชัน, คลาส, structs, เนมสเปซ |
| Java | .java | เมธอด, คลาส, อินเทอร์เฟซ, enums |
| C# | .cs | เมธอด, คลาส, อินเทอร์เฟซ, structs, enums, delegates, เนมสเปซ |
| Bash | .sh, .bash, .zsh | ฟังก์ชัน, ตัวแปร |
| Ruby | .rb, .rake, .gemspec | เมธอด, คลาส, โมดูล |
| Kotlin | .kt, .kts | ฟังก์ชัน, คลาส, objects, อินเทอร์เฟซ |
| PHP | .php, .phtml | ฟังก์ชัน, เมธอด, คลาส, อินเทอร์เฟซ, traits |
| Swift | .swift | คลาส, structs, enums, โปรโตคอล, ฟังก์ชัน |
| Verilog/SystemVerilog | .v, .vh, .sv, .svh | โมดูล, tasks, ฟังก์ชัน, อินเทอร์เฟซ, คลาส |
| Scala | .scala, .sc | คลาส, objects, traits, ฟังก์ชัน, vals |
| Lua | .lua | ฟังก์ชัน, เมธอด |
| Haskell | .hs, .lhs | ฟังก์ชัน, ประเภทข้อมูล, คลาสประเภท |
| Elixir | .ex, .exs | โมดูล, ฟังก์ชัน |
| Clojure | .clj, .cljs, .cljc, .edn | ลิสต์ (AST พื้นฐาน) |
| Dart | .dart | ฟังก์ชัน, คลาส, เมธอด |
| Julia | .jl | ฟังก์ชัน, โมดูล, structs |
| R | .R, .r, .Rmd | ฟังก์ชัน |
| Perl | .pl, .pm, .t | ฟังก์ชัน, แพ็กเกจ |
| Zig | .zig | ฟังก์ชัน, ตัวแปร |
| Erlang | .erl, .hrl | ฟังก์ชัน, โมดูล, records |
| Elm | .elm | ฟังก์ชัน, ประเภท |
| Fortran | .f90, .f95, .f03, .f08, .f, .for, .fpp | โปรแกรม, ซับรูทีน, ฟังก์ชัน, โมดูล |
| PowerShell | .ps1, .psm1, .psd1 | ฟังก์ชัน, คลาส, enums |
| Nix | .nix | การผูก |
| Groovy | .groovy, .gradle | เมธอด, คลาส, อินเทอร์เฟซ, enums, ฟังก์ชัน |
การติดตั้ง
ผ่านตัวจัดการแพ็กเกจ (แนะนำ)
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 1.70 หรือใหม่กว่า
- บน Windows: Visual Studio Build Tools พร้อม "Desktop development with C++"
# Clone and build
git clone [email protected]: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
# For browser/WASM usage
cargo build --release --target wasm32-unknown-unknown --features wasm
| คุณสมบัติ | คำอธิบาย | ขนาด |
|---|---|---|
native (ค่าเริ่มต้น) | เซิร์ฟเวอร์ MCP เต็มรูปแบบพร้อมเครื่องมือทั้งหมด | ~30MB |
graph | + กราฟความรู้ RDF, SPARQL, เครื่องมือ CCG | ~35MB |
frontend | + UI เว็บการแสดงภาพแบบฝัง | ~31MB |
neural | + การค้นหาเวกเตอร์ TF-IDF, API embeddings | ~32MB |
neural-onnx | + การอนุมานโมเดล ONNX ภายในเครื่อง | ~50MB |
wasm | บิลด์เบราว์เซอร์ (ไม่มีระบบไฟล์, git) | ~3MB |
สำคัญ: แฟล็ก CLI
--graphต้องการให้ไบนารีถูกสร้างด้วย--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
หมายเหตุ: Neural embeddings ต้องการคีย์ 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- คีย์ API เฉพาะ Voyage AIOPENAI_API_KEY- คีย์ API เฉพาะ OpenAIEMBEDDING_SERVER_ENDPOINT- URL เอนด์พอยต์ API embedding ที่กำหนดเอง (ไม่บังคับ อนุญาตให้ใช้โมเดลที่โฮสต์เอง)
การกำหนดค่า
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 ในรูทของ repo):
version: "1.0"
preset: "security-focused" # Override user preset
tools:
categories:
Security:
enabled: true
SupplyChain:
enabled: true
โปรไฟล์ที่เก็บที่มีชื่อ มีประโยชน์สำหรับพื้นที่ทำงานหลาย repos:
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
มุมมองกราฟห้าแบบ:
| มุมมอง | คำอธิบาย |
|---|---|
| กราฟการเรียกใช้ | ความสัมพันธ์การเรียกใช้ฟังก์ชันพร้อมการควบคุมความลึกและการกรองทิศทาง |
| กราฟการนำเข้า | การพึ่งพาการนำเข้าระดับไฟล์ทั่วทั้งโค้ดเบส |
| กราฟสัญลักษณ์ | การอ้างอิงทั้งหมดไปยังสัญลักษณ์ พร้อมการจัดกลุ่มไฟล์ |
| ไฮบริด | กราฟการเรียกใช้ + การนำเข้ารวมกันพร้อมงบประมาณแยก |
| การไหลควบคุม | CFG จริงพร้อมบล็อกพื้นฐาน กิ่งก้าน และขอบย้อนกลับของลูป |
คุณสมบัติ:
- กราฟ Cytoscape.js แบบโต้ตอบพร้อมการลาก ซูม และดับเบิลคลิกเพื่อเจาะลึก
- การซ้อนทับเมตริกความซับซ้อนพร้อมรหัสสี (เขียว/เหลือง/ส้ม/แดง)
- การซ้อนทับช่องโหว่ความปลอดภัยที่เน้นแหล่งที่มาและปลายทางของ Taint
- อัลกอริทึมเลย์เอาต์หกแบบ (dagre, force-directed, breadthfirst, concentric, circle, grid)
- แถบด้านข้างแผนผังไฟล์พร้อมตัวดูโค้ดที่เน้นไวยากรณ์
- สถานะที่ขับเคลื่อนด้วย URL (ลิงก์ที่แชร์ได้, ย้อนกลับ/ไปข้างหน้าของเบราว์เซอร์)
- รองรับโหมดมืด
- แผงรายละเอียดโหนดพร้อมข้อความที่ตัดตอนมาจากโค้ดและการนำทางไปยังซอร์ส
เอกสารฉบับเต็ม: ดู docs/frontend.md สำหรับการตั้งค่า เอนด์พอยต์ API และโหมดการพัฒนา
การค้นหาเชิงความหมายแบบนิวรัล
ค้นหาโค้ดที่คล้ายกันโดยใช้ neural embeddings - แม้ว่าชื่อตัวแปรและโครงสร้างจะแตกต่างกัน
# 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 — เกตเวย์ MCP โหมดโค้ดที่ยุบเครื่องมือทั้งหมด 90 รายการเหลือเพียง 2 รายการ (search + execute) ลดค่าใช้จ่ายสคีมาเครื่องมือจาก ~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 เขียน JavaScript ที่เรียกใช้ผ่านออบเจกต์พร็อกซีที่มีชนิดข้อมูลภายใน V8 isolate แบบแซนด์บ็อกซ์ — ข้อมูลประจำตัว, พาธไฟล์, และสถานะภายในจะไม่หลุดออกจากโฮสต์ วิธีการนี้มีประโยชน์อย่างยิ่งเมื่อทำงานกับเซิร์ฟเวอร์ MCP หลายตัวพร้อมกัน เพราะช่วยให้บริบทของเครื่องมือโดยรวมมีขนาดเล็กและคาดเดาได้
การกำหนดค่า MCP
เพิ่ม narsil-mcp ลงในผู้ช่วย AI ของคุณโดยสร้างไฟล์กำหนดค่า ต่อไปนี้คือการตั้งค่าที่แนะนำ:
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):
{
"context_servers": {
"narsil-mcp": {
"command": "narsil-mcp",
"args": ["--repos", ".", "--git"]
}
}
}
หมายเหตุสำหรับ Zed: narsil-mcp เริ่มทำงานทันทีและทำดัชนีในพื้นหลัง ป้องกันการหมดเวลาการเริ่มต้น
ปลั๊กอิน Claude Code
สำหรับผู้ใช้ Claude Code เรามีปลั๊กอินพร้อมคำสั่งสแลชและทักษะสำหรับการใช้เครื่องมืออย่างมีประสิทธิภาพ
ติดตั้งผ่าน Marketplace (แนะนำ):
# 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 | วิเคราะห์ความปลอดภัยของห่วงโซ่อุปทาน |
| ทักษะ | แนะนำ Claude ในการใช้เครื่องมือ 90 รายการอย่างมีประสิทธิภาพ |
| การกำหนดค่า MCP | เริ่ม narsil-mcp อัตโนมัติด้วยค่าเริ่มต้นที่เหมาะสม |
ดู narsil-plugin/README.md สำหรับเอกสารฉบับเต็ม
การผสานรวม Ralph Automation
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 ไม่พร้อมใช้งาน - ฟีเจอร์อัตโนมัติหลักทั้งหมดทำงานได้โดยไม่มีมัน
เอกสาร: ดู Ralph README สำหรับรายละเอียดการผสานรวมฉบับเต็ม
Playbooks และบทช่วยสอน
ดู docs/playbooks สำหรับคู่มือการใช้งานจริง:
| คู่มือ | คำอธิบาย |
|---|---|
| เริ่มต้นใช้งาน | การตั้งค่าอย่างรวดเร็วและการเรียกใช้เครื่องมือครั้งแรก |
| ทำความเข้าใจฐานโค้ด | สำรวจโปรเจกต์ที่ไม่คุ้นเคย |
| แก้ไขบั๊ก | ดีบักด้วยกราฟการเรียกและการวิเคราะห์การปนเปื้อน |
| ตรวจสอบความปลอดภัย | ค้นหาช่องโหว่ด้วยการสแกน OWASP/CWE |
| ตรวจสอบโค้ด | ตรวจสอบการเปลี่ยนแปลงอย่างมีประสิทธิภาพ |
แต่ละ playbook แสดงห่วงโซ่เครื่องมือที่แน่นอนที่ Claude ใช้เพื่อตอบคำถามของคุณ
การใช้งาน WebAssembly (เบราว์เซอร์)
narsil-mcp สามารถทำงานทั้งหมดในเบราว์เซอร์ผ่าน WebAssembly - เหมาะสำหรับ IDE บนเบราว์เซอร์, เครื่องมือตรวจสอบโค้ด, หรือแพลตฟอร์มการศึกษา
npm install @narsil-mcp/wasm
import { CodeIntelClient } from '@narsil-mcp/wasm';
const client = new CodeIntelClient();
await client.init();
client.indexFile('src/main.rs', rustSourceCode);
const symbols = client.findSymbols('Handler');
เอกสารฉบับเต็ม: ดู docs/wasm.md สำหรับคำแนะนำการสร้าง, ตัวอย่าง React, และการอ้างอิง API
เครื่องมือที่พร้อมใช้งาน (90)
การจัดการที่เก็บและไฟล์
| เครื่องมือ | คำอธิบาย |
|---|---|
list_repos | แสดงรายการที่เก็บที่ทำดัชนีทั้งหมดพร้อมเมตาดาตา |
get_project_structure | รับแผนผังไดเรกทอรีพร้อมไอคอนไฟล์และขนาด |
get_file | รับเนื้อหาไฟล์พร้อมช่วงบรรทัดที่เลือกได้ |
get_excerpt | แยกโค้ดรอบบรรทัดเฉพาะพร้อมบริบท |
reindex | เรียกการทำดัชนีที่เก็บใหม่ |
discover_repos | ค้นพบที่เก็บในไดเรกทอรีโดยอัตโนมัติ |
validate_repo | ตรวจสอบว่าพาธเป็นที่เก็บที่ถูกต้องหรือไม่ |
get_index_status | แสดงสถิติการทำดัชนีและฟีเจอร์ที่เปิดใช้งาน |
การค้นหาและการนำทางสัญลักษณ์
| เครื่องมือ | คำอธิบาย |
|---|---|
find_symbols | ค้นหา struct, คลาส, ฟังก์ชันตามชนิด/รูปแบบ |
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 | ค้นหาเส้นทางระหว่างสองฟังก์ชัน |
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 | ต้นไม้ Merkle และสถิติการเปลี่ยนแปลง |
การวิเคราะห์ความปลอดภัย - การติดตามการปนเปื้อน
| เครื่องมือ | คำอธิบาย |
|---|---|
find_injection_vulnerabilities | ค้นหา SQL injection, XSS, command injection, path traversal |
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 | Diff สำหรับคอมมิตเฉพาะ |
get_symbol_history | คอมมิตที่เปลี่ยนสัญลักษณ์ |
get_branch_info | สาขาปัจจุบันและสถานะ |
get_modified_files | การเปลี่ยนแปลงใน working tree |
การผสานรวม 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 | ดำเนินการคิวรี SPARQL กับกราฟความรู้ RDF |
list_sparql_templates | แสดงรายการเทมเพลตคิวรี SPARQL ที่พร้อมใช้งาน |
run_sparql_template | ดำเนินการเทมเพลต SPARQL ที่กำหนดไว้ล่วงหน้าพร้อมพารามิเตอร์ |
กราฟบริบทโค้ด (CCG) (ต้องใช้ --graph)
CCG ให้การแสดงฐานโค้ดที่เป็นมาตรฐานและพร้อมใช้งานสำหรับ AI ในเลเยอร์แบบลำดับชั้น
| เครื่องมือ | คำอธิบาย |
|---|---|
get_ccg_manifest | แมนิเฟสต์เลเยอร์ 0 (~1-2KB JSON-LD) - ข้อมูลประจำตัวที่เก็บ, จำนวน |
export_ccg_manifest | ส่งออกแมนิเฟสต์เลเยอร์ 0 ไปยังไฟล์ |
export_ccg_architecture | สถาปัตยกรรมเลเยอร์ 1 (~10-50KB JSON-LD) - โมดูล, API |
export_ccg_index | ดัชนีสัญลักษณ์เลเยอร์ 2 (~100-500KB N-Quads gzipped) |
export_ccg_full | รายละเอียดเต็มเลเยอร์ 3 (~1-20MB N-Quads gzipped) |
export_ccg | ส่งออกเลเยอร์ CCG ทั้งหมดเป็นชุดรวม |
query_ccg | คิวรี CCG โดยใช้ SPARQL |
get_ccg_acl | สร้างการควบคุมการเข้าถึง WebACL สำหรับเลเยอร์ CCG |
get_ccg_access_info | รับข้อมูลระดับการเข้าถึง CCG |
import_ccg | นำเข้าเลเยอร์ CCG จาก URL หรือไฟล์ |
import_ccg_from_registry | นำเข้า CCG จากรีจิสทรี codecontextgraph.com |
กฎความปลอดภัย
narsil-mcp รวมกฎความปลอดภัยในตัวใน rules/:
ชุดกฎหลัก:
owasp-top10.yaml- รูปแบบช่องโหว่ OWASP Top 10 2021cwe-top25.yaml- จุดอ่อนที่อันตรายที่สุด 25 อันดับ CWEcrypto.yaml- ปัญหาการเข้ารหัส (อัลกอริทึมที่อ่อนแอ, คีย์ที่ฝังแน่น)secrets.yaml- การตรวจจับความลับ (คีย์ API, รหัสผ่าน, โทเค็น) กฎเฉพาะภาษา:rust.yaml- รูปแบบความปลอดภัยของ Rust (unsafe transmute, ขอบเขต FFI, command injection, TOCTOU)elixir.yaml- รูปแบบของ Elixir/BEAM (atom exhaustion, binary_to_term, Code.eval, Ecto SQL injection)go.yaml- รูปแบบความปลอดภัยของ Go (SQL injection, TLS, command injection)java.yaml- ช่องโหว่ของ Java (XXE, deserialization, LDAP injection)csharp.yaml- ปัญหาความปลอดภัยของ C# (deserialization, XSS, path traversal)kotlin.yaml- รูปแบบของ Kotlin/Android (WebView, intents, secrets)bash.yaml- ช่องโหว่ของ Shell script (command injection, eval)
โครงสร้างพื้นฐานและการกำหนดค่า:
iac.yaml- Infrastructure as Code (Terraform, CloudFormation, Kubernetes)config.yaml- ความปลอดภัยของไฟล์การกำหนดค่า (hardcoded credentials, insecure settings)
สามารถโหลดกฎแบบกำหนดเองได้ด้วย 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 สำหรับคำถามส่วนใหญ่
- การค้นหาแบบผสมรัน BM25 + TF-IDF แบบขนานผ่าน rayon
การพัฒนา
# 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
ข้อผิดพลาด Neural Search 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 ด้วย RRF)
- การแบ่งโค้ดที่รับรู้ AST
- การรวม Git blame/history
- การวิเคราะห์กราฟการเรียกพร้อมตัวชี้วัดความซับซ้อน
- การวิเคราะห์กราฟการควบคุมการไหล (CFG)
- การวิเคราะห์การไหลของข้อมูล (DFG) พร้อม reaching definitions
- การตรวจจับ dead code และ dead store
- การวิเคราะห์ taint สำหรับช่องโหว่การแทรก
- เอ็นจินกฎความปลอดภัย (OWASP, CWE, crypto, secrets)
- การสร้าง SBOM (CycloneDX, SPDX)
- การตรวจสอบช่องโหว่ของ dependency (OSV)
- การวิเคราะห์การปฏิบัติตามใบอนุญาต
- กราฟการนำเข้าพร้อมการตรวจจับการอ้างอิงแบบวงกลม
- การแก้ไขสัญลักษณ์ข้ามภาษา
- การทำดัชนีแบบเพิ่มขึ้นด้วย Merkle trees
- การคงอยู่ของดัชนี
- โหมดเฝ้าดูการเปลี่ยนแปลงไฟล์
- การรวม LSP
- การสนับสนุนที่เก็บระยะไกล
- การตอบสนองแบบสตรีมมิ่ง
มีอะไรใหม่
v1.6.x (ปัจจุบัน)
- การแบ่งส่วนที่ป้องกันการหยุดทำงาน - แก้ไขการตัดสตริงระดับไบต์ที่ไม่ปลอดภัยใน
chunk_file()และextract_signature()ที่ทำให้hybrid_search,search_chunksและget_chunk_statsหยุดทำงานเมื่อประมวลผลไฟล์ที่มีอักขระ UTF-8 หลายไบต์ (อีโมจิ, CJK, อักขระที่มีเครื่องหมายกำกับ) การตัดไบต์ทั้งหมดตอนนี้ใช้content.get()ที่ปลอดภัยพร้อม fallback - การดำเนินการเรียงลำดับที่ปลอดภัยต่อ NaN - แก้ไข 5 ตำแหน่งในโมดูล search, embeddings, git, index และ extract ที่
partial_cmp().unwrap()จะ panic เมื่อเจอค่า float NaN การเรียงลำดับทั้งหมดตอนนี้ใช้unwrap_or(Ordering::Equal) - การแบ่งส่วนแบบป้องกันเชิงลึก - เพิ่มตัวห่อ
catch_unwindรอบลูปchunk_file()ทั่วทั้งที่เก็บ เพื่อให้การ panic ในไฟล์หนึ่งข้ามไปแทนที่จะทำให้เซิร์ฟเวอร์ MCP ทั้งหมดหยุดทำงาน - การปรับปรุงส่วนหน้าสำหรับการแสดงผล - SPA เต็มรูปแบบพร้อมการกำหนดเส้นทาง HashRouter, แถบด้านข้างไฟล์ tree, ตัวดูโค้ดที่มีการเน้นไวยากรณ์, แดชบอร์ด และหน้าภาพรวมต่อที่เก็บ
- ประสิทธิภาพมุมมองกราฟ - กราฟการนำเข้าตอนนี้ใช้ข้อมูลดัชนีที่แคชไว้แทนการเดินระบบไฟล์; กราฟสัญลักษณ์วนซ้ำแคชไฟล์โดยตรงแทนการเดินทางไปกลับ markdown; มุมมองทั้งหมดเคารพ
max_nodesสำหรับการสิ้นสุดก่อนกำหนด - กราฟการควบคุมการไหลจริง - มุมมอง Flow ตอนนี้ใช้ตัวสร้าง CFG จริง (
cfg::analyze_function) พร้อม basic blocks, เงื่อนไขสาขา และ back-edges ของลูปที่เหมาะสมแทน stub บล็อกเดียว - การแบ่งงบประมาณกราฟแบบผสม - มุมมองแบบผสมจัดสรรงบประมาณโหนด 60/40 ระหว่างกราฟการเรียกและกราฟการนำเข้าเพื่อผลลัพธ์ที่สมดุล
- แก้ไข #14: มิติการฝังที่กำหนดค่าได้ - เพิ่มอาร์กิวเมนต์ CLI
--neural-dimensionและการค้นหาdefault_dimension_for_model()เพื่อให้โมเดลเช่นtext-embedding-3-largeใช้มิติที่ถูกต้อง (3072) แทนที่จะฮาร์ดโค้ดเป็น 1536 - แก้ไข #13: การสร้างส่วนหน้า Nix - เพิ่ม derivation
frontendDistในflake.nixโดยใช้buildNpmPackageเพื่อให้nix profile install github:postrv/narsil-mcp#with-frontendทำงานได้ - กฎความปลอดภัย Rust - กฎใหม่ 18 ข้อ (RUST-004 ถึง RUST-021) ครอบคลุม command injection, transmute, ขอบเขต FFI, TOCTOU, ReDoS, static mut, SSRF และอื่นๆ
- กฎความปลอดภัย Elixir - กฎใหม่ 18 ข้อ (EX-001 ถึง EX-018) ครอบคลุม atom exhaustion, binary_to_term deserialization, Code.eval injection, Ecto SQL injection, Phoenix XSS, ความปลอดภัยการกระจาย Erlang
- ย้ายจาก
serde_yamlไปยังserde-saphyr- เลิกใช้serde_yamlแทนที่ด้วยไลบรารี YAML ที่ได้รับการดูแลอย่างต่อเนื่องและปราศจาก panic - favicon แบบกำหนดเอง - ส่วนหน้าตอนนี้ใช้ไอคอนแบรนด์ narsil-mcp แทนโลโก้ Vite เริ่มต้น
- ความปลอดภัยของ dependency - อัปเดต
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 รายการ - คีย์โหนดที่มีคุณสมบัติ, การกรอง hotspot, การจัดการนิพจน์ CFG, การแยกวิเคราะห์เส้นทางการนำเข้า
- การปรับปรุง Nix flake - ตัวช่วย
mkPkgแบบ DRY, ลบเฟรมเวิร์ก macOS ที่ไม่จำเป็น, กลยุทธ์การทดสอบ--libสำหรับการสร้างใน sandbox
v1.4.x
- SPARQL / RDF Knowledge Graph - สอบถามข้อมูลความอัจฉริยะของโค้ดด้วย SPARQL ผ่าน Oxigraph
- Code Context Graph (CCG) - 12 เครื่องมือสำหรับการแสดงฐานโค้ดที่ได้มาตรฐานและพร้อมใช้งานสำหรับ AI พร้อมเลเยอร์แบบลำดับชั้น (L0-L3)
- การวิเคราะห์ความปลอดภัยที่รับรู้ประเภท - การติดตาม taint ที่ปรับปรุงด้วยการอนุมานประเภทและการใช้งาน trait
- CFG/DFG หลายภาษา - การวิเคราะห์การควบคุมการไหลและการไหลของข้อมูลขยายไปยัง Go, Java, C#, Kotlin
- การสแกน Infrastructure as Code - กฎ
iac.yamlใหม่สำหรับ Terraform, CloudFormation, Kubernetes - กฎความปลอดภัยเฉพาะภาษา - กฎใหม่สำหรับ Go, Java, C#, Kotlin, Bash
- ภาษาใหม่ 6 ภาษา - Erlang, Elm, Fortran, PowerShell, Nix, Groovy
- เครื่องมือทั้งหมด 90 รายการ - เพิ่มขึ้นจาก 79 รายการด้วยความสามารถ SPARQL, CCG และการวิเคราะห์ใหม่
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 embeddings
- การอนุมานประเภท - อนุมานประเภทใน Python/JavaScript/TypeScript โดยไม่ต้องใช้เครื่องมือภายนอก
- การวิเคราะห์ taint หลายภาษา - การสแกนความปลอดภัยสำหรับ PHP, Java, C#, Ruby, Kotlin
- การสร้าง WASM - รันในเบราว์เซอร์สำหรับ code playgrounds และเครื่องมือทางการศึกษา
- กฎความปลอดภัยที่รวมมา 147 ข้อ - การตรวจจับ OWASP, CWE, crypto, secrets, 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 (LICENSE-MIT หรือ http://opensource.org/licenses/MIT)
ตามที่คุณเลือก
เครดิต
สร้างด้วย:
- tree-sitter - การแยกวิเคราะห์แบบเพิ่มขึ้น
- tantivy - การค้นหาข้อความเต็ม
- tokio - รันไทม์แบบอะซิงโครนัส
- rayon - การขนานข้อมูล
- serde - การซีเรียลไลซ์