Gutendex · Capability

Gutendex API — Books

Gutendex API — Books. 2 operations: List Books and Get Book. Self-contained Naftiko capability covering the full Gutendex public API surface for Project Gutenberg ebook metadata.

Run with Naftiko GutendexBooksProject Gutenberg

What You Can Do

GET
Listbooks — List Books
/v1/books
GET
Getbook — Get Book
/v1/books/{id}

MCP Tools

gutendex-list-books

List Books from Project Gutenberg with optional filters.

read-only idempotent
gutendex-get-book

Get a single Project Gutenberg book by ID.

read-only idempotent

Capability Spec

gutendex-books.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Gutendex API — Books
  description: 'Gutendex API — Books. 2 operations: List Books and Get Book. Self-contained
    Naftiko capability covering the full Gutendex public API surface for Project Gutenberg
    ebook metadata.'
  tags:
    - Gutendex
    - Books
    - Project Gutenberg
  created: '2026-05-29'
  modified: '2026-05-29'
binds: []
capability:
  consumes:
    - type: http
      namespace: gutendex-books
      baseUri: https://gutendex.com
      description: Gutendex API — Books business capability. Self-contained, no shared references. No authentication required.
      resources:
        - name: books
          path: /books
          operations:
            - name: listBooks
              method: GET
              description: List Books
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: $.
              inputParameters:
                - name: author_year_start
                  in: query
                  type: integer
                  description: Find books with at least one author alive on or after this year.
                  required: false
                - name: author_year_end
                  in: query
                  type: integer
                  description: Find books with at least one author alive on or before this year.
                  required: false
                - name: copyright
                  in: query
                  type: string
                  description: Filter by copyright status (true, false, null).
                  required: false
                - name: ids
                  in: query
                  type: string
                  description: Comma-separated Project Gutenberg IDs.
                  required: false
                - name: languages
                  in: query
                  type: string
                  description: Comma-separated two-character language codes.
                  required: false
                - name: mime_type
                  in: query
                  type: string
                  description: Prefix-matched MIME type.
                  required: false
                - name: search
                  in: query
                  type: string
                  description: Space-separated keywords for authors and titles.
                  required: false
                - name: sort
                  in: query
                  type: string
                  description: Sort order (popular, ascending, descending).
                  required: false
                - name: topic
                  in: query
                  type: string
                  description: Case-insensitive search across bookshelves and subjects.
                  required: false
        - name: book
          path: /books/{id}
          operations:
            - name: getBook
              method: GET
              description: Get Book
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: $.
              inputParameters:
                - name: id
                  in: path
                  type: integer
                  description: Project Gutenberg ID number of the book.
                  required: true
      authentication:
        type: none
  exposes:
    - type: rest
      namespace: gutendex-books-rest
      port: 8080
      description: REST adapter for Gutendex API — Books. One Spectral-compliant resource per consumed operation, prefixed with /v1.
      resources:
        - path: /v1/books
          name: books
          description: REST surface for listing Project Gutenberg books.
          operations:
            - method: GET
              name: listBooks
              description: List Books
              call: gutendex-books.listBooks
              with:
                author_year_start: rest.query.author_year_start
                author_year_end: rest.query.author_year_end
                copyright: rest.query.copyright
                ids: rest.query.ids
                languages: rest.query.languages
                mime_type: rest.query.mime_type
                search: rest.query.search
                sort: rest.query.sort
                topic: rest.query.topic
              outputParameters:
                - type: object
                  mapping: $.
        - path: /v1/books/{id}
          name: book
          description: REST surface for retrieving a single Project Gutenberg book by ID.
          operations:
            - method: GET
              name: getBook
              description: Get Book
              call: gutendex-books.getBook
              with:
                id: rest.path.id
              outputParameters:
                - type: object
                  mapping: $.
    - type: mcp
      namespace: gutendex-books-mcp
      port: 9090
      transport: http
      description: MCP adapter for Gutendex API — Books. One tool per consumed operation, routed inline through this capability's consumes block.
      tools:
        - name: gutendex-list-books
          description: List Books from Project Gutenberg with optional filters.
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: gutendex-books.listBooks
          with:
            author_year_start: tools.author_year_start
            author_year_end: tools.author_year_end
            copyright: tools.copyright
            ids: tools.ids
            languages: tools.languages
            mime_type: tools.mime_type
            search: tools.search
            sort: tools.sort
            topic: tools.topic
          outputParameters:
            - type: object
              mapping: $.
        - name: gutendex-get-book
          description: Get a single Project Gutenberg book by ID.
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: gutendex-books.getBook
          with:
            id: tools.id
          outputParameters:
            - type: object
              mapping: $.