naftiko: 1.0.0-alpha2 info: label: Exoscale API — role description: 'Exoscale API — role. 8 operations. Lead operation: List IAM Roles. Self-contained Naftiko capability covering one Exoscale business surface.' tags: - Exoscale - role created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: EXOSCALE_API_KEY: EXOSCALE_API_KEY capability: consumes: - type: http namespace: exoscale-role baseUri: https://api-{zone}.exoscale.com/v2 description: Exoscale API — role business capability. Self-contained, no shared references. resources: - name: iam-role path: /iam-role operations: - name: listiamroles method: GET description: List IAM Roles outputRawFormat: json outputParameters: - name: result type: object value: $. - name: createiamrole method: POST description: Create IAM Role outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: iam-role-id path: /iam-role/{id} operations: - name: updateiamrole method: PUT description: Update IAM Role outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: true - name: getiamrole method: GET description: Retrieve IAM Role outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string required: true - name: deleteiamrole method: DELETE description: Delete IAM Role outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string required: true - name: iam-role-id}:assume-role-policy path: /iam-role/{id}:assume-role-policy operations: - name: updateiamroleassumepolicy method: PUT description: Update IAM Assume role Policy outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: true - name: iam-role-id}:policy path: /iam-role/{id}:policy operations: - name: updateiamrolepolicy method: PUT description: Update IAM Role Policy outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: true - name: iam-role-target-role-id-assume path: /iam-role/{target-role-id}/assume operations: - name: assumeiamrole method: POST description: '[BETA] Request generation of key/secret that allow caller to assume target role' outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: target-role-id in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: true exposes: - type: rest namespace: exoscale-role-rest port: 8080 description: REST adapter for Exoscale API — role. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/iam-role name: iam-role description: REST surface for iam-role. operations: - method: GET name: listiamroles description: List IAM Roles call: exoscale-role.listiamroles outputParameters: - type: object mapping: $. - method: POST name: createiamrole description: Create IAM Role call: exoscale-role.createiamrole with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/iam-role/{id} name: iam-role-id description: REST surface for iam-role-id. operations: - method: PUT name: updateiamrole description: Update IAM Role call: exoscale-role.updateiamrole with: id: rest.id body: rest.body outputParameters: - type: object mapping: $. - method: GET name: getiamrole description: Retrieve IAM Role call: exoscale-role.getiamrole with: id: rest.id outputParameters: - type: object mapping: $. - method: DELETE name: deleteiamrole description: Delete IAM Role call: exoscale-role.deleteiamrole with: id: rest.id outputParameters: - type: object mapping: $. - path: /v1/iam-role/id-assume-role-policy name: iam-role-id-assume-role-policy description: REST surface for iam-role-id}:assume-role-policy. operations: - method: PUT name: updateiamroleassumepolicy description: Update IAM Assume role Policy call: exoscale-role.updateiamroleassumepolicy with: id: rest.id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/iam-role/id-policy name: iam-role-id-policy description: REST surface for iam-role-id}:policy. operations: - method: PUT name: updateiamrolepolicy description: Update IAM Role Policy call: exoscale-role.updateiamrolepolicy with: id: rest.id body: rest.body outputParameters: - type: object mapping: $. - path: /v1/iam-role/{target-role-id}/assume name: iam-role-target-role-id-assume description: REST surface for iam-role-target-role-id-assume. operations: - method: POST name: assumeiamrole description: '[BETA] Request generation of key/secret that allow caller to assume target role' call: exoscale-role.assumeiamrole with: target-role-id: rest.target-role-id body: rest.body outputParameters: - type: object mapping: $. - type: mcp namespace: exoscale-role-mcp port: 9090 transport: http description: MCP adapter for Exoscale API — role. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: list-iam-roles description: List IAM Roles hints: readOnly: true destructive: false idempotent: true call: exoscale-role.listiamroles outputParameters: - type: object mapping: $. - name: create-iam-role description: Create IAM Role hints: readOnly: false destructive: false idempotent: false call: exoscale-role.createiamrole with: body: tools.body outputParameters: - type: object mapping: $. - name: update-iam-role description: Update IAM Role hints: readOnly: false destructive: false idempotent: true call: exoscale-role.updateiamrole with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: retrieve-iam-role description: Retrieve IAM Role hints: readOnly: true destructive: false idempotent: true call: exoscale-role.getiamrole with: id: tools.id outputParameters: - type: object mapping: $. - name: delete-iam-role description: Delete IAM Role hints: readOnly: false destructive: true idempotent: true call: exoscale-role.deleteiamrole with: id: tools.id outputParameters: - type: object mapping: $. - name: update-iam-assume-role-policy description: Update IAM Assume role Policy hints: readOnly: false destructive: false idempotent: true call: exoscale-role.updateiamroleassumepolicy with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: update-iam-role-policy description: Update IAM Role Policy hints: readOnly: false destructive: false idempotent: true call: exoscale-role.updateiamrolepolicy with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: beta-request-generation-key-secret description: '[BETA] Request generation of key/secret that allow caller to assume target role' hints: readOnly: true destructive: false idempotent: false call: exoscale-role.assumeiamrole with: target-role-id: tools.target-role-id body: tools.body outputParameters: - type: object mapping: $.