UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

188 lines (137 loc) 5.73 kB
# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview mcp-debugger is a Model Context Protocol (MCP) server that provides step-through debugging capabilities for AI agents. It acts as a bridge between MCP clients (like Claude) and debug adapters (currently debugpy for Python), enabling structured debugging operations through JSON-based tool calls. ## Key Commands ### Building and Development ```bash # Install dependencies npm install # Build the project (required before running) npm run build # Clean build npm run build:clean # Development mode with watch npm run dev # Start the server (after building) npm start # or node dist/index.js # Run with specific transport modes node dist/index.js # STDIO mode (default) node dist/index.js --transport tcp --port 6111 # TCP mode node dist/index.js --transport sse --port 3000 # SSE mode ``` ### Testing ```bash # Run all tests npm test # Run specific test suites npm run test:unit # Unit tests only npm run test:integration # Integration tests only npm run test:e2e # End-to-end tests only # Run tests with coverage npm run test:coverage npm run test:coverage:summary # Show coverage summary # Run tests in watch mode npm run test:watch # Run a specific test file npx vitest run tests/unit/session/session-manager.test.ts # Run smoke tests for quick validation npm run test:e2e:smoke ``` ### Code Quality ```bash # Lint code npm run lint # Fix linting issues automatically npm run lint:fix # Check for personal paths (pre-commit hook) npm run check:personal-paths npm run check:all-personal-paths # Check all files ``` ### Docker ```bash # Build Docker image npm run docker-build # or docker build -t mcp-debugger:local . # Test container locally npm run test:e2e:container # Run container docker run -v $(pwd):/workspace mcp-debugger:local ``` ### GitHub Actions Testing (Act) ```bash # Test GitHub Actions locally using Act npm run act:check # Verify Act is installed npm run act:lint # Run lint job npm run act:test # Run test job (Ubuntu) npm run act:test:all # Run all test jobs npm run act:full # Run full CI workflow ``` ## Architecture Overview The codebase follows a layered architecture with dependency injection: ### Core Components 1. **MCP Server Layer** (`src/server.ts`, `src/index.ts`) - Entry point for MCP protocol communication - Handles tool registration and routing - Supports STDIO, TCP, and SSE transport modes 2. **SessionManager** (`src/session/session-manager.ts`) - Central orchestrator for debug sessions - Manages session lifecycle and state - Coordinates ProxyManager instances (one per session) - Handles breakpoint management and queuing 3. **ProxyManager** (`src/proxy/proxy-manager.ts`) - Manages communication with debug proxy process - Spawns proxy worker in separate process - Implements typed event system for DAP events - Handles request/response correlation with timeouts 4. **DAP Proxy System** (`src/proxy/dap-proxy-*.ts`) - **ProxyCore**: Pure business logic, message processing - **ProxyWorker**: Core worker handling debugging operations - **ProcessManager**: Manages debugpy adapter lifecycle - Implements full Debug Adapter Protocol (DAP) communication ### Key Patterns - **Dependency Injection**: All major components use constructor injection via interfaces - **Factory Pattern**: `ProxyManagerFactory`, `SessionStoreFactory` for testability - **Event-Driven**: Extensive EventEmitter usage for async communication - **Process Isolation**: Each debug session runs in separate process for stability - **Error Boundaries**: Centralized error handling with user-friendly messages ### Data Flow ``` MCP Client → MCP Server → SessionManager → ProxyManager → ProxyWorker → debugpy → Python Script ``` ### State Management Sessions progress through states: IDLE → INITIALIZING → READY → RUNNING → PAUSED → TERMINATED ## Important Files and Directories - `src/server.ts` - Main MCP server implementation - `src/session/session-manager.ts` - Core session orchestration - `src/proxy/proxy-manager.ts` - Proxy process management - `src/proxy/dap-proxy-worker.ts` - Debug adapter protocol implementation - `src/utils/error-messages.ts` - Centralized error messages - `tests/` - Comprehensive test suite (unit, integration, e2e) - `examples/` - Example Python scripts for debugging - `docs/architecture/` - Detailed architecture documentation ## Development Guidelines 1. **TypeScript Strict Mode**: All code must pass TypeScript strict mode checks 2. **Test Coverage**: Maintain >90% test coverage 3. **Error Handling**: Use centralized error messages from `error-messages.ts` 4. **Logging**: Use Winston logger with appropriate log levels 5. **Async Operations**: All DAP operations are async with timeouts 6. **Process Cleanup**: Always ensure proper cleanup of spawned processes ## Testing Approach The project uses Vitest with three test levels: - **Unit Tests**: Test components in isolation with mocks - **Integration Tests**: Test component interactions - **E2E Tests**: Test full debugging workflows with real debugpy ## Common Debugging Scenarios When debugging issues: 1. Enable debug logging: `DEBUG=* node dist/index.js` 2. Check proxy process output in logs 3. Verify debugpy is installed: `python -m debugpy --version` 4. Use `--dry-run` flag to test configuration without starting debug session ## Python Requirements - Python 3.7+ must be installed - debugpy must be installed: `pip install debugpy` - The system will auto-detect Python path or use `PYTHON_PATH` env var