diff --git a/src/skill_seekers/mcp/server_fastmcp.py b/src/skill_seekers/mcp/server_fastmcp.py index bd0264c..3fce1b6 100644 --- a/src/skill_seekers/mcp/server_fastmcp.py +++ b/src/skill_seekers/mcp/server_fastmcp.py @@ -396,7 +396,7 @@ async def scrape_pdf( @safe_tool_decorator( - description="Analyze local codebase and extract code knowledge. Walks directory tree, analyzes code files, extracts signatures, docstrings, and optionally generates API reference documentation." + description="Analyze local codebase and extract code knowledge. Walks directory tree, analyzes code files, extracts signatures, docstrings, and optionally generates API reference documentation and dependency graphs." ) async def scrape_codebase( directory: str, @@ -405,6 +405,7 @@ async def scrape_codebase( languages: str = "", file_patterns: str = "", build_api_reference: bool = False, + build_dependency_graph: bool = False, ) -> str: """ Analyze local codebase and extract code knowledge. @@ -416,6 +417,7 @@ async def scrape_codebase( languages: Comma-separated languages to analyze (e.g., "Python,JavaScript,C++") file_patterns: Comma-separated file patterns (e.g., "*.py,src/**/*.js") build_api_reference: Generate API reference markdown (default: false) + build_dependency_graph: Generate dependency graph and detect circular dependencies (default: false) Returns: Codebase analysis results with file paths. @@ -427,6 +429,7 @@ async def scrape_codebase( "languages": languages, "file_patterns": file_patterns, "build_api_reference": build_api_reference, + "build_dependency_graph": build_dependency_graph, } result = await scrape_codebase_impl(args) diff --git a/src/skill_seekers/mcp/tools/scraping_tools.py b/src/skill_seekers/mcp/tools/scraping_tools.py index 495d8f0..f184204 100644 --- a/src/skill_seekers/mcp/tools/scraping_tools.py +++ b/src/skill_seekers/mcp/tools/scraping_tools.py @@ -438,7 +438,8 @@ async def scrape_codebase_tool(args: dict) -> List[TextContent]: Analyze local codebase and extract code knowledge. Walks directory tree, analyzes code files, extracts signatures, - docstrings, and optionally generates API reference documentation. + docstrings, and optionally generates API reference documentation + and dependency graphs. Args: args: Dictionary containing: @@ -448,6 +449,7 @@ async def scrape_codebase_tool(args: dict) -> List[TextContent]: - languages (str, optional): Comma-separated languages (e.g., "Python,JavaScript,C++") - file_patterns (str, optional): Comma-separated file patterns (e.g., "*.py,src/**/*.js") - build_api_reference (bool, optional): Generate API reference markdown (default: False) + - build_dependency_graph (bool, optional): Generate dependency graph and detect circular dependencies (default: False) Returns: List[TextContent]: Tool execution results @@ -456,7 +458,8 @@ async def scrape_codebase_tool(args: dict) -> List[TextContent]: scrape_codebase( directory="/path/to/repo", depth="deep", - build_api_reference=True + build_api_reference=True, + build_dependency_graph=True ) """ directory = args.get("directory") @@ -468,6 +471,7 @@ async def scrape_codebase_tool(args: dict) -> List[TextContent]: languages = args.get("languages", "") file_patterns = args.get("file_patterns", "") build_api_reference = args.get("build_api_reference", False) + build_dependency_graph = args.get("build_dependency_graph", False) # Build command cmd = [sys.executable, "-m", "skill_seekers.cli.codebase_scraper"] @@ -483,6 +487,8 @@ async def scrape_codebase_tool(args: dict) -> List[TextContent]: cmd.extend(["--file-patterns", file_patterns]) if build_api_reference: cmd.append("--build-api-reference") + if build_dependency_graph: + cmd.append("--build-dependency-graph") timeout = 600 # 10 minutes for codebase analysis