Claude Code Plugins

Community-maintained marketplace

Feedback

Context management tools for Claude Code - provides intelligent codebase mapping with Python, Rust, and C++ parsing, duplicate detection, and MCP-powered symbol queries. Use this skill when working with large codebases that need automated indexing and context management.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name context-tools
description Context management tools for Claude Code - provides intelligent codebase mapping with Python, Rust, and C++ parsing, duplicate detection, and MCP-powered symbol queries. Use this skill when working with large codebases that need automated indexing and context management.

Context Tools for Claude Code

This skill provides intelligent context management for large codebases through:

  • Repository Mapping: Parses Python, Rust, and C++ code to extract classes, functions, and methods
  • Duplicate Detection: Identifies similar code patterns using fuzzy matching
  • MCP Symbol Server: Enables fast symbol search via search_symbols and get_file_symbols tools
  • Automatic Indexing: Background incremental updates as files change

Using MCP Tools - PRIMARY CODE EXPLORATION METHOD

⚡ DECISION TREE - Ask yourself BEFORE using Grep/Search/Bash:

Am I searching for code symbols (functions, classes, enums, structs, types)?
├─ YES → Use MCP tools (search_symbols / get_symbol_content / get_file_symbols)
│         Example: Finding "enum InstructionData" → search_symbols("InstructionData")
│         Example: Finding "Phi" variant → get_symbol_content("InstructionData")
│
└─ NO → Am I searching for text/comments/strings/config values?
          └─ YES → Use Grep/Search
                   Example: Finding string literals, documentation, JSON values

CRITICAL: Use repo-map tools as your FIRST approach when you need to:

  • Find a function/class/method by name or patternsearch_symbols
  • Understand how to use a function (parameters, return type) → search_symbols or get_symbol_content
  • Get the source code of a specific function/classget_symbol_content
  • See all code in a fileget_file_symbols
  • Discover what functionality exists in the codebase → search_symbols with patterns

Do NOT use Grep or Bash for these tasks - the repo-map tools are:

  • Faster (pre-indexed SQLite database)
  • More accurate (AST-parsed, not regex)
  • More informative (includes signatures, docstrings, line ranges)

When to use Grep instead:

  • Searching for string literals, comments, or arbitrary text
  • Searching in non-code files (markdown, config, etc.)
  • Cross-file text pattern searches

Tool availability check: Before attempting to use MCP tools (mcp__plugin_context-tools_repo-map__*), check if .claude/repo-map.db exists:

  • If YES: Try the MCP tool. If it fails (not available), use sqlite3 fallback.
  • If NO: The project hasn't been indexed yet. Either wait for indexing or run /context-tools:repo-map to generate it.

Fallback order:

  1. Try MCP tool first
  2. If tool not found, use sqlite3 fallback to still answer the question
  3. Explain that session needs restart to load MCP server for future use

Real-World Usage Examples

Example 1: User asks "Can we compare against OSDI?"

Inefficient approach (DON'T DO THIS):

grep -r "setup_model\|setup_instance" jax_spice/devices/*.py

Problems: Slow, error-prone pattern matching, gets interrupted on large codebases.

Efficient approach (DO THIS):

mcp__plugin_context-tools_repo-map__search_symbols
pattern: "setup_*"

Result: Instant list of all setup_model, setup_instance, etc. with locations and signatures.

Example 2: User asks "How does the config loader work?"

Inefficient approach (DON'T DO THIS):

find . -name "*.py" -exec grep -l "class.*Config" {} \;

Efficient approach (DO THIS):

mcp__plugin_context-tools_repo-map__search_symbols
pattern: "*Config*"
kind: "class"

Then get the source:

mcp__plugin_context-tools_repo-map__get_symbol_content
name: "ConfigLoader"

Example 3: User asks "What functions are in utils.py?"

Inefficient approach (DON'T DO THIS):

grep "^def " src/utils.py

Efficient approach (DO THIS):

mcp__plugin_context-tools_repo-map__get_file_symbols
file: "src/utils.py"

Result: Complete list of all functions/classes with signatures and docstrings.

Example 4: Finding Rust enum variants (Real user case)

User needs to check if it's Phi or PhiNode in enum InstructionData.

Inefficient approach (DON'T DO THIS):

grep -n "enum InstructionData" openvaf-py/vendor/OpenVAF/openvaf/mir/src
grep -n "Phi" openvaf-py/vendor/OpenVAF/openvaf/mir/src/instructions.rs

Problems: Multiple searches, manual parsing, easy to miss correct variant.

Efficient approach (DO THIS):

mcp__plugin_context-tools_repo-map__search_symbols
pattern: "InstructionData"

mcp__plugin_context-tools_repo-map__get_symbol_content
name: "InstructionData"

Result: Complete enum with all variants visible, including PhiNode(_).

First Time Setup

IMPORTANT: If the user has just installed this plugin:

"I see you've installed the context-tools plugin. The MCP server should auto-configure on restart. After restarting Claude Code, run /mcp to verify the repo-map server is loaded.

If it doesn't load automatically, let me know and I can help troubleshoot using /context-tools:setup-mcp."

The MCP server auto-configures from the plugin manifest. Only if auto-config fails should you run /context-tools:setup-mcp for troubleshooting.

Included Components

Hooks

  • SessionStart: Generates project manifest and displays status
  • PreCompact: Refreshes context before compaction
  • SessionEnd: Cleanup operations

Note: Indexing is now handled by the MCP server itself (no PreToolUse hook needed).

MCP Server (repo-map)

Database Schema (.claude/repo-map.db):

symbols table columns:
- name (TEXT): Symbol name (function/class/method name)
- kind (TEXT): "function", "class", or "method"
- signature (TEXT): Full function/method signature with parameters and type hints
  Examples:
  - "extract_symbols_from_python(file_path: Path, relative_to: Path) -> list[Symbol]"
  - "analyze_files(files: list[Path], extractor, language: str, root: Path)"
- docstring (TEXT): First line of docstring or full docstring
- file_path (TEXT): Relative path from project root
- line_number (INTEGER): Start line (1-indexed)
- end_line_number (INTEGER): End line (1-indexed)
- parent (TEXT): For methods, the class name

metadata table (v0.7.0+):
- key (TEXT PRIMARY KEY): Metadata key
- value (TEXT): Metadata value
Keys:
- 'status': 'idle' | 'indexing' | 'completed' | 'failed'
- 'index_start_time': ISO8601 timestamp when indexing started
- 'last_indexed': ISO8601 timestamp when last completed
- 'symbol_count': Total symbols indexed (string)
- 'error_message': Error message if status='failed'

Indexing Status and Auto-Wait (v0.7.0+):

  • The MCP server tracks indexing status in the metadata table
  • Tools automatically wait (up to 60s) if indexing is in progress
  • Watchdog: Detects hung indexing (>10 minutes) and resets status to 'failed'
  • First Use: On first use in a new codebase, indexing starts automatically
  • Behavior: Most tools wait for completion, repo_map_status does not (use to check progress)

Available MCP Tools:

  • mcp__plugin_context-tools_repo-map__search_symbols - Search symbols by pattern (supports glob wildcards)
    • Returns: name, kind, signature, file_path, line_number, docstring, parent
    • AUTO-WAIT: If indexing is in progress, automatically waits up to 60s for completion
  • mcp__plugin_context-tools_repo-map__get_file_symbols - Get all symbols in a specific file
    • Returns: All symbols with full metadata
    • AUTO-WAIT: If indexing is in progress, automatically waits up to 60s for completion
  • mcp__plugin_context-tools_repo-map__get_symbol_content - Get full source code of a symbol by exact name
    • Returns: symbol metadata + content (source code text) + location
    • AUTO-WAIT: If indexing is in progress, automatically waits up to 60s for completion
  • mcp__plugin_context-tools_repo-map__list_files - List all indexed files, optionally filtered by glob pattern
    • Returns: list of file paths matching pattern (e.g., ".va", "psp103", "**/devices/")
    • MUCH faster than find/ls - queries pre-built index instead of filesystem traversal
    • AUTO-WAIT: If indexing is in progress, automatically waits up to 60s for completion
  • mcp__plugin_context-tools_repo-map__reindex_repo_map - Trigger manual reindex
    • Does NOT auto-wait (use to force reindex)
  • mcp__plugin_context-tools_repo-map__repo_map_status - Check indexing status and staleness
    • Returns: index_status (idle/indexing/completed/failed), symbol_count, last_indexed, indexing_duration_seconds
    • Does NOT auto-wait (use to check status)
  • mcp__plugin_context-tools_repo-map__wait_for_index - Explicitly wait for indexing to complete
    • Takes: timeout_seconds (default: 60)
    • Returns: success (bool), message (str)
    • Use when you want to wait longer than the default 60s auto-wait timeout

Fallback when MCP tools unavailable: Use sqlite3 directly on .claude/repo-map.db:

# Search symbols
sqlite3 .claude/repo-map.db "SELECT name, kind, signature, file_path, line_number FROM symbols WHERE name LIKE 'pattern%' LIMIT 20"

# Get symbol with source
sqlite3 .claude/repo-map.db "SELECT * FROM symbols WHERE name = 'function_name'"
# Then read file_path lines line_number to end_line_number

Slash Commands

  • /context-tools:repo-map - Regenerate repository map
  • /context-tools:manifest - Refresh project manifest
  • /context-tools:learnings - Manage project learnings
  • /context-tools:status - Show plugin status

Language Support

Language Parser File Extensions
Python AST .py
Rust tree-sitter-rust .rs
C++ tree-sitter-cpp .cpp, .cc, .cxx, .hpp, .h, .hxx