training.import_portswigger
Import PortSwigger Academy lab solutions into VulneraMCP to enhance security training with structured vulnerability data, payloads, and remediation steps.
Instructions
Import training data from PortSwigger Academy lab solution
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| labName | Yes | Name of the PortSwigger lab | |
| labUrl | No | URL of the lab | |
| vulnerabilityType | Yes | Type of vulnerability | |
| solution | Yes | Solution data with payloads and steps |
Implementation Reference
- src/tools/training.ts:252-279 (handler)The main handler function for the 'training.import_portswigger' tool. It processes the provided PortSwigger lab solution, extracts payloads, and saves each one as training data using saveTrainingData.async (params: any): Promise<ToolResult> => { try { const solution = params.solution; const payloads = solution.payloads || []; const results: any[] = []; for (const payload of payloads) { const id = await saveTrainingData( 'portswigger', params.labName, params.vulnerabilityType, params.labUrl || '', payload.payload || payload, solution.successPattern || 'success', solution.failurePattern || 'error', { solution, labUrl: params.labUrl }, solution.score || 7 ); results.push(id); } return formatToolResult(true, { imported: results.length, ids: results, }); } catch (error: any) { return formatToolResult(false, null, error.message); }
- src/tools/training.ts:242-249 (schema)Input schema defining the expected parameters: labName, labUrl, vulnerabilityType, and solution object.type: 'object', properties: { labName: { type: 'string', description: 'Name of the PortSwigger lab' }, labUrl: { type: 'string', description: 'URL of the lab' }, vulnerabilityType: { type: 'string', description: 'Type of vulnerability' }, solution: { type: 'object', description: 'Solution data with payloads and steps' }, }, required: ['labName', 'vulnerabilityType', 'solution'],
- src/tools/training.ts:237-281 (registration)Registers the tool on the MCP server within the registerTrainingTools function.server.tool( 'training.import_portswigger', { description: 'Import training data from PortSwigger Academy lab solution', inputSchema: { type: 'object', properties: { labName: { type: 'string', description: 'Name of the PortSwigger lab' }, labUrl: { type: 'string', description: 'URL of the lab' }, vulnerabilityType: { type: 'string', description: 'Type of vulnerability' }, solution: { type: 'object', description: 'Solution data with payloads and steps' }, }, required: ['labName', 'vulnerabilityType', 'solution'], }, }, async (params: any): Promise<ToolResult> => { try { const solution = params.solution; const payloads = solution.payloads || []; const results: any[] = []; for (const payload of payloads) { const id = await saveTrainingData( 'portswigger', params.labName, params.vulnerabilityType, params.labUrl || '', payload.payload || payload, solution.successPattern || 'success', solution.failurePattern || 'error', { solution, labUrl: params.labUrl }, solution.score || 7 ); results.push(id); } return formatToolResult(true, { imported: results.length, ids: results, }); } catch (error: any) { return formatToolResult(false, null, error.message); } } );
- src/index.ts:47-47 (registration)Calls registerTrainingTools on the main MCP Server instance, which registers all training tools including 'training.import_portswigger'.registerTrainingTools(server);