Narsil MCP

ทางการ

เซิร์ฟเวอร์ MCP ที่เร็วที่สุด 🔥 ระดับแนวหน้าใน Rust 🦀 พร้อมนิวรัลเอนจิน การวิเคราะห์ความปลอดภัย และส่วนหน้าสำหรับกราฟแบบเลือกใช้ได้

คุณทำอะไรได้บ้างด้วย Narsil MCP?

  • Find symbols across 32 languages — Search for functions, classes, or interfaces by name or pattern using find_symbols or workspace_symbol_search.
  • Trace tainted data for security audits — Follow user input through the codebase with trace_taint and detect injection vulnerabilities like SQLi or XSS.
  • Analyze function call relationships — Map callers, callees, and paths between functions with get_call_graph, get_callers, and find_call_path.
  • Generate a software bill of materials — Export a CycloneDX or SPDX SBOM and check dependencies against the OSV database with generate_sbom and check_dependencies.
  • Infer types without external checkers — Get inferred types for Python, JavaScript, or TypeScript variables using infer_types and 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_query and export_ccg.

เอกสาร

narsil-mcp

เซิร์ฟเวอร์ MCP ที่รวดเร็วและให้ความสำคัญกับความเป็นส่วนตัวสำหรับปัญญาโค้ดเชิงลึก

License Rust Tests MCP

เซิร์ฟเวอร์ MCP (Model Context Protocol) ที่ขับเคลื่อนด้วย Rust มอบความเข้าใจโค้ดเชิงลึกแก่ผู้ช่วย AI ผ่านเครื่องมือเฉพาะทาง 90 รายการ

ทำไมต้อง narsil-mcp?

คุณสมบัติnarsil-mcpXRAYSerenaGitHub MCP
ภาษา32430+ (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 AI
  • OPENAI_API_KEY - คีย์ API เฉพาะ OpenAI
  • EMBEDDING_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_blameGit blame สำหรับไฟล์
get_file_historyประวัติการคอมมิตสำหรับไฟล์
get_recent_changesการคอมมิตล่าสุดในที่เก็บ
get_hotspotsไฟล์ที่มีการเปลี่ยนแปลงบ่อยและความซับซ้อนสูง
get_contributorsผู้มีส่วนร่วมในที่เก็บ/ไฟล์
get_commit_diffDiff สำหรับคอมมิตเฉพาะ
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 2021
  • cwe-top25.yaml - จุดอ่อนที่อันตรายที่สุด 25 อันดับ CWE
  • crypto.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 KB131 µs1.98 GiB/s
Rust (ไฟล์กลาง)27 KB13.5 µs1.89 GiB/s
Python~4 KB16.7 µs-
TypeScript~5 KB13.9 µs-
ผสม (5 ไฟล์)~15 KB57 µ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 (ที่เก็บนี้)531,733220 ms~50 MB
rust-analyzer2,847~50K2.1s89 MB
linux kernel78,000+~500K45s2.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

ใบอนุญาต

ได้รับอนุญาตภายใต้อย่างใดอย่างหนึ่งจาก:

ตามที่คุณเลือก

เครดิต

สร้างด้วย:

  • tree-sitter - การแยกวิเคราะห์แบบเพิ่มขึ้น
  • tantivy - การค้นหาข้อความเต็ม
  • tokio - รันไทม์แบบอะซิงโครนัส
  • rayon - การขนานข้อมูล
  • serde - การซีเรียลไลซ์