naftiko: 1.0.0-alpha2 info: label: Port API — Pages description: 'Port API — Pages. 11 operations. Lead operation: Get all pages in your portal. Self-contained Naftiko capability covering one Port business surface.' tags: - Port - Pages created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: PORT_API_KEY: PORT_API_KEY capability: consumes: - type: http namespace: port-pages baseUri: '' description: Port API — Pages business capability. Self-contained, no shared references. resources: - name: v1-pages path: /v1/pages operations: - name: get method: GET description: Get all pages in your portal outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: compact in: query type: boolean required: true - name: post method: POST description: Create pages in your portal outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: v1-pages-identifier path: /v1/pages/{identifier} operations: - name: get method: GET description: Get a page outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: identifier in: path type: string description: The unique identifier of the resource you want to operate on. required: true - name: patch method: PATCH description: Patch a page outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: identifier in: path type: string description: The unique identifier of the resource you want to operate on. required: true - name: body in: body type: object description: Request body (JSON). required: false - name: delete method: DELETE description: Delete a page outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: identifier in: path type: string description: The unique identifier of the resource you want to operate on. required: true - name: v1-pages-identifier-duplicate path: /v1/pages/{identifier}/duplicate operations: - name: post method: POST description: Duplicate a page outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: identifier in: path type: string description: The unique identifier of the resource you want to operate on. required: true - name: v1-pages-page_identifier-permissions path: /v1/pages/{page_identifier}/permissions operations: - name: get method: GET description: Get a page's permissions outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page_identifier in: path type: string required: true - name: patch method: PATCH description: Update a page's permissions outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page_identifier in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: false - name: v1-pages-page_identifier-widgets path: /v1/pages/{page_identifier}/widgets operations: - name: post method: POST description: Create a widget outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page_identifier in: path type: string required: true - name: body in: body type: object description: Request body (JSON). required: true - name: v1-pages-page_identifier-widgets-widget_id path: /v1/pages/{page_identifier}/widgets/{widget_id} operations: - name: patch method: PATCH description: Update a widget outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page_identifier in: path type: string required: true - name: widget_id in: path type: string required: true - name: delete method: DELETE description: Delete a widget outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page_identifier in: path type: string required: true - name: widget_id in: path type: string required: true authentication: type: apikey key: Authorization value: '{{env.PORT_API_KEY}}' placement: header exposes: - type: rest namespace: port-pages-rest port: 8080 description: REST adapter for Port API — Pages. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/v1/pages name: v1-pages description: REST surface for v1-pages. operations: - method: GET name: get description: Get all pages in your portal call: port-pages.get with: compact: rest.compact outputParameters: - type: object mapping: $. - method: POST name: post description: Create pages in your portal call: port-pages.post with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/pages/{identifier} name: v1-pages-identifier description: REST surface for v1-pages-identifier. operations: - method: GET name: get description: Get a page call: port-pages.get with: identifier: rest.identifier outputParameters: - type: object mapping: $. - method: PATCH name: patch description: Patch a page call: port-pages.patch with: identifier: rest.identifier body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: delete description: Delete a page call: port-pages.delete with: identifier: rest.identifier outputParameters: - type: object mapping: $. - path: /v1/v1/pages/{identifier}/duplicate name: v1-pages-identifier-duplicate description: REST surface for v1-pages-identifier-duplicate. operations: - method: POST name: post description: Duplicate a page call: port-pages.post with: identifier: rest.identifier outputParameters: - type: object mapping: $. - path: /v1/v1/pages/{page-identifier}/permissions name: v1-pages-page-identifier-permissions description: REST surface for v1-pages-page_identifier-permissions. operations: - method: GET name: get description: Get a page's permissions call: port-pages.get with: page_identifier: rest.page_identifier outputParameters: - type: object mapping: $. - method: PATCH name: patch description: Update a page's permissions call: port-pages.patch with: page_identifier: rest.page_identifier body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/pages/{page-identifier}/widgets name: v1-pages-page-identifier-widgets description: REST surface for v1-pages-page_identifier-widgets. operations: - method: POST name: post description: Create a widget call: port-pages.post with: page_identifier: rest.page_identifier body: rest.body outputParameters: - type: object mapping: $. - path: /v1/v1/pages/{page-identifier}/widgets/{widget-id} name: v1-pages-page-identifier-widgets-widget-id description: REST surface for v1-pages-page_identifier-widgets-widget_id. operations: - method: PATCH name: patch description: Update a widget call: port-pages.patch with: page_identifier: rest.page_identifier widget_id: rest.widget_id outputParameters: - type: object mapping: $. - method: DELETE name: delete description: Delete a widget call: port-pages.delete with: page_identifier: rest.page_identifier widget_id: rest.widget_id outputParameters: - type: object mapping: $. - type: mcp namespace: port-pages-mcp port: 9090 transport: http description: MCP adapter for Port API — Pages. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: get-all-pages-your-portal description: Get all pages in your portal hints: readOnly: true destructive: false idempotent: true call: port-pages.get with: compact: tools.compact outputParameters: - type: object mapping: $. - name: create-pages-your-portal description: Create pages in your portal hints: readOnly: false destructive: false idempotent: false call: port-pages.post with: body: tools.body outputParameters: - type: object mapping: $. - name: get-page description: Get a page hints: readOnly: true destructive: false idempotent: true call: port-pages.get with: identifier: tools.identifier outputParameters: - type: object mapping: $. - name: patch-page description: Patch a page hints: readOnly: false destructive: false idempotent: true call: port-pages.patch with: identifier: tools.identifier body: tools.body outputParameters: - type: object mapping: $. - name: delete-page description: Delete a page hints: readOnly: false destructive: true idempotent: true call: port-pages.delete with: identifier: tools.identifier outputParameters: - type: object mapping: $. - name: duplicate-page description: Duplicate a page hints: readOnly: false destructive: false idempotent: false call: port-pages.post with: identifier: tools.identifier outputParameters: - type: object mapping: $. - name: get-page-s-permissions description: Get a page's permissions hints: readOnly: true destructive: false idempotent: true call: port-pages.get with: page_identifier: tools.page_identifier outputParameters: - type: object mapping: $. - name: update-page-s-permissions description: Update a page's permissions hints: readOnly: false destructive: false idempotent: true call: port-pages.patch with: page_identifier: tools.page_identifier body: tools.body outputParameters: - type: object mapping: $. - name: create-widget description: Create a widget hints: readOnly: false destructive: false idempotent: false call: port-pages.post with: page_identifier: tools.page_identifier body: tools.body outputParameters: - type: object mapping: $. - name: update-widget description: Update a widget hints: readOnly: false destructive: false idempotent: true call: port-pages.patch with: page_identifier: tools.page_identifier widget_id: tools.widget_id outputParameters: - type: object mapping: $. - name: delete-widget description: Delete a widget hints: readOnly: false destructive: true idempotent: true call: port-pages.delete with: page_identifier: tools.page_identifier widget_id: tools.widget_id outputParameters: - type: object mapping: $.