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"
+}
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"
+}
changedOutput schema / anyOf
Previous value: -[
- {
- "not": {
- "required": [
- "error"
- ]
- },
- "required": [
- "requestedLimit",
- "appliedLimit",
- "books",
- "totalInCatalog",
- "truncated",
- "shown",
- "cap"
- ]
- },
- {
- "required": [
- "error"
- ]
- }
-]New value: +[
+ {
+ "not": {
+ "required": [
+ "error"
+ ]
+ },
+ "required": [
+ "requestedLimit",
+ "appliedLimit",
+ "books",
+ "totalInCatalog",
+ "effectiveCriteria",
+ "truncated",
+ "shown",
+ "cap"
+ ]
+ },
+ {
+ "required": [
+ "error"
+ ]
+ }
+]
addedOutput schema / properties / continuation
Added value: +{
+ "additionalProperties": false,
+ "description": "Present only when more matching books exist.",
+ "properties": {
+ "arguments": {
+ "additionalProperties": false,
+ "description": "Executable search arguments preserving all filters. Page 1 may repeat already shown books when the browse cap cuts a page.",
+ "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"
+ },
+ "tool": {
+ "const": "gutenberg_search_books",
+ "description": "Tool to call for the remaining matching books.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "tool",
+ "arguments"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / effectiveCriteria
Added value: +{
+ "additionalProperties": false,
+ "description": "Normalized browse criteria, including popular sort and first page.",
+ "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`: No books match the language/topic filter combination. `catalog_unavailable`: The Project Gutenberg catalog did not answer within the time this server allows for one browse. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `catalog_unavailable`: The Project Gutenberg catalog did not answer within the time this server allows for one browse. Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "no_results",
- "catalog_unavailable"
-]New value: +[
+ "catalog_unavailable"
+]
addedOutput schema / properties / notice
Added value: +{
+ "description": "Guidance for empty or capped results.",
+ "type": "string"
+}