addedInput schema / properties / copyright
Added value: +{
+ "description": "Any selected source copyright status: \"true\" copyrighted, \"false\" public domain in the USA, \"null\" unknown. Empty means all statuses; this is not worldwide legal clearance.",
+ "items": {
+ "enum": [
+ "true",
+ "false",
+ "null"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+}
changedInput schema / properties / ids / description
Previous value: -"Narrow results to specific Gutenberg ID numbers. Other filters still apply. Useful for batch pre-fetching known IDs; use gutenberg_get_book for single-ID lookups."New value: +"Narrow results to these Gutenberg IDs, intersected with other filters. An empty list selects nothing; omit for unrestricted IDs. Use gutenberg_get_book for full single-ID metadata."
addedInput schema / properties / mime_type
Added value: +{
+ "description": "Literal prefix of a format MIME key, such as \"text/plain\" or \"text/html\". Blank means unset.",
+ "type": "string"
+}
changedInput schema / properties / query / description
Previous value: -"Words to match against book titles and author names (case-insensitive, space-separated). Example: \"dickens expectations\" matches Great Expectations by Charles Dickens."New value: +"Every nonblank whitespace-separated word must match title or author name as a case-insensitive literal substring. More than four words require the local mirror; live fallback rejects longer queries. Example: \"dickens expectations\" matches Great Expectations."
changedOutput schema / anyOf
Previous value: -[
- {
- "not": {
- "required": [
- "error"
- ]
- },
- "required": [
- "books",
- "totalCount",
- "page",
- "hasMore"
- ]
- },
- {
- "required": [
- "error"
- ]
- }
-]New value: +[
+ {
+ "not": {
+ "required": [
+ "error"
+ ]
+ },
+ "required": [
+ "books",
+ "totalCount",
+ "page",
+ "hasMore",
+ "effectiveCriteria"
+ ]
+ },
+ {
+ "required": [
+ "error"
+ ]
+ }
+]
addedOutput schema / properties / effectiveCriteria
Added value: +{
+ "additionalProperties": false,
+ "description": "Normalized search criteria, including sort and page defaults.",
+ "properties": {
+ "author_year_end": {
+ "description": "At least one author has a birth or death year on or before this year (CE positive, BCE negative).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "author_year_start": {
+ "description": "At least one author has a birth or death year on or after this year (CE positive, BCE negative).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "copyright": {
+ "description": "Any selected source copyright status: \"true\" copyrighted, \"false\" public domain in the USA, \"null\" unknown. Empty means all statuses; this is not worldwide legal clearance.",
+ "items": {
+ "enum": [
+ "true",
+ "false",
+ "null"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "ids": {
+ "description": "Restrict to these Gutenberg IDs, intersected with other filters. An empty list selects nothing; omit for unrestricted IDs.",
+ "items": {
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991,
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ "languages": {
+ "description": "Any listed two-character ISO 639-1 language code; empty means all languages.",
+ "items": {
+ "maxLength": 2,
+ "minLength": 2,
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "mime_type": {
+ "description": "Literal prefix of a format MIME key, such as \"text/plain\" or \"text/html\". Blank means unset.",
+ "type": "string"
+ },
+ "page": {
+ "default": 1,
+ "description": "One-indexed page of at most 32 matches. Pages beyond the result range are errors.",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991,
+ "type": "integer"
+ },
+ "query": {
+ "description": "Every nonblank word must occur in the title or an author name, case-insensitively, as a literal substring. More than four words require the local mirror; live fallback rejects longer queries. Whitespace separates words.",
+ "type": "string"
+ },
+ "sort": {
+ "default": "popular",
+ "description": "Popular orders by source-snapshot downloads in the last 30 days, with ID tie-breaks locally; ascending and descending order by Gutenberg ID.",
+ "enum": [
+ "popular",
+ "ascending",
+ "descending"
+ ],
+ "type": "string"
+ },
+ "topic": {
+ "description": "Case-insensitive phrase in a subject or bookshelf; blank means unset.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "sort",
+ "page"
+ ],
+ "type": "object"
+}
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `no_results`: The query matched no books in the catalog. `page_out_of_range`: The requested page number is past the last page of results for this query. `catalog_unavailable`: The Project Gutenberg catalog did not answer within the time this server allows for one search. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `query_requires_mirror`: More than four query words were supplied while the local mirror could not answer. `page_out_of_range`: The requested page number is past the last page of results for this query. `catalog_unavailable`: The Project Gutenberg catalog did not answer within the time this server allows for one search. Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "no_results",
- "page_out_of_range",
- "catalog_unavailable"
-]New value: +[
+ "query_requires_mirror",
+ "page_out_of_range",
+ "catalog_unavailable"
+]
addedOutput schema / properties / notice
Added value: +{
+ "description": "Actionable guidance for an empty selection.",
+ "type": "string"
+}