Nuclei · Capability

PDCP API — templates

PDCP API — templates. 16 operations. Lead operation: Get Template List. Self-contained Naftiko capability covering one Nuclei business surface.

Run with Naftiko Nucleitemplates

What You Can Do

GET
Getv1templates — Get Template List
/v1/v1/template
POST
Postv1template — Create Template
/v1/v1/template
PATCH
Patchv1template — Update Template
/v1/v1/template
POST
Postv1templateai — Generate AI Template
/v1/v1/template/ai
GET
Getv1earlytemplates — Get Early Template List
/v1/v1/template/early
GET
Getv1earlytemplatesid — Get Early Template
/v1/v1/template/early/{id}
GET
Getv1githubtemplates — Get Github Template List
/v1/v1/template/github
GET
Getv1githubtemplatesid — Get Github Template
/v1/v1/template/github/{id}
GET
Getv1templatepublic — Get Public Template List
/v1/v1/template/public
GET
Getv1publictemplatedata — Get Public Template
/v1/v1/template/public/{template-id}
GET
Getv1templateshare — Get Shared Template List
/v1/v1/template/share
POST
Postv1templateshare — Share Template
/v1/v1/template/share
GET
Getv1templatesharetemplateid — Get Shared Template
/v1/v1/template/share/{template-id}
GET
Getv1templatestats — Get Public Template Stats
/v1/v1/template/stats
GET
Getv1templatetid — Get Template
/v1/v1/template/{template-id}
DELETE
Deletev1templatetemplateid — Delete Template
/v1/v1/template/{template-id}

MCP Tools

get-template-list

Get Template List

read-only idempotent
create-template

Create Template

update-template

Update Template

idempotent
generate-ai-template

Generate AI Template

get-early-template-list

Get Early Template List

read-only idempotent
get-early-template

Get Early Template

read-only idempotent
get-github-template-list

Get Github Template List

read-only idempotent
get-github-template

Get Github Template

read-only idempotent
get-public-template-list

Get Public Template List

read-only idempotent
get-public-template

Get Public Template

read-only idempotent
get-shared-template-list

Get Shared Template List

read-only idempotent
share-template

Share Template

get-shared-template

Get Shared Template

read-only idempotent
get-public-template-stats

Get Public Template Stats

read-only idempotent
get-template

Get Template

read-only idempotent
delete-template

Delete Template

idempotent

Capability Spec

nuclei-templates.yaml Raw ↑
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: $.