Back to skills
extension
Category: Development & EngineeringNo API key required

narsil

Use narsil-mcp code intelligence tools effectively. Use when searching code, finding symbols, analyzing call graphs, scanning for security vulnerabilities, exploring dependencies, or performing static analysis on indexed repositories.

personAuthor: jakexiaohubgithub

Narsil Code Intelligence

Narsil is an MCP server providing 76 code intelligence tools. This skill helps you use them effectively.

Critical: Parameter Naming

Use short parameter names. These are the most common mistakes:

| Wrong | Correct | |-------|---------| | repo_path | repo | | symbol_name | symbol | | file_path | path | | function_name | function |

The repo parameter expects the repository name from list_repos, not the full filesystem path.

Getting Started

Always start with:

list_repos  → See indexed repositories
get_index_status  → See which features are enabled

Feature Requirements

Some tools require specific CLI flags when starting narsil-mcp:

| Feature | Required Flag | Tools | |---------|--------------|-------| | Git integration | --git | get_blame, get_file_history, get_recent_changes, get_hotspots, get_contributors, get_commit_diff, get_symbol_history, get_branch_info, get_modified_files | | Call graph | --call-graph | get_call_graph, get_callers, get_callees, find_call_path, get_complexity, get_function_hotspots | | LSP | --lsp | Enhanced: get_hover_info, get_type_info, go_to_definition | | Neural search | --neural | neural_search, get_neural_stats | | Remote repos | --remote | add_remote_repo, list_remote_files, get_remote_file |

If a tool returns empty results or errors, check get_index_status to verify the feature is enabled.

Tool Selection Guide

Finding Code

| Task | Best Tool | When to Use | |------|-----------|-------------| | Find files by name | find_symbols with file_pattern | Know filename pattern | | Find function/class definitions | find_symbols | Know symbol type | | Search by content | search_code | Keyword search | | BM25-ranked search | semantic_search | Better ranking than search_code | | Semantic code search | hybrid_search | Natural language queries (combines BM25 + TF-IDF) | | Find similar code | find_similar_code | Have a code snippet | | Find code like a symbol | find_similar_to_symbol | Find patterns similar to existing function | | Find code clones | find_semantic_clones | Detect duplicate/similar code (Type-3/4 clones) | | Search AST chunks | search_chunks | Want function/class boundaries | | Fuzzy symbol search | workspace_symbol_search | Unsure of exact name | | AI codebase overview | explain_codebase | Quick understanding of unfamiliar repo | | Find feature location | find_implementation | Know feature name, not code location |

Understanding Code

| Task | Best Tool | |------|-----------| | Read a file | get_file | | Read specific lines | get_excerpt | | Get AST chunks for file | get_chunks | | Get function source | get_symbol_definition | | Find all references | find_references | | Find all usages (cross-file) | find_symbol_usages | | See what exports a module has | get_export_map | | Analyze imports/dependencies | get_dependencies | | See what calls a function | get_callers | | See what a function calls | get_callees | | Full call graph | get_call_graph | | Find path between functions | find_call_path | | Function complexity | get_complexity | | Find high-connection functions | get_function_hotspots | | Get type info at position | get_hover_info | | Get precise type info | get_type_info | | Go to definition | go_to_definition |

Security Analysis

| Task | Best Tool | |------|-----------| | Full security scan | scan_security | | Security overview | get_security_summary | | OWASP Top 10 check | check_owasp_top10 | | CWE Top 25 check | check_cwe_top25 | | Find injection flaws | find_injection_vulnerabilities | | Find taint sources | get_taint_sources | | Trace tainted data | trace_taint | | Explain a vulnerability | explain_vulnerability | | Get fix suggestion | suggest_fix | | Check dependencies for CVEs | check_dependencies | | Find upgrade paths | find_upgrade_path | | License compliance | check_licenses | | Generate SBOM | generate_sbom |

Static Analysis

| Task | Best Tool | |------|-----------| | Control flow graph | get_control_flow | | Data flow analysis | get_data_flow | | Reaching definitions | get_reaching_definitions | | Find dead code | find_dead_code | | Find dead stores | find_dead_stores | | Find uninitialized vars | find_uninitialized | | Infer types (Python/JS/TS) | infer_types | | Check type errors | check_type_errors | | Taint flow with types | get_typed_taint_flow | | Import dependency graph | get_import_graph | | Find circular imports | find_circular_imports |

Git History (requires --git)

| Task | Best Tool | |------|-----------| | Git blame for file | get_blame | | File commit history | get_file_history | | Recent repo changes | get_recent_changes | | High-churn files | get_hotspots | | Contributors to file/repo | get_contributors | | Diff for a commit | get_commit_diff | | Symbol change history | get_symbol_history | | Current branch info | get_branch_info | | Uncommitted changes | get_modified_files |

Utility & Diagnostics

| Task | Best Tool | |------|-----------| | List indexed repos | list_repos | | Get project structure | get_project_structure | | Check enabled features | get_index_status | | Force re-index | reindex | | Discover repos in directory | discover_repos | | Validate repo path | validate_repo | | Incremental index status | get_incremental_status | | Performance metrics | get_metrics | | Embedding stats | get_embedding_stats | | Chunk stats | get_chunk_stats |

Common Patterns

Explore a new codebase

1. list_repos → get repo name
2. get_project_structure(repo) → see directory tree
3. find_symbols(repo, symbol_type="function") → see main functions
4. get_import_graph(repo) → understand module structure

Find where something is implemented

1. workspace_symbol_search(query="feature name") → find candidates
2. find_symbol_usages(repo, symbol) → see all usages
3. get_symbol_definition(repo, symbol) → read the code

Security audit

1. scan_security(repo) → get all findings
2. check_owasp_top10(repo) → check critical vulnerabilities
3. check_dependencies(repo) → find vulnerable dependencies
4. find_injection_vulnerabilities(repo) → focus on injection flaws
5. For each finding: suggest_fix(repo, path, line) → get remediation

Understand a function

1. get_symbol_definition(repo, symbol) → read source
2. get_callers(repo, function, transitive=true) → who calls it
3. get_callees(repo, function) → what it calls
4. get_complexity(repo, function) → cyclomatic complexity
5. get_data_flow(repo, path, function) → variable flow

Handling Large Results

For large codebases, use pagination and filtering:

  • max_results parameter limits output size
  • file_pattern filters by glob (e.g., "*.py", "src/**/*.ts")
  • severity_threshold filters security findings (critical, high, medium, low)

Troubleshooting

"No repository found" → Run list_repos and use exact repo name

Empty results from git tools → Check get_index_status shows git enabled

Empty results from call graph → Check get_index_status shows call-graph enabled

Slow searches → Use file_pattern to narrow scope

For detailed workflow examples, see WORKFLOWS.md.