Skip to main content
Glama

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
NameRequiredDescriptionDefault
labNameYesName of the PortSwigger lab
labUrlNoURL of the lab
vulnerabilityTypeYesType of vulnerability
solutionYesSolution data with payloads and steps

Implementation Reference

  • 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); }
  • 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'],
  • 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);

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/telmon95/VulneraMCP'

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