naftiko: 1.0.0-alpha2 info: label: Google Cloud Storage JSON API — Objects description: 'Google Cloud Storage JSON API — Objects. 10 operations. Lead operation: Google Cloud Storage List Objects. Self-contained Naftiko capability covering one Gcp Cloud Storage business surface.' tags: - Gcp Cloud Storage - Objects created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: GCP_CLOUD_STORAGE_API_KEY: GCP_CLOUD_STORAGE_API_KEY capability: consumes: - type: http namespace: json-objects baseUri: https://storage.googleapis.com/storage/v1 description: Google Cloud Storage JSON API — Objects business capability. Self-contained, no shared references. resources: - name: b-bucket-o path: /b/{bucket}/o operations: - name: listobjects method: GET description: Google Cloud Storage List Objects outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: delimiter in: query type: string description: Returns results in a directory-like mode. Items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, asi - name: endOffset in: query type: string description: Filter results to objects whose names are lexicographically before endOffset. If startOffset is also set, the objects listed have names between startOffset (inc - name: includeFoldersAsPrefixes in: query type: boolean description: Only applicable if delimiter is set to /. If true, will also include folders and managed folders (besides objects) in the returned prefixes. - name: includeTrailingDelimiter in: query type: boolean description: If true, objects that end in exactly one instance of delimiter will have their metadata included in items in addition to prefixes. - name: matchGlob in: query type: string description: Filter results to objects and prefixes that match this glob pattern. Supports *, **, ?, and [...] character classes. - name: maxResults in: query type: integer description: Maximum number of items plus prefixes to return in a single page of responses. The service may return fewer than this value. - name: pageToken in: query type: string description: A previously-returned page token representing part of the larger set of results to view. - name: prefix in: query type: string description: Filter results to objects whose names begin with this prefix. - name: projection in: query type: string description: Set of properties to return. Defaults to noAcl. - name: softDeleted in: query type: boolean description: If true, only lists soft-deleted object versions. - name: startOffset in: query type: string description: Filter results to objects whose names are lexicographically equal to or after startOffset. - name: versions in: query type: boolean description: If true, lists all versions of an object as distinct results. The default is false. - name: b-bucket-o-watchAll path: /b/{bucket}/o/watchAll operations: - name: watchallobjects method: POST description: Google Cloud Storage Watch for Object Changes outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: prefix in: query type: string description: Limits notifications to objects with names beginning with this prefix. - name: body in: body type: object description: Request body (JSON). required: true - name: b-bucket-o-object path: /b/{bucket}/o/{object} operations: - name: getobject method: GET description: Google Cloud Storage Get an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: alt in: query type: string description: Data format for the response. Use json for metadata or media to download the object data. - name: generation in: query type: integer description: If present, selects a specific revision of this object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are n - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration does not match the given value. - name: projection in: query type: string description: Set of properties to return. Defaults to noAcl. - name: softDeleted in: query type: boolean description: If true, retrieves the soft-deleted version of the object. - name: updateobject method: PUT description: Google Cloud Storage Update an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: generation in: query type: integer description: If present, selects a specific revision of this object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation matches the given value. - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration does not match the given value. - name: predefinedAcl in: query type: string description: Apply a predefined set of access controls to the object. - name: projection in: query type: string description: Set of properties to return. Defaults to full. - name: body in: body type: object description: Request body (JSON). required: true - name: patchobject method: PATCH description: Google Cloud Storage Patch an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: generation in: query type: integer description: If present, selects a specific revision of this object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation matches the given value. - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration does not match the given value. - name: predefinedAcl in: query type: string description: Apply a predefined set of access controls to the object. - name: projection in: query type: string description: Set of properties to return. Defaults to full. - name: body in: body type: object description: Request body (JSON). required: true - name: deleteobject method: DELETE description: Google Cloud Storage Delete an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: generation in: query type: integer description: If present, permanently deletes a specific revision of this object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation matches the given value. - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the object's current metageneration does not match the given value. - name: b-bucket-o-object-compose path: /b/{bucket}/o/{object}/compose operations: - name: composeobject method: POST description: Google Cloud Storage Compose Objects outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: object in: path type: string description: Name of the destination object. required: true - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current generation matches the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current metageneration matches the given value. - name: body in: body type: object description: Request body (JSON). required: true - name: b-bucket-o-object-copyTo-b-destinationBucket-o-destinationObject path: /b/{bucket}/o/{object}/copyTo/b/{destinationBucket}/o/{destinationObject} operations: - name: copyobject method: POST description: Google Cloud Storage Copy an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: bucket in: path type: string description: Name of the source bucket. required: true - name: object in: path type: string description: Name of the source object. For information about how to URL-encode object names, see Encoding URI path parts. required: true - name: destinationBucket in: path type: string description: Name of the destination bucket. required: true - name: destinationObject in: path type: string description: Name of the destination object. required: true - name: destinationPredefinedAcl in: query type: string description: Apply a predefined set of access controls to the destination object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current generation matches the given value. - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current metageneration does not match the given value. - name: ifSourceGenerationMatch in: query type: integer description: Makes the operation conditional on whether the source object's current generation matches the given value. - name: ifSourceGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the source object's current generation does not match the given value. - name: ifSourceMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the source object's current metageneration matches the given value. - name: ifSourceMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the source object's current metageneration does not match the given value. - name: projection in: query type: string description: Set of properties to return. Defaults to noAcl. - name: sourceGeneration in: query type: integer description: If present, selects a specific revision of the source object. - name: body in: body type: object description: Request body (JSON). required: false - name: b-bucket-o-object-rewriteTo-b-destinationBucket-o-destinationObject path: /b/{bucket}/o/{object}/rewriteTo/b/{destinationBucket}/o/{destinationObject} operations: - name: rewriteobject method: POST description: Google Cloud Storage Rewrite an Object outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: bucket in: path type: string description: Name of the source bucket. required: true - name: object in: path type: string description: Name of the source object. required: true - name: destinationBucket in: path type: string description: Name of the destination bucket. required: true - name: destinationObject in: path type: string description: Name of the destination object. required: true - name: destinationKmsKeyName in: query type: string description: Resource name of the Cloud KMS key that will be used to encrypt the destination object. - name: destinationPredefinedAcl in: query type: string description: Apply a predefined set of access controls to the destination object. - name: ifGenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current generation matches the given value. - name: ifGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current generation does not match the given value. - name: ifMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current metageneration matches the given value. - name: ifMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the destination object's current metageneration does not match the given value. - name: ifSourceGenerationMatch in: query type: integer description: Makes the operation conditional on whether the source object's current generation matches the given value. - name: ifSourceGenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the source object's current generation does not match the given value. - name: ifSourceMetagenerationMatch in: query type: integer description: Makes the operation conditional on whether the source object's current metageneration matches the given value. - name: ifSourceMetagenerationNotMatch in: query type: integer description: Makes the operation conditional on whether the source object's current metageneration does not match the given value. - name: maxBytesRewrittenPerCall in: query type: integer description: The maximum number of bytes that will be rewritten per rewrite request. Allows throttling of large copies. - name: projection in: query type: string description: Set of properties to return. Defaults to noAcl. - name: rewriteToken in: query type: string description: Include this field only if the previous rewrite response included a rewriteToken. Provides a token for resuming a previously started rewrite operation. - name: sourceGeneration in: query type: integer description: If present, selects a specific revision of the source object. - name: body in: body type: object description: Request body (JSON). required: false - name: channels-stop path: /channels/stop operations: - name: stopchannel method: POST description: Google Cloud Storage Stop a Notification Channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true authentication: type: bearer token: '{{env.GCP_CLOUD_STORAGE_API_KEY}}' exposes: - type: rest namespace: json-objects-rest port: 8080 description: REST adapter for Google Cloud Storage JSON API — Objects. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/b/{bucket}/o name: b-bucket-o description: REST surface for b-bucket-o. operations: - method: GET name: listobjects description: Google Cloud Storage List Objects call: json-objects.listobjects with: delimiter: rest.delimiter endOffset: rest.endOffset includeFoldersAsPrefixes: rest.includeFoldersAsPrefixes includeTrailingDelimiter: rest.includeTrailingDelimiter matchGlob: rest.matchGlob maxResults: rest.maxResults pageToken: rest.pageToken prefix: rest.prefix projection: rest.projection softDeleted: rest.softDeleted startOffset: rest.startOffset versions: rest.versions outputParameters: - type: object mapping: $. - path: /v1/b/{bucket}/o/watchall name: b-bucket-o-watchall description: REST surface for b-bucket-o-watchAll. operations: - method: POST name: watchallobjects description: Google Cloud Storage Watch for Object Changes call: json-objects.watchallobjects with: prefix: rest.prefix body: rest.body outputParameters: - type: object mapping: $. - path: /v1/b/{bucket}/o/{object} name: b-bucket-o-object description: REST surface for b-bucket-o-object. operations: - method: GET name: getobject description: Google Cloud Storage Get an Object call: json-objects.getobject with: alt: rest.alt generation: rest.generation ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch projection: rest.projection softDeleted: rest.softDeleted outputParameters: - type: object mapping: $. - method: PUT name: updateobject description: Google Cloud Storage Update an Object call: json-objects.updateobject with: generation: rest.generation ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch predefinedAcl: rest.predefinedAcl projection: rest.projection body: rest.body outputParameters: - type: object mapping: $. - method: PATCH name: patchobject description: Google Cloud Storage Patch an Object call: json-objects.patchobject with: generation: rest.generation ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch predefinedAcl: rest.predefinedAcl projection: rest.projection body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: deleteobject description: Google Cloud Storage Delete an Object call: json-objects.deleteobject with: generation: rest.generation ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch outputParameters: - type: object mapping: $. - path: /v1/b/{bucket}/o/{object}/compose name: b-bucket-o-object-compose description: REST surface for b-bucket-o-object-compose. operations: - method: POST name: composeobject description: Google Cloud Storage Compose Objects call: json-objects.composeobject with: object: rest.object ifGenerationMatch: rest.ifGenerationMatch ifMetagenerationMatch: rest.ifMetagenerationMatch body: rest.body outputParameters: - type: object mapping: $. - path: /v1/b/{bucket}/o/{object}/copyto/b/{destinationbucket}/o/{destinationobject} name: b-bucket-o-object-copyto-b-destinationbucket-o-destinationobject description: REST surface for b-bucket-o-object-copyTo-b-destinationBucket-o-destinationObject. operations: - method: POST name: copyobject description: Google Cloud Storage Copy an Object call: json-objects.copyobject with: bucket: rest.bucket object: rest.object destinationBucket: rest.destinationBucket destinationObject: rest.destinationObject destinationPredefinedAcl: rest.destinationPredefinedAcl ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch ifSourceGenerationMatch: rest.ifSourceGenerationMatch ifSourceGenerationNotMatch: rest.ifSourceGenerationNotMatch ifSourceMetagenerationMatch: rest.ifSourceMetagenerationMatch ifSourceMetagenerationNotMatch: rest.ifSourceMetagenerationNotMatch projection: rest.projection sourceGeneration: rest.sourceGeneration body: rest.body outputParameters: - type: object mapping: $. - path: /v1/b/{bucket}/o/{object}/rewriteto/b/{destinationbucket}/o/{destinationobject} name: b-bucket-o-object-rewriteto-b-destinationbucket-o-destinationobject description: REST surface for b-bucket-o-object-rewriteTo-b-destinationBucket-o-destinationObject. operations: - method: POST name: rewriteobject description: Google Cloud Storage Rewrite an Object call: json-objects.rewriteobject with: bucket: rest.bucket object: rest.object destinationBucket: rest.destinationBucket destinationObject: rest.destinationObject destinationKmsKeyName: rest.destinationKmsKeyName destinationPredefinedAcl: rest.destinationPredefinedAcl ifGenerationMatch: rest.ifGenerationMatch ifGenerationNotMatch: rest.ifGenerationNotMatch ifMetagenerationMatch: rest.ifMetagenerationMatch ifMetagenerationNotMatch: rest.ifMetagenerationNotMatch ifSourceGenerationMatch: rest.ifSourceGenerationMatch ifSourceGenerationNotMatch: rest.ifSourceGenerationNotMatch ifSourceMetagenerationMatch: rest.ifSourceMetagenerationMatch ifSourceMetagenerationNotMatch: rest.ifSourceMetagenerationNotMatch maxBytesRewrittenPerCall: rest.maxBytesRewrittenPerCall projection: rest.projection rewriteToken: rest.rewriteToken sourceGeneration: rest.sourceGeneration body: rest.body outputParameters: - type: object mapping: $. - path: /v1/channels/stop name: channels-stop description: REST surface for channels-stop. operations: - method: POST name: stopchannel description: Google Cloud Storage Stop a Notification Channel call: json-objects.stopchannel with: body: rest.body outputParameters: - type: object mapping: $. - type: mcp namespace: json-objects-mcp port: 9090 transport: http description: MCP adapter for Google Cloud Storage JSON API — Objects. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: google-cloud-storage-list-objects description: Google Cloud Storage List Objects hints: readOnly: true destructive: false idempotent: true call: json-objects.listobjects with: delimiter: tools.delimiter endOffset: tools.endOffset includeFoldersAsPrefixes: tools.includeFoldersAsPrefixes includeTrailingDelimiter: tools.includeTrailingDelimiter matchGlob: tools.matchGlob maxResults: tools.maxResults pageToken: tools.pageToken prefix: tools.prefix projection: tools.projection softDeleted: tools.softDeleted startOffset: tools.startOffset versions: tools.versions outputParameters: - type: object mapping: $. - name: google-cloud-storage-watch-object description: Google Cloud Storage Watch for Object Changes hints: readOnly: false destructive: false idempotent: false call: json-objects.watchallobjects with: prefix: tools.prefix body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-get-object description: Google Cloud Storage Get an Object hints: readOnly: true destructive: false idempotent: true call: json-objects.getobject with: alt: tools.alt generation: tools.generation ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch projection: tools.projection softDeleted: tools.softDeleted outputParameters: - type: object mapping: $. - name: google-cloud-storage-update-object description: Google Cloud Storage Update an Object hints: readOnly: false destructive: false idempotent: true call: json-objects.updateobject with: generation: tools.generation ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch predefinedAcl: tools.predefinedAcl projection: tools.projection body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-patch-object description: Google Cloud Storage Patch an Object hints: readOnly: false destructive: false idempotent: true call: json-objects.patchobject with: generation: tools.generation ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch predefinedAcl: tools.predefinedAcl projection: tools.projection body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-delete-object description: Google Cloud Storage Delete an Object hints: readOnly: false destructive: true idempotent: true call: json-objects.deleteobject with: generation: tools.generation ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch outputParameters: - type: object mapping: $. - name: google-cloud-storage-compose-objects description: Google Cloud Storage Compose Objects hints: readOnly: false destructive: false idempotent: false call: json-objects.composeobject with: object: tools.object ifGenerationMatch: tools.ifGenerationMatch ifMetagenerationMatch: tools.ifMetagenerationMatch body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-copy-object description: Google Cloud Storage Copy an Object hints: readOnly: false destructive: false idempotent: false call: json-objects.copyobject with: bucket: tools.bucket object: tools.object destinationBucket: tools.destinationBucket destinationObject: tools.destinationObject destinationPredefinedAcl: tools.destinationPredefinedAcl ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch ifSourceGenerationMatch: tools.ifSourceGenerationMatch ifSourceGenerationNotMatch: tools.ifSourceGenerationNotMatch ifSourceMetagenerationMatch: tools.ifSourceMetagenerationMatch ifSourceMetagenerationNotMatch: tools.ifSourceMetagenerationNotMatch projection: tools.projection sourceGeneration: tools.sourceGeneration body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-rewrite-object description: Google Cloud Storage Rewrite an Object hints: readOnly: false destructive: false idempotent: false call: json-objects.rewriteobject with: bucket: tools.bucket object: tools.object destinationBucket: tools.destinationBucket destinationObject: tools.destinationObject destinationKmsKeyName: tools.destinationKmsKeyName destinationPredefinedAcl: tools.destinationPredefinedAcl ifGenerationMatch: tools.ifGenerationMatch ifGenerationNotMatch: tools.ifGenerationNotMatch ifMetagenerationMatch: tools.ifMetagenerationMatch ifMetagenerationNotMatch: tools.ifMetagenerationNotMatch ifSourceGenerationMatch: tools.ifSourceGenerationMatch ifSourceGenerationNotMatch: tools.ifSourceGenerationNotMatch ifSourceMetagenerationMatch: tools.ifSourceMetagenerationMatch ifSourceMetagenerationNotMatch: tools.ifSourceMetagenerationNotMatch maxBytesRewrittenPerCall: tools.maxBytesRewrittenPerCall projection: tools.projection rewriteToken: tools.rewriteToken sourceGeneration: tools.sourceGeneration body: tools.body outputParameters: - type: object mapping: $. - name: google-cloud-storage-stop-notification description: Google Cloud Storage Stop a Notification Channel hints: readOnly: false destructive: false idempotent: false call: json-objects.stopchannel with: body: tools.body outputParameters: - type: object mapping: $.