naftiko: 1.0.0-alpha2 info: label: PDCP API — templates description: 'PDCP API — templates. 16 operations. Lead operation: Get Template List. Self-contained Naftiko capability covering one Nuclei business surface.' tags: - Nuclei - templates created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: NUCLEI_API_KEY: NUCLEI_API_KEY capability: consumes: - type: http namespace: nuclei-templates baseUri: https://api.projectdiscovery.io description: PDCP API — templates business capability. Self-contained, no shared references. resources: - name: v1-template path: /v1/template operations: - name: getv1templates method: GET description: Get Template List outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: offset in: query type: integer - name: limit in: query type: integer - name: fields in: query type: string - name: postv1template method: POST description: Create Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: filename in: query type: string description: filename for template - name: dir in: query type: string description: directories for template - name: body in: body type: object description: Request body (JSON). required: false - name: patchv1template method: PATCH description: Update Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: body in: body type: object description: Request body (JSON). required: false - name: v1-template-ai path: /v1/template/ai operations: - name: postv1templateai method: POST description: Generate AI Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: body in: body type: object description: Request body (JSON). required: false - name: v1-template-early path: /v1/template/early operations: - name: getv1earlytemplates method: GET description: Get Early Template List outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: offset in: query type: integer - name: limit in: query type: integer - name: fields in: query type: string - name: v1-template-early-id path: /v1/template/early/{id} operations: - name: getv1earlytemplatesid method: GET description: Get Early Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: v1-template-github path: /v1/template/github operations: - name: getv1githubtemplates method: GET description: Get Github Template List outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: offset in: query type: integer - name: limit in: query type: integer - name: fields in: query type: string - name: v1-template-github-id path: /v1/template/github/{id} operations: - name: getv1githubtemplatesid method: GET description: Get Github Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: body in: body type: object description: Request body (JSON). required: false - name: v1-template-public path: /v1/template/public operations: - name: getv1templatepublic method: GET description: Get Public Template List outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: offset in: query type: integer description: Pagination offset (no. of results to skip) - name: limit in: query type: integer description: Pagination limit (max no. of results in response) - name: fields in: query type: string description: template data fields - name: v1-template-public-template_id path: /v1/template/public/{template_id} operations: - name: getv1publictemplatedata method: GET description: Get Public Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: fields in: query type: string description: template data fields - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: v1-template-share path: /v1/template/share operations: - name: getv1templateshare method: GET description: Get Shared Template List outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: fields in: query type: string - name: limit in: query type: integer description: Limit The numbers of items to return - name: offset in: query type: integer description: Offset The numbers of items to skip - name: sort_asc in: query type: string description: SortAsc Sort results in ascending order (CSV field names) - name: sort_desc in: query type: string description: SortDesc Sort results in descending order (CSV field names) - name: postv1templateshare method: POST description: Share Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: body in: body type: object description: Request body (JSON). required: false - name: v1-template-share-template_id path: /v1/template/share/{template_id} operations: - name: getv1templatesharetemplateid method: GET description: Get Shared Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: fields in: query type: string description: get selected fields e.g. name,template_id,severity, etc - name: body in: body type: object description: Request body (JSON). required: false - name: v1-template-stats path: /v1/template/stats operations: - name: getv1templatestats method: GET description: Get Public Template Stats outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: limit in: query type: integer description: Limit The numbers of items to return - name: offset in: query type: integer description: Offset The numbers of items to skip - name: fields in: query type: string - name: sort_asc in: query type: string description: SortAsc Sort results in ascending order (CSV field names) - name: sort_desc in: query type: string description: SortDesc Sort results in descending order (CSV field names) - name: q in: query type: string - name: highlight in: query type: boolean description: Highlight Whether to highlight the search results - name: v1-template-template_id path: /v1/template/{template_id} operations: - name: getv1templatetid method: GET description: Get Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' - name: deletev1templatetemplateid method: DELETE description: Delete Template outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: X-Team-Id in: header type: string description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team' authentication: type: apikey key: X-API-Key value: '{{env.NUCLEI_API_KEY}}' placement: header exposes: - type: rest namespace: nuclei-templates-rest port: 8080 description: REST adapter for PDCP API — templates. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/v1/template name: v1-template description: REST surface for v1-template. operations: - method: GET name: getv1templates description: Get Template List call: nuclei-templates.getv1templates with: X-Team-Id: rest.X-Team-Id offset: rest.offset limit: rest.limit fields: rest.fields outputParameters: - type: object mapping: $. - method: POST name: postv1template description: Create Template call: nuclei-templates.postv1template with: X-Team-Id: rest.X-Team-Id filename: rest.filename dir: rest.dir body: rest.body outputParameters: - type: object mapping: $. - method: PATCH name: patchv1template description: Update Template call: nuclei-templates.patchv1template with: X-Team-Id: rest.X-Team-Id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/template/ai name: v1-template-ai description: REST surface for v1-template-ai. operations: - method: POST name: postv1templateai description: Generate AI Template call: nuclei-templates.postv1templateai with: X-Team-Id: rest.X-Team-Id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/template/early name: v1-template-early description: REST surface for v1-template-early. operations: - method: GET name: getv1earlytemplates description: Get Early Template List call: nuclei-templates.getv1earlytemplates with: X-Team-Id: rest.X-Team-Id offset: rest.offset limit: rest.limit fields: rest.fields outputParameters: - type: object mapping: $. - path: /v1/v1/template/early/{id} name: v1-template-early-id description: REST surface for v1-template-early-id. operations: - method: GET name: getv1earlytemplatesid description: Get Early Template call: nuclei-templates.getv1earlytemplatesid with: X-Team-Id: rest.X-Team-Id outputParameters: - type: object mapping: $. - path: /v1/v1/template/github name: v1-template-github description: REST surface for v1-template-github. operations: - method: GET name: getv1githubtemplates description: Get Github Template List call: nuclei-templates.getv1githubtemplates with: X-Team-Id: rest.X-Team-Id offset: rest.offset limit: rest.limit fields: rest.fields outputParameters: - type: object mapping: $. - path: /v1/v1/template/github/{id} name: v1-template-github-id description: REST surface for v1-template-github-id. operations: - method: GET name: getv1githubtemplatesid description: Get Github Template call: nuclei-templates.getv1githubtemplatesid with: X-Team-Id: rest.X-Team-Id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/template/public name: v1-template-public description: REST surface for v1-template-public. operations: - method: GET name: getv1templatepublic description: Get Public Template List call: nuclei-templates.getv1templatepublic with: X-Team-Id: rest.X-Team-Id offset: rest.offset limit: rest.limit fields: rest.fields outputParameters: - type: object mapping: $. - path: /v1/v1/template/public/{template-id} name: v1-template-public-template-id description: REST surface for v1-template-public-template_id. operations: - method: GET name: getv1publictemplatedata description: Get Public Template call: nuclei-templates.getv1publictemplatedata with: fields: rest.fields X-Team-Id: rest.X-Team-Id outputParameters: - type: object mapping: $. - path: /v1/v1/template/share name: v1-template-share description: REST surface for v1-template-share. operations: - method: GET name: getv1templateshare description: Get Shared Template List call: nuclei-templates.getv1templateshare with: X-Team-Id: rest.X-Team-Id fields: rest.fields limit: rest.limit offset: rest.offset sort_asc: rest.sort_asc sort_desc: rest.sort_desc outputParameters: - type: object mapping: $. - method: POST name: postv1templateshare description: Share Template call: nuclei-templates.postv1templateshare with: X-Team-Id: rest.X-Team-Id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/template/share/{template-id} name: v1-template-share-template-id description: REST surface for v1-template-share-template_id. operations: - method: GET name: getv1templatesharetemplateid description: Get Shared Template call: nuclei-templates.getv1templatesharetemplateid with: fields: rest.fields body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/template/stats name: v1-template-stats description: REST surface for v1-template-stats. operations: - method: GET name: getv1templatestats description: Get Public Template Stats call: nuclei-templates.getv1templatestats with: limit: rest.limit offset: rest.offset fields: rest.fields sort_asc: rest.sort_asc sort_desc: rest.sort_desc q: rest.q highlight: rest.highlight outputParameters: - type: object mapping: $. - path: /v1/v1/template/{template-id} name: v1-template-template-id description: REST surface for v1-template-template_id. operations: - method: GET name: getv1templatetid description: Get Template call: nuclei-templates.getv1templatetid with: X-Team-Id: rest.X-Team-Id outputParameters: - type: object mapping: $. - method: DELETE name: deletev1templatetemplateid description: Delete Template call: nuclei-templates.deletev1templatetemplateid with: X-Team-Id: rest.X-Team-Id outputParameters: - type: object mapping: $. - type: mcp namespace: nuclei-templates-mcp port: 9090 transport: http description: MCP adapter for PDCP API — templates. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: get-template-list description: Get Template List hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templates with: X-Team-Id: tools.X-Team-Id offset: tools.offset limit: tools.limit fields: tools.fields outputParameters: - type: object mapping: $. - name: create-template description: Create Template hints: readOnly: false destructive: false idempotent: false call: nuclei-templates.postv1template with: X-Team-Id: tools.X-Team-Id filename: tools.filename dir: tools.dir body: tools.body outputParameters: - type: object mapping: $. - name: update-template description: Update Template hints: readOnly: false destructive: false idempotent: true call: nuclei-templates.patchv1template with: X-Team-Id: tools.X-Team-Id body: tools.body outputParameters: - type: object mapping: $. - name: generate-ai-template description: Generate AI Template hints: readOnly: false destructive: false idempotent: false call: nuclei-templates.postv1templateai with: X-Team-Id: tools.X-Team-Id body: tools.body outputParameters: - type: object mapping: $. - name: get-early-template-list description: Get Early Template List hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1earlytemplates with: X-Team-Id: tools.X-Team-Id offset: tools.offset limit: tools.limit fields: tools.fields outputParameters: - type: object mapping: $. - name: get-early-template description: Get Early Template hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1earlytemplatesid with: X-Team-Id: tools.X-Team-Id outputParameters: - type: object mapping: $. - name: get-github-template-list description: Get Github Template List hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1githubtemplates with: X-Team-Id: tools.X-Team-Id offset: tools.offset limit: tools.limit fields: tools.fields outputParameters: - type: object mapping: $. - name: get-github-template description: Get Github Template hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1githubtemplatesid with: X-Team-Id: tools.X-Team-Id body: tools.body outputParameters: - type: object mapping: $. - name: get-public-template-list description: Get Public Template List hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templatepublic with: X-Team-Id: tools.X-Team-Id offset: tools.offset limit: tools.limit fields: tools.fields outputParameters: - type: object mapping: $. - name: get-public-template description: Get Public Template hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1publictemplatedata with: fields: tools.fields X-Team-Id: tools.X-Team-Id outputParameters: - type: object mapping: $. - name: get-shared-template-list description: Get Shared Template List hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templateshare with: X-Team-Id: tools.X-Team-Id fields: tools.fields limit: tools.limit offset: tools.offset sort_asc: tools.sort_asc sort_desc: tools.sort_desc outputParameters: - type: object mapping: $. - name: share-template description: Share Template hints: readOnly: false destructive: false idempotent: false call: nuclei-templates.postv1templateshare with: X-Team-Id: tools.X-Team-Id body: tools.body outputParameters: - type: object mapping: $. - name: get-shared-template description: Get Shared Template hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templatesharetemplateid with: fields: tools.fields body: tools.body outputParameters: - type: object mapping: $. - name: get-public-template-stats description: Get Public Template Stats hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templatestats with: limit: tools.limit offset: tools.offset fields: tools.fields sort_asc: tools.sort_asc sort_desc: tools.sort_desc q: tools.q highlight: tools.highlight outputParameters: - type: object mapping: $. - name: get-template description: Get Template hints: readOnly: true destructive: false idempotent: true call: nuclei-templates.getv1templatetid with: X-Team-Id: tools.X-Team-Id outputParameters: - type: object mapping: $. - name: delete-template description: Delete Template hints: readOnly: false destructive: true idempotent: true call: nuclei-templates.deletev1templatetemplateid with: X-Team-Id: tools.X-Team-Id outputParameters: - type: object mapping: $.