burp_start
Launch Burp Suite Professional with API enabled for automated security testing, supporting headless operation and custom project configurations.
Instructions
Start Burp Suite Professional with API enabled
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| headless | No | Run in headless mode (default: true) | |
| jar_path | No | Path to burpsuite_pro.jar (optional, auto-detected) | |
| memory | No | Java memory allocation (default: 2g) | |
| project_file | No | Burp project file path (optional) |
Input Schema (JSON Schema)
{
"properties": {
"headless": {
"description": "Run in headless mode (default: true)",
"type": "boolean"
},
"jar_path": {
"description": "Path to burpsuite_pro.jar (optional, auto-detected)",
"type": "string"
},
"memory": {
"description": "Java memory allocation (default: 2g)",
"type": "string"
},
"project_file": {
"description": "Burp project file path (optional)",
"type": "string"
}
},
"required": [],
"type": "object"
}
Implementation Reference
- Core handler function that spawns the Burp Suite Java process with configured options, waits for startup, and returns status information.async startBurpSuite(): Promise<ScanResult> { try { console.error('๐ Starting Burp Suite...'); if (!this.config.jar_path || !fs.existsSync(this.config.jar_path)) { throw new Error('Burp Suite JAR file not found. Please install Burp Suite Professional and set jar_path'); } // Prepare user options file for headless mode let userOptionsFile = ''; if (this.config.headless) { userOptionsFile = await this.createUserOptionsFile(); } // Build command const javaArgs = [ `-Xmx${this.config.memory}`, '-Djava.awt.headless=true', '-jar', this.config.jar_path, '--disable-extensions', `--collaborator-server`, `--collaborator-location-all` ]; if (this.config.headless) { javaArgs.push('--unpause-spider-and-scanner'); javaArgs.push(`--user-config-file=${userOptionsFile}`); } if (this.config.project_file) { javaArgs.push(`--project-file=${this.config.project_file}`); } console.error(`Executing: java ${javaArgs.join(' ')}`); // Spawn Burp Suite process this.burpProcess = spawn('java', javaArgs, { stdio: ['ignore', 'pipe', 'pipe'], detached: false }); // Wait for Burp to start up await this.waitForBurpStartup(); return { target: 'burpsuite', timestamp: new Date().toISOString(), tool: 'burpsuite_startup', results: { status: 'started', pid: this.burpProcess.pid, api_url: this.apiBaseUrl, proxy_port: this.config.proxy_port, config: this.config }, status: 'success' }; } catch (error) { return { target: 'burpsuite', timestamp: new Date().toISOString(), tool: 'burpsuite_startup', results: {}, status: 'error', error: error instanceof Error ? error.message : String(error) }; } }
- src/index.ts:406-418 (registration)Tool registration in the ListTools response, defining name, description, and input schema.name: "burp_start", description: "Start Burp Suite Professional with API enabled", inputSchema: { type: "object", properties: { jar_path: { type: "string", description: "Path to burpsuite_pro.jar (optional, auto-detected)" }, project_file: { type: "string", description: "Burp project file path (optional)" }, headless: { type: "boolean", description: "Run in headless mode (default: true)" }, memory: { type: "string", description: "Java memory allocation (default: 2g)" } }, required: [] } },
- src/index.ts:583-594 (handler)Dispatch handler in CallToolRequest that optionally recreates BurpSuiteIntegration instance with args and calls startBurpSuite().case "burp_start": // Create new instance with custom config if provided if (args.jar_path || args.project_file || args.headless !== undefined || args.memory) { this.burpSuite = new BurpSuiteIntegration({ jar_path: args.jar_path, project_file: args.project_file, headless: args.headless, memory: args.memory }); } return respond(await this.burpSuite.startBurpSuite());
- Helper method that polls the Burp Suite API endpoint until it's ready after process startup.private async waitForBurpStartup(): Promise<void> { const maxAttempts = 60; // 5 minutes let attempts = 0; while (attempts < maxAttempts) { try { await axios.get(`${this.apiBaseUrl}/v0.1/`, { timeout: 5000 }); console.error('โ Burp Suite API is ready'); return; } catch (error) { attempts++; console.error(`Waiting for Burp startup... (${attempts}/${maxAttempts})`); await new Promise(resolve => setTimeout(resolve, 5000)); } } throw new Error('Burp Suite failed to start within timeout period'); }
- TypeScript interface defining the configuration schema for BurpSuiteIntegration, matching the tool inputSchema.export interface BurpSuiteConfig { jar_path?: string; project_file?: string; api_port?: number; proxy_port?: number; headless?: boolean; user_options?: string; memory?: string; }