Skip to main content
Glama
multi-project-management.md11.3 kB
# Multi-Project Management CodeRAG supports managing multiple codebases in a single Neo4J database, enabling powerful cross-project analysis and portfolio management capabilities. ## Understanding Multi-Project Architecture CodeRAG uses a **project isolation strategy** where: - Each scanned codebase gets a unique `project_id` - All nodes and relationships are tagged with their `project_id` - Projects are isolated by default but can enable cross-project analysis - Each project maintains separate quality metrics and statistics ## Project Identification & Auto-Detection CodeRAG now automatically extracts project information from build files and metadata: ```bash # Auto-detects project name from package.json, pom.xml, etc. npm run scan /path/to/my-react-app # Detects: TypeScript, React framework, project name "my-react-app" v1.2.0 npm run scan /path/to/spring-backend # Detects: Java, Spring Boot framework, project name from pom.xml npm run scan /path/to/python-service # Detects: Python, Django framework, project name from setup.py/pyproject.toml ``` **Project Detection Features:** - **Build File Analysis**: Extracts metadata from package.json, pom.xml, build.gradle, setup.py, pyproject.toml - **Framework Detection**: Identifies React, Spring Boot, Django, Express, etc. from dependencies - **Multi-Language Support**: Handles projects with multiple languages (frontend + backend) - **Sub-Project Detection**: Automatically discovers mono-repositories with multiple sub-projects - **Automatic Naming**: Uses project name from build files, falls back to directory name - **Version Tracking**: Extracts version information from build files ## Managing Multiple Projects ### 1. Scanning Multiple Projects with Auto-Detection ```bash # Scan first project (auto-detects TypeScript/React) npm run scan /path/to/react-frontend -- --clear-all # Output: ✅ TypeScript project detected, Framework: React, Name: "my-frontend" v2.1.0 # Scan backend (auto-detects Java/Spring Boot) npm run scan /path/to/spring-backend # Output: ✅ Java project detected, Framework: Spring Boot, Name: "api-service" v1.0.0 # Scan Python service (auto-detects Python/Django) npm run scan /path/to/python-api # Output: ✅ Python project detected, Framework: Django, Name: "data-processor" v0.3.2 # Scan mono-repository (auto-detects multiple languages) npm run scan /path/to/fullstack-monorepo # Output: 🏗️ Mono-repository detected: TypeScript (frontend), Java (backend), Python (scripts) # Re-scan with updated code (preserves project metadata) npm run scan /path/to/react-frontend -- --clear-graph ``` ### 2. Listing All Projects Use the `list_projects` tool to discover and manage your projects: **Basic Project List:** ```json { "name": "list_projects" } ``` **Enhanced List with Statistics:** ```json { "name": "list_projects", "arguments": { "include_stats": true, "sort_by": "entity_count", "limit": 10 } } ``` **Parameters:** - `include_stats` (boolean): Include entity counts and relationship statistics - `sort_by` (string): Sort by `name`, `created_at`, `updated_at`, or `entity_count` - `limit` (number): Maximum projects to return (1-1000, default: 100) **Example Response:** ```json { "projects": [ { "project_id": "my-awesome-app", "name": "My Awesome App", "description": "Scanned from /path/to/my-awesome-app", "created_at": "2024-01-15T10:30:00.000Z", "updated_at": "2024-01-15T10:35:00.000Z", "stats": { "entity_count": 127, "relationship_count": 89, "entity_types": ["class", "method", "interface", "field"], "relationship_types": ["CONTAINS", "IMPLEMENTS", "EXTENDS"] } } ], "total_count": 1, "summary": { "total_projects": 1, "total_entities": 127, "total_relationships": 89 } } ``` ## Project-Aware Tool Usage Most CodeRAG tools support project filtering to focus analysis on specific codebases: ### Explicit Project Specification When you have multiple projects, you can specify which project to analyze: ```bash # Analyze specific project mcp call get_project_summary --arguments '{"project_id": "my-awesome-app"}' # Find architectural issues in specific project mcp call find_architectural_issues --arguments '{"project_id": "legacy-system"}' # Calculate metrics for class in specific project mcp call calculate_ck_metrics --arguments '{ "class_id": "com.example.UserService", "project_id": "my-awesome-app" }' ``` ### Default Project Behavior When `project_id` is not specified: - **Single Project Database**: Tools automatically use the only project - **Multi-Project Database**: Tools may return results across all projects or prompt for project specification - **Current Context**: Some tools remember the last specified project ## Multi-Project Workflows ### 1. Portfolio Analysis Compare multiple projects side-by-side: ```bash # Get overview of all projects mcp call list_projects --arguments '{"include_stats": true, "sort_by": "entity_count"}' # Compare quality across projects for project in project-a project-b project-c; do mcp call get_project_summary --arguments "{\"project_id\": \"$project\"}" done ``` ### 2. Migration Analysis When modernizing legacy systems: ```bash # Scan legacy system npm run scan /path/to/legacy-system -- --clear-graph # Scan new system npm run scan /path/to/new-system # Compare architectures mcp call find_architectural_issues --arguments '{"project_id": "legacy-system"}' mcp call find_architectural_issues --arguments '{"project_id": "new-system"}' ``` ### 3. Microservices Analysis Analyze microservices architecture: ```bash # Scan each service npm run scan /path/to/user-service -- --clear-graph npm run scan /path/to/order-service npm run scan /path/to/payment-service npm run scan /path/to/notification-service # Analyze coupling between services mcp call list_projects --arguments '{"include_stats": true}' # Find shared patterns mcp call search_nodes --arguments '{"search_term": "Controller"}' ``` ## Cross-Project Analysis When enabled, CodeRAG can analyze patterns across multiple projects: ### Finding Common Patterns ```bash # Find all classes implementing specific interface across projects mcp call find_classes_implementing_interface --arguments '{ "interface_name": "Repository" // Omit project_id for cross-project search }' # Search for naming patterns across all projects mcp call search_nodes --arguments '{ "search_term": "Service", "type": "class" }' ``` ### Portfolio Quality Assessment ```bash # Get quality summary for all projects mcp call list_projects --arguments '{"include_stats": true, "sort_by": "entity_count"}' # Identify projects needing attention for project in $(mcp call list_projects | jq -r '.projects[].project_id'); do echo "=== Analysis for $project ===" mcp call find_architectural_issues --arguments "{\"project_id\": \"$project\"}" done ``` ## Project Management Best Practices ### 1. Naming Conventions **Good project directory names:** - `user-management-api` - `react-frontend` - `payment-processor` - `legacy-monolith` **Avoid:** - Generic names like `app`, `system`, `code` - Version numbers like `v1`, `v2` (use git tags instead) - Special characters that don't translate well ### 2. Scanning Strategy **Clean Slate Approach:** ```bash # Clear database and start fresh npm run scan /path/to/main-project -- --clear-graph npm run scan /path/to/other-projects... ``` **Incremental Approach:** ```bash # Add projects one by one npm run scan /path/to/new-project # Preserves existing projects ``` **Update Existing Project:** ```bash # Re-scan with same project name to update npm run scan /path/to/existing-project -- --clear-existing ``` ### 3. Project Lifecycle Management **Regular Updates:** - Re-scan projects after major changes - Monitor quality trends over time - Archive old project versions **Quality Gates:** - Set quality thresholds per project type - Monitor architectural drift - Track technical debt accumulation ## Common Multi-Project Scenarios ### Scenario 1: Comparing Frontend Frameworks ```bash # Scan different implementations npm run scan /path/to/react-app npm run scan /path/to/vue-app npm run scan /path/to/angular-app # Compare complexity mcp call list_projects --arguments '{"include_stats": true, "sort_by": "entity_count"}' ``` ### Scenario 2: Legacy Migration Tracking ```bash # Baseline legacy system npm run scan /path/to/legacy-monolith -- --clear-graph # Track new microservices npm run scan /path/to/user-service npm run scan /path/to/order-service # Monitor progress mcp call get_project_summary --arguments '{"project_id": "legacy-monolith"}' ``` ### Scenario 3: Multi-Language Portfolio with Auto-Detection ```bash # Automatically detect and scan different language projects npm run scan /path/to/java-backend # Output: ✅ Java project detected, Framework: Spring Boot, Build: Maven npm run scan /path/to/python-ml-service # Output: ✅ Python project detected, Frameworks: FastAPI, scikit-learn, Build: Poetry npm run scan /path/to/typescript-frontend # Output: ✅ TypeScript project detected, Framework: Next.js, Build: npm # Compare frameworks and architectural patterns across languages mcp call find_architectural_issues # Cross-project analysis mcp call list_projects --arguments '{"include_stats": true}' # Shows detected frameworks, languages, and quality metrics for each project ``` ## Troubleshooting Multi-Project Issues ### Issue: Duplicate project IDs - **Solution**: Rename project directories or use different scan paths - **Workaround**: Clear specific project before re-scanning ### Issue: Can't find specific project - **Check**: Use `list_projects` to see available project IDs - **Verify**: Project was scanned successfully - **Confirm**: Correct spelling and case sensitivity ### Issue: Cross-project analysis not working - **Check**: Omit `project_id` parameter for cross-project tools - **Verify**: Database contains multiple projects - **Confirm**: Tools support cross-project analysis mode ## Database Schema for Multi-Project ### Project Isolation All nodes include a `project_id` property: ```cypher // Example node structure CREATE (c:Class { id: "com.example.UserService", name: "UserService", project_id: "my-awesome-app", package: "com.example", // ... other properties }) ``` ### Project Context Nodes ```cypher // ProjectContext node stores project metadata CREATE (p:ProjectContext { project_id: "my-awesome-app", name: "My Awesome App", description: "Scanned from /path/to/my-awesome-app", created_at: datetime(), updated_at: datetime(), languages: ["typescript", "javascript"], total_entities: 127, total_relationships: 89 }) ``` ### Optimized Queries ```cypher // Project-aware queries use project_id in WHERE clauses MATCH (c:Class) WHERE c.project_id = $project_id RETURN c // Cross-project queries omit project_id filtering MATCH (c:Class) WHERE c.name CONTAINS $search_term RETURN c.project_id, c.name ``` ## Next Steps - [Available Tools](available-tools.md) - Explore project-aware analysis tools - [Quality Metrics](quality-metrics.md) - Understand project-specific metrics - [MCP Prompts Guide](mcp-prompts.md) - Use guided prompts for multi-project analysis

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JonnoC/CodeRAG'

If you have feedback or need assistance with the MCP directory API, please join our Discord server