naftiko: 1.0.0-alpha2 info: label: Gremlin API — attacks description: 'Gremlin API — attacks. 14 operations. Lead operation: List all attacks.. Self-contained Naftiko capability covering one Gremlin business surface.' tags: - Gremlin - attacks created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: GREMLIN_API_KEY: GREMLIN_API_KEY capability: consumes: - type: http namespace: gremlin-attacks baseUri: https://api.gremlin.com/v1 description: Gremlin API — attacks business capability. Self-contained, no shared references. resources: - name: attacks path: /attacks operations: - name: all method: GET description: List all attacks. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: source in: query type: string description: Filter attacks to either adhoc or scenario. - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: teamId in: query type: string description: Required when using company session token. required: true - name: createnewattack method: POST description: Create a new attack. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: teamId in: query type: string description: Required when using company session token. required: true - name: body in: body type: object description: Request body (JSON). required: true - name: halt method: DELETE description: Idempotently halt all active attacks outputRawFormat: json outputParameters: - name: result type: object value: $. - name: attacks-active path: /attacks/active operations: - name: active method: GET description: List all active attacks. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: source in: query type: string description: Filter attacks to either adhoc or scenario. - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-active-paged path: /attacks/active/paged operations: - name: activepaged method: GET description: Return a page of active ad-hoc experiments. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: pageToken in: query type: string description: Pass the pageToken to get the next page of active ad-hoc experiments - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-completed path: /attacks/completed operations: - name: completed method: GET description: List all completed attacks. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: source in: query type: string description: Filter attacks to either adhoc or scenario. - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-completed-paged path: /attacks/completed/paged operations: - name: completedpaged method: GET description: Return a page of completed ad-hoc experiments. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: pageToken in: query type: string description: Pass the pageToken to get the next page of completed ad-hoc experiments - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-halt path: /attacks/halt operations: - name: haltaspost method: POST description: Idempotently halt all active attacks. This is a POST version of the DELETE operation. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: false - name: attacks-new path: /attacks/new operations: - name: create method: POST description: Legacy Create Attack. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: teamId in: query type: string description: Required when using company session token. required: true - name: body in: body type: object description: Request body (JSON). required: true - name: attacks-range path: /attacks/range operations: - name: allattacksinrange method: GET description: List all attacks in a given time range (defaults to all attacks up to now) outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: startTime in: query type: string - name: endTime in: query type: string - name: pageSize in: query type: integer description: This value determines how many results will be returned per call. - name: pageToken in: query type: string - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-guid path: /attacks/{guid} operations: - name: get method: GET description: Get details about an attack. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: guid in: path type: string description: This value represents the globally unique identifier of the record to fetch. required: true - name: teamId in: query type: string description: Required when using company session token. required: true - name: halt1 method: DELETE description: Idempotently halt the specified active attack. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: guid in: path type: string description: This value represents the globally unique identifier of the record to fetch. required: true - name: teamId in: query type: string description: Required when using company session token. required: true - name: attacks-guid-annotations path: /attacks/{guid}/annotations operations: - name: addannotations method: PUT description: Add annotations to an attack outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: guid in: path type: string description: This value represents the globally unique identifier of the record to fetch. required: true - name: teamId in: query type: string description: Required when using company session token. required: true - name: body in: body type: object description: Request body (JSON). required: true - name: attacks-guid-halt path: /attacks/{guid}/halt operations: - name: haltaspost1 method: POST description: Idempotently halt the specified active attack. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: guid in: path type: string description: This value represents the globally unique identifier of the record to fetch. required: true - name: teamId in: query type: string description: Required when using company session token. required: true - name: body in: body type: object description: Request body (JSON). required: false exposes: - type: rest namespace: gremlin-attacks-rest port: 8080 description: REST adapter for Gremlin API — attacks. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/attacks name: attacks description: REST surface for attacks. operations: - method: GET name: all description: List all attacks. call: gremlin-attacks.all with: source: rest.source pageSize: rest.pageSize teamId: rest.teamId outputParameters: - type: object mapping: $. - method: POST name: createnewattack description: Create a new attack. call: gremlin-attacks.createnewattack with: teamId: rest.teamId body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: halt description: Idempotently halt all active attacks call: gremlin-attacks.halt outputParameters: - type: object mapping: $. - path: /v1/attacks/active name: attacks-active description: REST surface for attacks-active. operations: - method: GET name: active description: List all active attacks. call: gremlin-attacks.active with: source: rest.source pageSize: rest.pageSize teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/active/paged name: attacks-active-paged description: REST surface for attacks-active-paged. operations: - method: GET name: activepaged description: Return a page of active ad-hoc experiments. call: gremlin-attacks.activepaged with: pageSize: rest.pageSize pageToken: rest.pageToken teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/completed name: attacks-completed description: REST surface for attacks-completed. operations: - method: GET name: completed description: List all completed attacks. call: gremlin-attacks.completed with: source: rest.source pageSize: rest.pageSize teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/completed/paged name: attacks-completed-paged description: REST surface for attacks-completed-paged. operations: - method: GET name: completedpaged description: Return a page of completed ad-hoc experiments. call: gremlin-attacks.completedpaged with: pageSize: rest.pageSize pageToken: rest.pageToken teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/halt name: attacks-halt description: REST surface for attacks-halt. operations: - method: POST name: haltaspost description: Idempotently halt all active attacks. This is a POST version of the DELETE operation. call: gremlin-attacks.haltaspost with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/attacks/new name: attacks-new description: REST surface for attacks-new. operations: - method: POST name: create description: Legacy Create Attack. call: gremlin-attacks.create with: teamId: rest.teamId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/attacks/range name: attacks-range description: REST surface for attacks-range. operations: - method: GET name: allattacksinrange description: List all attacks in a given time range (defaults to all attacks up to now) call: gremlin-attacks.allattacksinrange with: startTime: rest.startTime endTime: rest.endTime pageSize: rest.pageSize pageToken: rest.pageToken teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/{guid} name: attacks-guid description: REST surface for attacks-guid. operations: - method: GET name: get description: Get details about an attack. call: gremlin-attacks.get with: guid: rest.guid teamId: rest.teamId outputParameters: - type: object mapping: $. - method: DELETE name: halt1 description: Idempotently halt the specified active attack. call: gremlin-attacks.halt1 with: guid: rest.guid teamId: rest.teamId outputParameters: - type: object mapping: $. - path: /v1/attacks/{guid}/annotations name: attacks-guid-annotations description: REST surface for attacks-guid-annotations. operations: - method: PUT name: addannotations description: Add annotations to an attack call: gremlin-attacks.addannotations with: guid: rest.guid teamId: rest.teamId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/attacks/{guid}/halt name: attacks-guid-halt description: REST surface for attacks-guid-halt. operations: - method: POST name: haltaspost1 description: Idempotently halt the specified active attack. call: gremlin-attacks.haltaspost1 with: guid: rest.guid teamId: rest.teamId body: rest.body outputParameters: - type: object mapping: $. - type: mcp namespace: gremlin-attacks-mcp port: 9090 transport: http description: MCP adapter for Gremlin API — attacks. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: list-all-attacks description: List all attacks. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.all with: source: tools.source pageSize: tools.pageSize teamId: tools.teamId outputParameters: - type: object mapping: $. - name: create-new-attack description: Create a new attack. hints: readOnly: false destructive: false idempotent: false call: gremlin-attacks.createnewattack with: teamId: tools.teamId body: tools.body outputParameters: - type: object mapping: $. - name: idempotently-halt-all-active-attacks description: Idempotently halt all active attacks hints: readOnly: false destructive: true idempotent: true call: gremlin-attacks.halt outputParameters: - type: object mapping: $. - name: list-all-active-attacks description: List all active attacks. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.active with: source: tools.source pageSize: tools.pageSize teamId: tools.teamId outputParameters: - type: object mapping: $. - name: return-page-active-ad-hoc description: Return a page of active ad-hoc experiments. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.activepaged with: pageSize: tools.pageSize pageToken: tools.pageToken teamId: tools.teamId outputParameters: - type: object mapping: $. - name: list-all-completed-attacks description: List all completed attacks. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.completed with: source: tools.source pageSize: tools.pageSize teamId: tools.teamId outputParameters: - type: object mapping: $. - name: return-page-completed-ad-hoc description: Return a page of completed ad-hoc experiments. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.completedpaged with: pageSize: tools.pageSize pageToken: tools.pageToken teamId: tools.teamId outputParameters: - type: object mapping: $. - name: idempotently-halt-all-active-attacks-2 description: Idempotently halt all active attacks. This is a POST version of the DELETE operation. hints: readOnly: false destructive: false idempotent: false call: gremlin-attacks.haltaspost with: body: tools.body outputParameters: - type: object mapping: $. - name: legacy-create-attack description: Legacy Create Attack. hints: readOnly: false destructive: false idempotent: false call: gremlin-attacks.create with: teamId: tools.teamId body: tools.body outputParameters: - type: object mapping: $. - name: list-all-attacks-given-time description: List all attacks in a given time range (defaults to all attacks up to now) hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.allattacksinrange with: startTime: tools.startTime endTime: tools.endTime pageSize: tools.pageSize pageToken: tools.pageToken teamId: tools.teamId outputParameters: - type: object mapping: $. - name: get-details-about-attack description: Get details about an attack. hints: readOnly: true destructive: false idempotent: true call: gremlin-attacks.get with: guid: tools.guid teamId: tools.teamId outputParameters: - type: object mapping: $. - name: idempotently-halt-specified-active-attack description: Idempotently halt the specified active attack. hints: readOnly: false destructive: true idempotent: true call: gremlin-attacks.halt1 with: guid: tools.guid teamId: tools.teamId outputParameters: - type: object mapping: $. - name: add-annotations-attack description: Add annotations to an attack hints: readOnly: false destructive: false idempotent: true call: gremlin-attacks.addannotations with: guid: tools.guid teamId: tools.teamId body: tools.body outputParameters: - type: object mapping: $. - name: idempotently-halt-specified-active-attack-2 description: Idempotently halt the specified active attack. hints: readOnly: false destructive: false idempotent: false call: gremlin-attacks.haltaspost1 with: guid: tools.guid teamId: tools.teamId body: tools.body outputParameters: - type: object mapping: $.