Dependency Analyzer¶
Map both internal and external dependencies for a project across multiple languages. Answers: "What does this depend on?" and "What depends on what internally?"
Focuses on external/third-party dependency enumeration, internal import graphs, and identifying most-imported/importing modules.
Usage¶
CLI¶
python dependency_analyzer.py <project_path>
python dependency_analyzer.py <project_path> --output deps.json
python dependency_analyzer.py <project_path> --markdown
python dependency_analyzer.py <project_path> --json
MCP¶
Returns dependency analysis as JSON.
Example Output¶
Python Project¶
{
"languages": ["python"],
"summary": {
"total_modules": 24,
"third_party_deps": 18,
"stdlib_deps": 14,
"internal_imports": 87
},
"python": {
"third_party": {
"fastapi": {"count": 3, "imported_by": ["src/api/handler.py", "src/api/router.py", "src/main.py"]},
"pydantic": {"count": 5, "imported_by": ["src/models", "src/config.py"]},
"sqlalchemy": {"count": 4, "imported_by": ["src/db/models.py", "src/db/schema.py"]},
"pytest": {"count": 2, "imported_by": ["tests/test_api.py"]},
"anthropic": {"count": 2, "imported_by": ["src/ai/client.py"]}
},
"stdlib": {
"typing": {"count": 8, "imported_by": ["src/models", "src/api/handler.py"]},
"dataclasses": {"count": 3, "imported_by": ["src/config.py"]},
"asyncio": {"count": 2, "imported_by": ["src/main.py"]},
"json": {"count": 3, "imported_by": ["src/api/router.py"]},
"pathlib": {"count": 2, "imported_by": ["src/utils.py"]}
},
"internal": {
"src.core": {
"imports": ["src.api", "src.db"],
"imported_by": ["src.api", "src.main"],
"import_count": 12
},
"src.api": {
"imports": ["src.core", "src.auth"],
"imported_by": ["src.main"],
"import_count": 8
},
"src.db": {
"imports": ["src.models"],
"imported_by": ["src.core"],
"import_count": 6
}
},
"most_imported": [
{"module": "src.core", "import_count": 12},
{"module": "src.api", "import_count": 8},
{"module": "src.models", "import_count": 7}
],
"most_importing": [
{"module": "src.main", "import_count": 6},
{"module": "src.api.handler", "import_count": 4},
{"module": "src.core.engine", "import_count": 4}
]
}
}
JavaScript/TypeScript Project¶
{
"languages": ["javascript", "typescript"],
"summary": {
"total_files": 45,
"declared_dependencies": 28,
"used_dependencies": 22,
"unused_declared": 6,
"missing_dependencies": 0
},
"javascript": {
"declared": {
"react": {"version": "^18.2.0", "in_devDeps": false},
"next": {"version": "^14.0.0", "in_devDeps": false},
"typescript": {"version": "^5.2.0", "in_devDeps": true},
"jest": {"version": "^29.0.0", "in_devDeps": true},
"tailwindcss": {"version": "^3.3.0", "in_devDeps": false}
},
"used": {
"react": {"count": 12, "files": ["src/components", "src/pages"]},
"next": {"count": 5, "files": ["src/pages", "src/app.tsx"]},
"react-router": {"count": 8, "files": ["src/navigation"]},
"axios": {"count": 4, "files": ["src/api"]},
"lodash": {"count": 6, "files": ["src/utils"]}
},
"unused_declared": [
"underscore",
"moment",
"debug",
"winston"
],
"missing_dependencies": [
{
"module": "react-router",
"imported_by": ["src/navigation", "src/pages"],
"declared": false
}
]
}
}
Supported Languages¶
- Python: Third-party, stdlib, and internal module analysis
- JavaScript/TypeScript: Declared vs. used analysis, devDependencies tracking
- Rust: External crates and internal modules
- Go: External packages and local imports
Options¶
| Flag | Type | Default | Description |
|---|---|---|---|
project_path |
positional | required | Path to project root |
--output, -o |
string | stdout | Output file path |
--markdown, -m |
flag | false | Output as Markdown instead of JSON |
--json |
flag | false | Force JSON output |