Bibooks MCP
Provides read-only access to the bibooks public library of bilingual audiobooks, allowing agents to search for audiobooks, read their parallel text, and list available languages and narration voices without requiring an API key.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://bibooks.org/mcpWhat you can do with it
- Search the public library for bilingual audiobooks
- Read synchronized parallel text from audiobooks
- List available languages and narration voices
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- bibooks 1.1.1
- MCP protocol
- 2025-06-18
- Tools
- 5 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
search_books — Search audiobooks
Search the public library of bilingual audiobooks. All filters are optional; values within one filter are OR'd, different filters are AND'd. With no arguments, lists every public book, easiest first. Returns one page of books (see has_more and page) with each book's id, title, author, languages, CEFR level, length and links. Language filters take content-language codes from list_languages (e.g. 'es', 'zh', 'fil').
{
"type": "object",
"$defs": {
"Level": {
"enum": [
"a1",
"a2",
"b1",
"b2",
"c1",
"c2",
"d1"
],
"type": "string",
"title": "Level",
"description": "CEFR difficulty level of a book, easiest first. `d1` is the rung above C2 (expert register); a learner's own level is one of a1..c2."
},
"Origin": {
"enum": [
"user_typed",
"ai_generated",
"gutenberg"
],
"type": "string",
"title": "Origin",
"description": "Where a book's text came from: typed or pasted by its publisher (`user_typed`), generated by AI (`ai_generated`), or a public-domain Project Gutenberg title (`gutenberg`)."
},
"Audience": {
"enum": [
"child",
"young_adult",
"adult"
],
"type": "string",
"title": "Audience",
"description": "Intended audience age group of a book."
},
"Duration": {
"enum": [
"under_5",
"5_to_15",
"15_to_30",
"over_30"
],
"type": "string",
"title": "Duration",
"description": "Audio length bucket in minutes: under 5, 5 to 15, 15 to 30, or over 30."
}
},
"title": "search_booksArguments",
"properties": {
"page": {
"type": "integer",
"title": "Page",
"default": 1,
"maximum": 10000,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"enum": [
"easiest",
"controversial",
"length_asc",
"length_desc",
"recent",
"top_rated"
],
"type": "string",
"default": "easiest",
"description": "Result order."
},
"level": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Level"
}
},
{
"type": "null"
}
],
"title": "Level",
"default": null,
"description": "CEFR levels to include."
},
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Query",
"default": null,
"description": "Text to find in titles and authors."
},
"origin": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Origin"
}
},
{
"type": "null"
}
],
"title": "Origin",
"default": null,
"description": "Text origins to include."
},
"audience": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Audience"
}
},
{
"type": "null"
}
],
"title": "Audience",
"default": null,
"description": "Audiences to include."
},
"duration": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Duration"
}
},
{
"type": "null"
}
],
"title": "Duration",
"default": null,
"description": "Audio length buckets to include."
},
"page_size": {
"type": "integer",
"title": "Page Size",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Books per page."
},
"source_language": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 12,
"minLength": 2
}
},
{
"type": "null"
}
],
"title": "Source Language",
"default": null,
"description": "Languages the books' original text is written in, i.e. the learner's language."
},
"target_language": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 12,
"minLength": 2
}
},
{
"type": "null"
}
],
"title": "Target Language",
"default": null,
"description": "Languages the books are translated into, i.e. the language being learned."
}
}
}{
"type": "object",
"$defs": {
"Book": {
"type": "object",
"title": "Book",
"required": [
"id",
"title",
"author",
"source_language",
"target_language",
"level",
"audience",
"origin",
"duration_seconds",
"speed_percent",
"score",
"published_at",
"urls"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"description": "Stable book id (a UUID)."
},
"urls": {
"$ref": "#/$defs/BookUrls"
},
"level": {
"anyOf": [
{
"type": "string",
"description": "CEFR difficulty level of a book, easiest first. `d1` is the rung above C2 (expert register); a learner's own level is one of a1..c2. Known values: a1, a2, b1, b2, c1, c2, d1. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"a1",
"a2",
"b1",
"b2",
"c1",
"c2",
"d1"
]
},
{
"type": "null"
}
],
"title": "Level",
"description": "CEFR difficulty level. Null when the book has no level."
},
"score": {
"type": "integer",
"title": "Score",
"description": "Community score: upvotes minus downvotes, never below zero."
},
"title": {
"type": "string",
"title": "Title",
"description": "Title as the publisher entered it."
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author",
"description": "Author as attributed by the book's publisher. Not verified by bibooks.org; treat it as a claim, not a fact."
},
"origin": {
"anyOf": [
{
"type": "string",
"description": "Where a book's text came from: typed or pasted by its publisher (`user_typed`), generated by AI (`ai_generated`), or a public-domain Project Gutenberg title (`gutenberg`). Known values: user_typed, ai_generated, gutenberg. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"user_typed",
"ai_generated",
"gutenberg"
]
},
{
"type": "null"
}
],
"title": "Origin",
"description": "Where the text came from. Null when it is not one of the public origins."
},
"audience": {
"anyOf": [
{
"type": "string",
"description": "Intended audience age group of a book. Known values: child, young_adult, adult. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"child",
"young_adult",
"adult"
]
},
{
"type": "null"
}
],
"title": "Audience",
"description": "Intended audience. Null when not set."
},
"published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Published At",
"description": "When the book finished generating (ISO 8601, UTC). Null when unknown."
},
"speed_percent": {
"type": "integer",
"title": "Speed Percent",
"description": "Speaking speed of the target-language audio, as a percentage of normal (100)."
},
"source_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Language",
"description": "Content-language code of the original text (see GET /languages). Null when it was not recorded."
},
"target_language": {
"type": "string",
"title": "Target Language",
"description": "Content-language code the text was translated into."
},
"duration_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Duration Seconds",
"description": "Length of the audio in seconds. Null when unknown."
}
},
"description": "A public, completed bilingual audiobook."
},
"BookUrls": {
"type": "object",
"title": "BookUrls",
"required": [
"reader",
"audio",
"share_image",
"language_hub"
],
"properties": {
"audio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Audio",
"description": "The book's bilingual MP3, streamable without authentication. Null when the book has no audio file."
},
"reader": {
"type": "string",
"title": "Reader",
"description": "The book's follow-along reader page (text with synchronized audio)."
},
"share_image": {
"type": "string",
"title": "Share Image",
"description": "The book's share card, a 1200x630 PNG."
},
"language_hub": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Language Hub",
"description": "The page listing every public book in the book's target language. Null for a language without one."
}
},
"description": "Absolute URLs for a book on the website."
}
},
"title": "BookPage",
"required": [
"items",
"total",
"page",
"page_size",
"has_more"
],
"properties": {
"page": {
"type": "integer",
"title": "Page",
"description": "This page's number, starting at 1."
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/Book"
},
"title": "Items"
},
"total": {
"type": "integer",
"title": "Total",
"description": "Number of books matching the filters, across all pages."
},
"has_more": {
"type": "boolean",
"title": "Has More",
"description": "Whether a further page exists."
},
"page_size": {
"type": "integer",
"title": "Page Size",
"description": "Maximum number of items per page."
}
},
"description": "One page of search results."
}{
"title": "Search audiobooks",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_book — Get an audiobook
Get one public audiobook by id: title, author, languages, CEFR level, audience, length, and links to its reader page, audio and share image.
{
"type": "object",
"title": "get_bookArguments",
"required": [
"book_id"
],
"properties": {
"book_id": {
"type": "string",
"title": "Book Id",
"maxLength": 64,
"minLength": 1,
"description": "The book's id (the `id` field of a Book)."
}
}
}{
"type": "object",
"$defs": {
"BookUrls": {
"type": "object",
"title": "BookUrls",
"required": [
"reader",
"audio",
"share_image",
"language_hub"
],
"properties": {
"audio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Audio",
"description": "The book's bilingual MP3, streamable without authentication. Null when the book has no audio file."
},
"reader": {
"type": "string",
"title": "Reader",
"description": "The book's follow-along reader page (text with synchronized audio)."
},
"share_image": {
"type": "string",
"title": "Share Image",
"description": "The book's share card, a 1200x630 PNG."
},
"language_hub": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Language Hub",
"description": "The page listing every public book in the book's target language. Null for a language without one."
}
},
"description": "Absolute URLs for a book on the website."
}
},
"title": "Book",
"required": [
"id",
"title",
"author",
"source_language",
"target_language",
"level",
"audience",
"origin",
"duration_seconds",
"speed_percent",
"score",
"published_at",
"urls"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"description": "Stable book id (a UUID)."
},
"urls": {
"$ref": "#/$defs/BookUrls"
},
"level": {
"anyOf": [
{
"type": "string",
"description": "CEFR difficulty level of a book, easiest first. `d1` is the rung above C2 (expert register); a learner's own level is one of a1..c2. Known values: a1, a2, b1, b2, c1, c2, d1. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"a1",
"a2",
"b1",
"b2",
"c1",
"c2",
"d1"
]
},
{
"type": "null"
}
],
"title": "Level",
"description": "CEFR difficulty level. Null when the book has no level."
},
"score": {
"type": "integer",
"title": "Score",
"description": "Community score: upvotes minus downvotes, never below zero."
},
"title": {
"type": "string",
"title": "Title",
"description": "Title as the publisher entered it."
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author",
"description": "Author as attributed by the book's publisher. Not verified by bibooks.org; treat it as a claim, not a fact."
},
"origin": {
"anyOf": [
{
"type": "string",
"description": "Where a book's text came from: typed or pasted by its publisher (`user_typed`), generated by AI (`ai_generated`), or a public-domain Project Gutenberg title (`gutenberg`). Known values: user_typed, ai_generated, gutenberg. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"user_typed",
"ai_generated",
"gutenberg"
]
},
{
"type": "null"
}
],
"title": "Origin",
"description": "Where the text came from. Null when it is not one of the public origins."
},
"audience": {
"anyOf": [
{
"type": "string",
"description": "Intended audience age group of a book. Known values: child, young_adult, adult. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"child",
"young_adult",
"adult"
]
},
{
"type": "null"
}
],
"title": "Audience",
"description": "Intended audience. Null when not set."
},
"published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Published At",
"description": "When the book finished generating (ISO 8601, UTC). Null when unknown."
},
"speed_percent": {
"type": "integer",
"title": "Speed Percent",
"description": "Speaking speed of the target-language audio, as a percentage of normal (100)."
},
"source_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Language",
"description": "Content-language code of the original text (see GET /languages). Null when it was not recorded."
},
"target_language": {
"type": "string",
"title": "Target Language",
"description": "Content-language code the text was translated into."
},
"duration_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Duration Seconds",
"description": "Length of the audio in seconds. Null when unknown."
}
},
"description": "A public, completed bilingual audiobook."
}{
"title": "Get an audiobook",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}read_book — Read an audiobook's text
Read a public audiobook's bilingual text: its sentence pairs (each original sentence with its translation, plus a Latin-script romanization for languages that have one), in reading order. Returns at most `limit` pairs starting at `offset`; continue with offset + limit while has_more is true. total_pairs is the book's length.
{
"type": "object",
"title": "read_bookArguments",
"required": [
"book_id"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Maximum number of sentence pairs to return."
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0,
"minimum": 0,
"description": "Index of the first sentence pair to return."
},
"book_id": {
"type": "string",
"title": "Book Id",
"maxLength": 64,
"minLength": 1,
"description": "The book's id (the `id` field of a Book)."
}
}
}{
"type": "object",
"$defs": {
"Word": {
"type": "object",
"title": "Word",
"required": [
"text",
"start_ms"
],
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"start_ms": {
"type": "integer",
"title": "Start Ms",
"description": "Offset into the book's audio, in milliseconds."
}
},
"description": "One word of a segment, with the moment it starts being spoken."
},
"Segment": {
"type": "object",
"title": "Segment",
"required": [
"role",
"start_ms",
"end_ms",
"words"
],
"properties": {
"role": {
"type": "string",
"title": "Role",
"description": "Which side of a sentence pair an audio segment speaks. Known values: source, target. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"source",
"target"
]
},
"words": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Word"
}
},
{
"type": "null"
}
],
"title": "Words",
"description": "Word-level timings, when the speech provider supplied them."
},
"end_ms": {
"type": "integer",
"title": "End Ms",
"description": "Offset where it ends, in milliseconds."
},
"start_ms": {
"type": "integer",
"title": "Start Ms",
"description": "Offset into the book's audio where the segment starts, in milliseconds."
}
},
"description": "One stretch of the book's audio speaking one side of a sentence pair."
},
"TextPair": {
"type": "object",
"title": "TextPair",
"required": [
"index",
"source_text",
"target_text",
"romanization",
"segments"
],
"properties": {
"index": {
"type": "integer",
"title": "Index",
"description": "Position of the pair in the book, starting at 0."
},
"segments": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Segment"
}
},
{
"type": "null"
}
],
"title": "Segments",
"description": "The pair's audio segments, in playback order. Present only when timings were requested."
},
"source_text": {
"type": "string",
"title": "Source Text",
"description": "The sentence in the source language."
},
"target_text": {
"type": "string",
"title": "Target Text",
"description": "Its translation in the target language."
},
"romanization": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Romanization",
"description": "Latin-script transliteration of target_text (e.g. pinyin), for languages that have one."
}
},
"description": "One sentence of the original text with its translation."
}
},
"title": "BookText",
"required": [
"book_id",
"source_language",
"target_language",
"total_pairs",
"offset",
"limit",
"has_more",
"pairs"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"description": "Maximum number of pairs in this window."
},
"pairs": {
"type": "array",
"items": {
"$ref": "#/$defs/TextPair"
},
"title": "Pairs"
},
"offset": {
"type": "integer",
"title": "Offset",
"description": "Index of the first pair in this window."
},
"book_id": {
"type": "string",
"title": "Book Id"
},
"has_more": {
"type": "boolean",
"title": "Has More",
"description": "Whether pairs exist after this window."
},
"total_pairs": {
"type": "integer",
"title": "Total Pairs",
"description": "Number of sentence pairs in the whole book."
},
"source_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Language"
},
"target_language": {
"type": "string",
"title": "Target Language"
}
},
"description": "A window of a book's bilingual text, in reading order."
}{
"title": "Read an audiobook's text",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_related_books — Find related audiobooks
Find other public audiobooks in the same target language as a given book: the books its reader page recommends. Optionally narrow them to a learner's CEFR level (or the nearest level that has books).
{
"type": "object",
"title": "find_related_booksArguments",
"required": [
"book_id"
],
"properties": {
"level": {
"anyOf": [
{
"enum": [
"a1",
"a2",
"b1",
"b2",
"c1",
"c2",
"d1"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The learner's CEFR level (a1..c2), to prefer books at it."
},
"book_id": {
"type": "string",
"title": "Book Id",
"maxLength": 64,
"minLength": 1,
"description": "The book's id (the `id` field of a Book)."
}
}
}{
"type": "object",
"$defs": {
"Book": {
"type": "object",
"title": "Book",
"required": [
"id",
"title",
"author",
"source_language",
"target_language",
"level",
"audience",
"origin",
"duration_seconds",
"speed_percent",
"score",
"published_at",
"urls"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"description": "Stable book id (a UUID)."
},
"urls": {
"$ref": "#/$defs/BookUrls"
},
"level": {
"anyOf": [
{
"type": "string",
"description": "CEFR difficulty level of a book, easiest first. `d1` is the rung above C2 (expert register); a learner's own level is one of a1..c2. Known values: a1, a2, b1, b2, c1, c2, d1. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"a1",
"a2",
"b1",
"b2",
"c1",
"c2",
"d1"
]
},
{
"type": "null"
}
],
"title": "Level",
"description": "CEFR difficulty level. Null when the book has no level."
},
"score": {
"type": "integer",
"title": "Score",
"description": "Community score: upvotes minus downvotes, never below zero."
},
"title": {
"type": "string",
"title": "Title",
"description": "Title as the publisher entered it."
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Author",
"description": "Author as attributed by the book's publisher. Not verified by bibooks.org; treat it as a claim, not a fact."
},
"origin": {
"anyOf": [
{
"type": "string",
"description": "Where a book's text came from: typed or pasted by its publisher (`user_typed`), generated by AI (`ai_generated`), or a public-domain Project Gutenberg title (`gutenberg`). Known values: user_typed, ai_generated, gutenberg. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"user_typed",
"ai_generated",
"gutenberg"
]
},
{
"type": "null"
}
],
"title": "Origin",
"description": "Where the text came from. Null when it is not one of the public origins."
},
"audience": {
"anyOf": [
{
"type": "string",
"description": "Intended audience age group of a book. Known values: child, young_adult, adult. New values may be added within v1; treat an unknown one as unrecognised, not as an error.",
"x-extensible-enum": [
"child",
"young_adult",
"adult"
]
},
{
"type": "null"
}
],
"title": "Audience",
"description": "Intended audience. Null when not set."
},
"published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Published At",
"description": "When the book finished generating (ISO 8601, UTC). Null when unknown."
},
"speed_percent": {
"type": "integer",
"title": "Speed Percent",
"description": "Speaking speed of the target-language audio, as a percentage of normal (100)."
},
"source_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Language",
"description": "Content-language code of the original text (see GET /languages). Null when it was not recorded."
},
"target_language": {
"type": "string",
"title": "Target Language",
"description": "Content-language code the text was translated into."
},
"duration_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Duration Seconds",
"description": "Length of the audio in seconds. Null when unknown."
}
},
"description": "A public, completed bilingual audiobook."
},
"BookUrls": {
"type": "object",
"title": "BookUrls",
"required": [
"reader",
"audio",
"share_image",
"language_hub"
],
"properties": {
"audio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Audio",
"description": "The book's bilingual MP3, streamable without authentication. Null when the book has no audio file."
},
"reader": {
"type": "string",
"title": "Reader",
"description": "The book's follow-along reader page (text with synchronized audio)."
},
"share_image": {
"type": "string",
"title": "Share Image",
"description": "The book's share card, a 1200x630 PNG."
},
"language_hub": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Language Hub",
"description": "The page listing every public book in the book's target language. Null for a language without one."
}
},
"description": "Absolute URLs for a book on the website."
}
},
"title": "BookList",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/Book"
},
"title": "Items"
}
},
"description": "A short, unpaginated list of books."
}{
"title": "Find related audiobooks",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_languages — List languages
List every content language books are written in or translated into: its code (used by the other tools), English and native names, and how many public books are translated into it. Optionally render the names in a display locale (e.g. 'es').
{
"type": "object",
"title": "list_languagesArguments",
"properties": {
"locale": {
"anyOf": [
{
"type": "string",
"maxLength": 12,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Locale",
"default": null,
"description": "Locale for display_name, e.g. 'en', 'es', 'zh'."
}
}
}{
"type": "object",
"$defs": {
"Language": {
"type": "object",
"title": "Language",
"required": [
"code",
"name",
"native_name",
"display_name",
"romanizable",
"book_count",
"urls"
],
"properties": {
"code": {
"type": "string",
"title": "Code",
"description": "Content-language code, as used in every other operation."
},
"name": {
"type": "string",
"title": "Name",
"description": "English name."
},
"urls": {
"$ref": "#/$defs/LanguageUrls"
},
"book_count": {
"type": "integer",
"title": "Book Count",
"description": "Public books whose target language is this one."
},
"native_name": {
"type": "string",
"title": "Native Name",
"description": "The language's name for itself."
},
"romanizable": {
"type": "boolean",
"title": "Romanizable",
"description": "Whether text in this language carries a Latin-script romanization."
},
"display_name": {
"type": "string",
"title": "Display Name",
"description": "Name in the requested display locale (English when none was requested)."
}
},
"description": "A content language books are written in or translated into."
},
"LanguageUrls": {
"type": "object",
"title": "LanguageUrls",
"required": [
"language_hub"
],
"properties": {
"language_hub": {
"type": "string",
"title": "Language Hub",
"description": "The page listing every public book in this language."
}
}
}
},
"title": "LanguageList",
"required": [
"items",
"locale"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/Language"
},
"title": "Items"
},
"locale": {
"type": "string",
"title": "Locale",
"description": "The locale display_name is rendered in."
}
}
}{
"title": "List languages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
2 advertised
find_book_for_level — Find a book for my level
Find a bilingual audiobook in the language you are learning, at your CEFR level.
- language
- The language being learned, as a content-language code (e.g. 'es', 'fil'). (required)
- level
- The learner's CEFR level (a1..c2). (required)
practice_with_book — Practise with a book
Practise a language with one bilingual audiobook: read it pair by pair and quiz the learner.
- book_id
- The book's id (the `id` field of a Book). (required)
Resources
0 advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 269 ms
- 95th percentile latency
- 269 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 269 ms · metadata changed · 5 tool(s), 0 resource(s), 0 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http bibooks-mcp https://bibooks.org/mcpCodex
codex mcp add bibooks-mcp --url https://bibooks.org/mcpCursor
{
"mcpServers": {
"bibooks-mcp": {
"url": "https://bibooks.org/mcp"
}
}
}Cline
{
"mcpServers": {
"bibooks-mcp": {
"type": "streamableHttp",
"url": "https://bibooks.org/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"bibooks-mcp": {
"type": "http",
"url": "https://bibooks.org/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http bibooks-mcp https://bibooks.org/mcpClaude Desktop
{
"mcpServers": {
"bibooks-mcp": {
"url": "https://bibooks.org/mcp"
}
}
}Windsurf
{
"mcpServers": {
"bibooks-mcp": {
"serverUrl": "https://bibooks.org/mcp"
}
}
}Let your agent find its tools
Find servers like Bibooks MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Bibooks MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.