feat: Update MCP scrape_codebase_tool with enhance-level support

- Add enhance_level parameter (0-3) for granular AI control
- Add skip_* parameters for feature control (skip_patterns, skip_test_examples, etc.)
- Remove deprecated --build-* flags (features are now ON by default)
- Adjust timeout based on enhance_level (10min base, up to 60min for level 3)
- Update documentation with examples

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
YusufKaraaslanSpyke
2026-01-30 14:43:46 +03:00
parent e953fc6276
commit 3abdf2d1f0

View File

@@ -441,8 +441,10 @@ async def scrape_codebase_tool(args: dict) -> list[TextContent]:
Analyze local codebase and extract code knowledge. Analyze local codebase and extract code knowledge.
Walks directory tree, analyzes code files, extracts signatures, Walks directory tree, analyzes code files, extracts signatures,
docstrings, and optionally generates API reference documentation docstrings, and generates API reference documentation, dependency graphs,
and dependency graphs. design patterns, test examples, and how-to guides.
All features are ON by default. Use skip_* parameters to disable specific features.
Args: Args:
args: Dictionary containing: args: Dictionary containing:
@@ -451,8 +453,17 @@ async def scrape_codebase_tool(args: dict) -> list[TextContent]:
- depth (str, optional): Analysis depth - surface, deep, full (default: deep) - depth (str, optional): Analysis depth - surface, deep, full (default: deep)
- languages (str, optional): Comma-separated languages (e.g., "Python,JavaScript,C++") - languages (str, optional): Comma-separated languages (e.g., "Python,JavaScript,C++")
- file_patterns (str, optional): Comma-separated file patterns (e.g., "*.py,src/**/*.js") - file_patterns (str, optional): Comma-separated file patterns (e.g., "*.py,src/**/*.js")
- build_api_reference (bool, optional): Generate API reference markdown (default: False) - enhance_level (int, optional): AI enhancement level 0-3 (default: 0)
- build_dependency_graph (bool, optional): Generate dependency graph and detect circular dependencies (default: False) - 0: No AI enhancement
- 1: SKILL.md enhancement only
- 2: SKILL.md + Architecture + Config enhancement
- 3: Full enhancement (patterns, tests, config, architecture, SKILL.md)
- skip_api_reference (bool, optional): Skip API reference generation (default: False)
- skip_dependency_graph (bool, optional): Skip dependency graph (default: False)
- skip_patterns (bool, optional): Skip design pattern detection (default: False)
- skip_test_examples (bool, optional): Skip test example extraction (default: False)
- skip_how_to_guides (bool, optional): Skip how-to guide generation (default: False)
- skip_config_patterns (bool, optional): Skip config pattern extraction (default: False)
Returns: Returns:
List[TextContent]: Tool execution results List[TextContent]: Tool execution results
@@ -461,8 +472,12 @@ async def scrape_codebase_tool(args: dict) -> list[TextContent]:
scrape_codebase( scrape_codebase(
directory="/path/to/repo", directory="/path/to/repo",
depth="deep", depth="deep",
build_api_reference=True, enhance_level=1
build_dependency_graph=True )
scrape_codebase(
directory="/path/to/repo",
enhance_level=2,
skip_patterns=True
) )
""" """
directory = args.get("directory") directory = args.get("directory")
@@ -473,8 +488,15 @@ async def scrape_codebase_tool(args: dict) -> list[TextContent]:
depth = args.get("depth", "deep") depth = args.get("depth", "deep")
languages = args.get("languages", "") languages = args.get("languages", "")
file_patterns = args.get("file_patterns", "") file_patterns = args.get("file_patterns", "")
build_api_reference = args.get("build_api_reference", False) enhance_level = args.get("enhance_level", 0)
build_dependency_graph = args.get("build_dependency_graph", False)
# Skip flags (features are ON by default)
skip_api_reference = args.get("skip_api_reference", False)
skip_dependency_graph = args.get("skip_dependency_graph", False)
skip_patterns = args.get("skip_patterns", False)
skip_test_examples = args.get("skip_test_examples", False)
skip_how_to_guides = args.get("skip_how_to_guides", False)
skip_config_patterns = args.get("skip_config_patterns", False)
# Build command # Build command
cmd = [sys.executable, "-m", "skill_seekers.cli.codebase_scraper"] cmd = [sys.executable, "-m", "skill_seekers.cli.codebase_scraper"]
@@ -488,15 +510,36 @@ async def scrape_codebase_tool(args: dict) -> list[TextContent]:
cmd.extend(["--languages", languages]) cmd.extend(["--languages", languages])
if file_patterns: if file_patterns:
cmd.extend(["--file-patterns", file_patterns]) cmd.extend(["--file-patterns", file_patterns])
if build_api_reference: if enhance_level > 0:
cmd.append("--build-api-reference") cmd.extend(["--enhance-level", str(enhance_level)])
if build_dependency_graph:
cmd.append("--build-dependency-graph")
timeout = 600 # 10 minutes for codebase analysis # Skip flags
if skip_api_reference:
cmd.append("--skip-api-reference")
if skip_dependency_graph:
cmd.append("--skip-dependency-graph")
if skip_patterns:
cmd.append("--skip-patterns")
if skip_test_examples:
cmd.append("--skip-test-examples")
if skip_how_to_guides:
cmd.append("--skip-how-to-guides")
if skip_config_patterns:
cmd.append("--skip-config-patterns")
# Adjust timeout based on enhance_level
timeout = 600 # 10 minutes base
if enhance_level >= 2:
timeout = 1200 # 20 minutes with AI enhancement
if enhance_level >= 3:
timeout = 3600 # 60 minutes for full enhancement
level_names = {0: "off", 1: "SKILL.md only", 2: "standard", 3: "full"}
progress_msg = "🔍 Analyzing local codebase...\n" progress_msg = "🔍 Analyzing local codebase...\n"
progress_msg += f"📁 Directory: {directory}\n" progress_msg += f"📁 Directory: {directory}\n"
progress_msg += f"📊 Depth: {depth}\n"
if enhance_level > 0:
progress_msg += f"🤖 AI Enhancement: Level {enhance_level} ({level_names.get(enhance_level, 'unknown')})\n"
progress_msg += f"⏱️ Maximum time: {timeout // 60} minutes\n\n" progress_msg += f"⏱️ Maximum time: {timeout // 60} minutes\n\n"
stdout, stderr, returncode = run_subprocess_with_streaming(cmd, timeout=timeout) stdout, stderr, returncode = run_subprocess_with_streaming(cmd, timeout=timeout)