naftiko: 1.0.0-alpha2 info: label: Google Books API description: 'Google Books API. 8 operations. Lead operation: List my bookshelves. Self-contained Naftiko capability covering one Google Books business surface.' tags: - Google Books - Google Books API created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: GOOGLE_BOOKS_API_KEY: GOOGLE_BOOKS_API_KEY capability: consumes: - type: http namespace: books baseUri: https://www.googleapis.com/books/v1 description: Google Books API business capability. Self-contained, no shared references. resources: - name: mylibrary-bookshelves path: /mylibrary/bookshelves operations: - name: listmybookshelves method: GET description: List my bookshelves outputRawFormat: json outputParameters: - name: result type: object value: $. - name: mylibrary-bookshelves-shelf-addVolume path: /mylibrary/bookshelves/{shelf}/addVolume operations: - name: addvolumetobookshelf method: POST description: Add volume to bookshelf outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: shelf in: path type: string required: true - name: volumeId in: query type: string required: true - name: mylibrary-bookshelves-shelf-removeVolume path: /mylibrary/bookshelves/{shelf}/removeVolume operations: - name: removevolumefrombookshelf method: POST description: Remove volume from bookshelf outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: shelf in: path type: string required: true - name: volumeId in: query type: string required: true - name: users-userId-bookshelves path: /users/{userId}/bookshelves operations: - name: listbookshelves method: GET description: List bookshelves outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: userId in: path type: string required: true - name: users-userId-bookshelves-shelf path: /users/{userId}/bookshelves/{shelf} operations: - name: getbookshelf method: GET description: Get a bookshelf outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: userId in: path type: string required: true - name: shelf in: path type: string required: true - name: users-userId-bookshelves-shelf-volumes path: /users/{userId}/bookshelves/{shelf}/volumes operations: - name: listbookshelfvolumes method: GET description: List volumes in a bookshelf outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: userId in: path type: string required: true - name: shelf in: path type: string required: true - name: maxResults in: query type: integer - name: startIndex in: query type: integer - name: volumes path: /volumes operations: - name: listvolumes method: GET description: Search for volumes outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: q in: query type: string description: Full-text search query string. required: true - name: maxResults in: query type: integer - name: startIndex in: query type: integer - name: orderBy in: query type: string - name: printType in: query type: string - name: filter in: query type: string - name: langRestrict in: query type: string - name: volumes-volumeId path: /volumes/{volumeId} operations: - name: getvolume method: GET description: Get a volume outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: volumeId in: path type: string required: true authentication: type: bearer token: '{{env.GOOGLE_BOOKS_API_KEY}}' exposes: - type: rest namespace: books-rest port: 8080 description: REST adapter for Google Books API. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/mylibrary/bookshelves name: mylibrary-bookshelves description: REST surface for mylibrary-bookshelves. operations: - method: GET name: listmybookshelves description: List my bookshelves call: books.listmybookshelves outputParameters: - type: object mapping: $. - path: /v1/mylibrary/bookshelves/{shelf}/addvolume name: mylibrary-bookshelves-shelf-addvolume description: REST surface for mylibrary-bookshelves-shelf-addVolume. operations: - method: POST name: addvolumetobookshelf description: Add volume to bookshelf call: books.addvolumetobookshelf with: shelf: rest.shelf volumeId: rest.volumeId outputParameters: - type: object mapping: $. - path: /v1/mylibrary/bookshelves/{shelf}/removevolume name: mylibrary-bookshelves-shelf-removevolume description: REST surface for mylibrary-bookshelves-shelf-removeVolume. operations: - method: POST name: removevolumefrombookshelf description: Remove volume from bookshelf call: books.removevolumefrombookshelf with: shelf: rest.shelf volumeId: rest.volumeId outputParameters: - type: object mapping: $. - path: /v1/users/{userid}/bookshelves name: users-userid-bookshelves description: REST surface for users-userId-bookshelves. operations: - method: GET name: listbookshelves description: List bookshelves call: books.listbookshelves with: userId: rest.userId outputParameters: - type: object mapping: $. - path: /v1/users/{userid}/bookshelves/{shelf} name: users-userid-bookshelves-shelf description: REST surface for users-userId-bookshelves-shelf. operations: - method: GET name: getbookshelf description: Get a bookshelf call: books.getbookshelf with: userId: rest.userId shelf: rest.shelf outputParameters: - type: object mapping: $. - path: /v1/users/{userid}/bookshelves/{shelf}/volumes name: users-userid-bookshelves-shelf-volumes description: REST surface for users-userId-bookshelves-shelf-volumes. operations: - method: GET name: listbookshelfvolumes description: List volumes in a bookshelf call: books.listbookshelfvolumes with: userId: rest.userId shelf: rest.shelf maxResults: rest.maxResults startIndex: rest.startIndex outputParameters: - type: object mapping: $. - path: /v1/volumes name: volumes description: REST surface for volumes. operations: - method: GET name: listvolumes description: Search for volumes call: books.listvolumes with: q: rest.q maxResults: rest.maxResults startIndex: rest.startIndex orderBy: rest.orderBy printType: rest.printType filter: rest.filter langRestrict: rest.langRestrict outputParameters: - type: object mapping: $. - path: /v1/volumes/{volumeid} name: volumes-volumeid description: REST surface for volumes-volumeId. operations: - method: GET name: getvolume description: Get a volume call: books.getvolume with: volumeId: rest.volumeId outputParameters: - type: object mapping: $. - type: mcp namespace: books-mcp port: 9090 transport: http description: MCP adapter for Google Books API. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: list-my-bookshelves description: List my bookshelves hints: readOnly: true destructive: false idempotent: true call: books.listmybookshelves outputParameters: - type: object mapping: $. - name: add-volume-bookshelf description: Add volume to bookshelf hints: readOnly: false destructive: false idempotent: false call: books.addvolumetobookshelf with: shelf: tools.shelf volumeId: tools.volumeId outputParameters: - type: object mapping: $. - name: remove-volume-bookshelf description: Remove volume from bookshelf hints: readOnly: false destructive: false idempotent: false call: books.removevolumefrombookshelf with: shelf: tools.shelf volumeId: tools.volumeId outputParameters: - type: object mapping: $. - name: list-bookshelves description: List bookshelves hints: readOnly: true destructive: false idempotent: true call: books.listbookshelves with: userId: tools.userId outputParameters: - type: object mapping: $. - name: get-bookshelf description: Get a bookshelf hints: readOnly: true destructive: false idempotent: true call: books.getbookshelf with: userId: tools.userId shelf: tools.shelf outputParameters: - type: object mapping: $. - name: list-volumes-bookshelf description: List volumes in a bookshelf hints: readOnly: true destructive: false idempotent: true call: books.listbookshelfvolumes with: userId: tools.userId shelf: tools.shelf maxResults: tools.maxResults startIndex: tools.startIndex outputParameters: - type: object mapping: $. - name: search-volumes description: Search for volumes hints: readOnly: true destructive: false idempotent: true call: books.listvolumes with: q: tools.q maxResults: tools.maxResults startIndex: tools.startIndex orderBy: tools.orderBy printType: tools.printType filter: tools.filter langRestrict: tools.langRestrict outputParameters: - type: object mapping: $. - name: get-volume description: Get a volume hints: readOnly: true destructive: false idempotent: true call: books.getvolume with: volumeId: tools.volumeId outputParameters: - type: object mapping: $.