Koskamo

Library of Alexandria MCP

A read-only MCP server providing access to the Library of Alexandria Press catalogue, including titles, authors, covers, print editions, summaries, samples, and study guides for classic books in 25 languages. It supports search, browsing free shelves, and obtaining print quotes without requiring user authentication or holding book text.

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.

Library of Alexandria MCP logo, by Library of Alexandria PressCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Library of Alexandria Press
MCP endpoint (Streamable HTTP)
https://mcp.libraryofalexandria.com/mcp
Vendor documentation

What you can do with it

  • Search for classic books by title, author, or topic
  • Retrieve book facts, summaries, and sample pages
  • Browse the free shelf or specific collections
  • Get print edition options and quotes

Source and maintenance

Community listingRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
library-of-alexandria-press 0.2.0
MCP protocol
2025-06-18
Tools
26 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Read-only catalogue of Library of Alexandria Press, a publisher of the world's classic books in today's language, in English and a growing number of languages. Search titles and authors, read the facts of a book, find its print editions, read the first key idea of a 15-minute summary and the free opening of a book. Pass the asker's language to get titles and authors in it. Every title carries `url`, its title page on libraryofalexandria.com. Summaries and texts appear as they open; until then a tool says plainly that it opens here soon.

Tools

26 advertised

search_books — Search books
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the catalogue of Library of Alexandria Press by words from a title or an author's name, or by a topic word, in any language of the catalogue (Chinese in simplified and traditional characters). Returns up to 8 titles with id, title, subtitle, author, language, whether print editions are available, and the address of the title page on libraryofalexandria.com. Pass the asker's language so titles and authors come back in it.

search_books input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "Number of titles to return, 1 to 8. Default 8."
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "description": "Words from a title or an author's name, or a topic word, in any language. Example: 'Moby Dick', 'Dostoevsky', 'war strategy'."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
search_books annotations
{
  "title": "Search books",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_book — Get book facts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the catalogue facts of one title: title, subtitle, author and original title in the chosen language, the cover picture address, the print editions, and the title page address in each language in which libraryofalexandria.com has the page (a language without a page there is not listed, so the list can be shorter than the languages of the catalogue). `url_language` says when `url` is in another language than the one asked.

get_book input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_book annotations
{
  "title": "Get book facts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_summary — Get summary
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the 15-minute summary of one title: the first key idea in full, with its heading, and the headings of the other key ideas, which open in the library. Choose a key idea with 'part'. A title or a language whose summary is not open yet answers that it opens here soon.

get_summary input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "part": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of the key idea, starting at 1. Default 1. Only the first key idea is given in full."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_summary annotations
{
  "title": "Get summary",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_sample — Get sample pages
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the free opening of one title: the first chapter of its text, in pages of at most 400 words. Pass 'page' for the next page; every answer says how many pages there are and where the text continues. Until the text is open the answer says that it opens here soon.

get_sample input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "description": "Page of the sample, starting at 1. Default 1. Each page has at most 400 words."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_sample annotations
{
  "title": "Get sample pages",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_free_shelf — List the free shelf
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the titles on the free shelf, optionally for one language and one subject, with the address of each reading page.

list_free_shelf input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "Number of titles to return, 1 to 8. Default 8."
    },
    "subject": {
      "type": "string",
      "maxLength": 100,
      "description": "A subject word, for example 'philosophy' or 'poetry'."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
list_free_shelf annotations
{
  "title": "List the free shelf",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_free_chapter — Read a free chapter
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read one chapter of a title on the free shelf, in pages of at most 400 words. Chapter numbers are those of the reader's contents list; without 'chapter' the first chapter of the text is read. Every answer points to the next page. Until the text is open the answer says that it opens here soon.

read_free_chapter input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "description": "Page of the chapter, starting at 1. Default 1. Each page has at most 400 words."
    },
    "chapter": {
      "type": "integer",
      "minimum": 1,
      "description": "Chapter number as in the reader's contents list, starting at 1. Default: the first chapter of the text."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
read_free_chapter annotations
{
  "title": "Read a free chapter",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_print_options — Get print options
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the print editions of one title (standard and large print; paperback or hardcover) with the normal price in US dollars where it exists, ISBN-13 and page count where known, and the address of each product page.

get_print_options input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_print_options annotations
{
  "title": "Get print options",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_publisher_info — Get publisher info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the publisher's standard description, the languages of the catalogue and the address of the terms page.

get_publisher_info input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_publisher_info annotations
{
  "title": "Get publisher info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
browse_collection — Browse a collection
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse a ready-made shelf of the library: the free books, the easy, medium or challenging reading levels, the lost books, the titles with a 15-minute summary, or the most popular titles. Returns up to 8 titles at a time, with a cursor for the next page.

browse_collection input schema
{
  "type": "object",
  "required": [
    "collection"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 8,
      "minimum": 1,
      "description": "Number of titles to return, 1 to 8. Default 8."
    },
    "cursor": {
      "type": "integer",
      "minimum": 0,
      "description": "Where the page starts: the next_cursor of the previous answer. Default 0."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    },
    "collection": {
      "enum": [
        "free-books",
        "easy",
        "medium",
        "challenging",
        "lost-books",
        "with-summary",
        "popular"
      ],
      "type": "string",
      "description": "Which shelf to browse."
    }
  },
  "additionalProperties": false
}
browse_collection annotations
{
  "title": "Browse a collection",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_book_facts — Get reading facts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the reading facts of one title: its reading level, word count, estimated reading time at three paces, page counts of the print editions, audio length, number of chapters, year of first publication, and whether a 15-minute summary is open. Facts that are not known yet are listed as not available yet.

get_book_facts input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_book_facts annotations
{
  "title": "Get reading facts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_themes — Get the study guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the study guide of one title: its main themes, symbols, setting and recurring motifs, each in a few sentences, with the address of the full study guide. A title or language whose guide is not open yet says that it opens here soon.

get_themes input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_themes annotations
{
  "title": "Get the study guide",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_chapter_summary — Get a chapter summary
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the summary of one chapter, act or section of a title, or, without a number, the list of its chapters with their titles. Each summary is a few hundred words at most and points to the next one. A title whose chapter summaries are not open yet says that they open here soon.

get_chapter_summary input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "chapter": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of the chapter, act or section, starting at 1. Leave it out to get the list of chapters."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_chapter_summary annotations
{
  "title": "Get a chapter summary",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_quote_source — Find where a quotation comes from
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find where a quotation comes from: give at least six words of it and get the title, chapter and paragraph of the open texts of the library that contain it, with the address to read it there. It answers only for texts that are open and never returns the words of the book.

find_quote_source input schema
{
  "type": "object",
  "required": [
    "quote"
  ],
  "properties": {
    "quote": {
      "type": "string",
      "maxLength": 600,
      "description": "At least six words of the quotation, as exact as you know them. Capitals, punctuation and accents do not matter."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
find_quote_source annotations
{
  "title": "Find where a quotation comes from",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
explain_phrase — Explain a phrase
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explain a saying or idiom: what it means, where it comes from, and which titles of the library use it. A phrase that is not in the collection gets the closest phrases that are.

explain_phrase input schema
{
  "type": "object",
  "required": [
    "phrase"
  ],
  "properties": {
    "phrase": {
      "type": "string",
      "maxLength": 200,
      "description": "The saying or idiom, for example 'break the ice'."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
explain_phrase annotations
{
  "title": "Explain a phrase",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
recommend_classics — Recommend classics
Advertised by the server during the last successful anonymous check.
Advertised read-only

Recommend classics: give the title of a book you liked, or its id, and get the books its readers also enjoyed; or give a topic or a mood and get titles that match it. Filter by reading level or by the free shelf.

recommend_classics input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "level": {
      "enum": [
        "easy",
        "medium",
        "challenging"
      ],
      "type": "string",
      "description": "Only titles of this reading level."
    },
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 8,
      "minimum": 1,
      "description": "Number of titles to return, 1 to 8. Default 5."
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "description": "A title or title id (for readers-also-enjoyed), or a topic or mood in a few words, for example 'sea adventure'."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    },
    "free_only": {
      "type": "boolean",
      "description": "Only titles on the free shelf of the language."
    }
  },
  "additionalProperties": false
}
recommend_classics annotations
{
  "title": "Recommend classics",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
quote_custom_print — Quote a personal print copy
Advertised by the server during the last successful anonymous check.
Advertised read-only

Prepare a printed copy of one title with a personal message page, as a gift or for yourself: get the normal price of the paperback, hardcover or large print edition, the total for the number of copies, and the address of the page on libraryofalexandria.com where the message is written and the order is placed. Shipping and tax are shown at checkout.

quote_custom_print input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "gift": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "maxLength": 300
        },
        "is_gift": {
          "type": "boolean"
        },
        "recipient_name": {
          "type": "string",
          "maxLength": 80
        }
      },
      "description": "Whether the copy is a gift. The names are not kept.",
      "additionalProperties": false
    },
    "cover": {
      "type": "object",
      "properties": {
        "mode": {
          "enum": [
            "house",
            "upload"
          ],
          "type": "string",
          "description": "house is the cover of the edition; upload is your own picture."
        }
      },
      "additionalProperties": false
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Two-letter country code of the delivery address, for example NL."
    },
    "edition": {
      "enum": [
        "paperback",
        "hardcover",
        "large_print"
      ],
      "type": "string",
      "description": "Which edition. Default paperback."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    },
    "quantity": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Number of copies, 1 to 50. Default 1."
    },
    "dedication": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 2000,
          "description": "The personal message printed on its own page."
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
quote_custom_print annotations
{
  "title": "Quote a personal print copy",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_cover_upload_link — Get the cover upload link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the page where a person can add their own cover picture to a printed copy. Uploading a cover opens here soon; until then the answer points to the page where the personal message is written.

get_cover_upload_link input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_cover_upload_link annotations
{
  "title": "Get the cover upload link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_custom_print_order — Continue to the order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Continue from a quote: get the address of the page on libraryofalexandria.com where the person writes the message, sees the proof and pays. Nothing is ordered or paid through the assistant, and no card or address is asked for here.

create_custom_print_order input schema
{
  "type": "object",
  "required": [
    "quote_id"
  ],
  "properties": {
    "quote_id": {
      "type": "string",
      "maxLength": 600,
      "description": "The quote_id of a quote. A quote is valid for 24 hours."
    }
  },
  "additionalProperties": false
}
create_custom_print_order annotations
{
  "title": "Continue to the order",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_order_status — Check an order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check where a printed order stands. Today the answer points to the e-mail of the order and to the account on libraryofalexandria.com; tracking through an assistant opens here soon.

get_order_status input schema
{
  "type": "object",
  "required": [
    "order_ref",
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 200,
      "description": "The e-mail address of the order."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    },
    "order_ref": {
      "type": "string",
      "maxLength": 60,
      "description": "The order number from the confirmation e-mail, for example #1234."
    }
  },
  "additionalProperties": false
}
get_order_status annotations
{
  "title": "Check an order",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_plan — Get my plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the plan and daily words left for the signed-in member. Passages come only from titles open to you, within a daily word limit.

get_my_plan input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_my_plan annotations
{
  "title": "Get my plan",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_library — List my library
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the saved books of the signed-in member with their reader addresses. Returns at most 50 books at a time and never returns book text.

list_my_library input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Number of books, default 20."
    },
    "offset": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 0,
      "description": "Number of saved items to skip, default 0."
    },
    "status": {
      "enum": [
        "want",
        "reading",
        "finished",
        "paused",
        "dropped"
      ],
      "type": "string",
      "description": "Filter by saved reading status."
    }
  },
  "additionalProperties": false
}
list_my_library annotations
{
  "title": "List my library",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_book_outline — Get book outline
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the chapters and their access for the signed-in member. Only open titles are shown, and no chapter text is returned.

get_book_outline input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_book_outline annotations
{
  "title": "Get book outline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_in_book — Search in book
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find paragraphs by keywords in chapters open to the signed-in member. Returns at most five short snippets, within word and reading limits.

search_in_book input schema
{
  "type": "object",
  "required": [
    "id",
    "query"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "limit": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Number of results, default 5."
    },
    "query": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "Two to 80 characters of keywords to find together in a paragraph."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
search_in_book annotations
{
  "title": "Search in book",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_passage — Get passage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a located paragraph with nearby paragraphs for the signed-in member. Access is checked again and each passage is limited to 400 words.

get_passage input schema
{
  "type": "object",
  "required": [
    "locator"
  ],
  "properties": {
    "after": {
      "type": "integer",
      "maximum": 2,
      "minimum": 0,
      "description": "Paragraphs after the located paragraph, default 0."
    },
    "before": {
      "type": "integer",
      "maximum": 2,
      "minimum": 0,
      "description": "Paragraphs before the located paragraph, default 0."
    },
    "locator": {
      "type": "string",
      "maxLength": 400,
      "description": "Signed locator returned by search_in_book, valid for 24 hours."
    }
  },
  "additionalProperties": false
}
get_passage annotations
{
  "title": "Get passage",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_listen_link — Get listen link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the listen page address of an open title for the signed-in member. No audio is returned, and access is checked by the listen page.

get_listen_link input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "chapter": {
      "type": "integer",
      "minimum": 1,
      "description": "Optional chapter number, starting at 1."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    }
  },
  "additionalProperties": false
}
get_listen_link annotations
{
  "title": "Get listen link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
open_in_reader — Open in reader
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a chapter address for the signed-in member to open in the reader. Only open titles are linked, and the reader checks chapter access.

open_in_reader input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Title id as found in a search result, for example top3500-00013 or forbidden-00004. A plain number is read as a number of the main list."
    },
    "chapter": {
      "type": "integer",
      "minimum": 1,
      "description": "Chapter number, default 1."
    },
    "language": {
      "enum": [
        "en",
        "es",
        "de",
        "nl",
        "fr",
        "it",
        "pt-BR",
        "ru",
        "zh-CN",
        "zh-TW",
        "ja",
        "ko",
        "pl",
        "ar",
        "hi",
        "id",
        "ca"
      ],
      "type": "string",
      "description": "Language of the person asking, as a code: en English, es Spanish, de German, nl Dutch, fr French, it Italian, pt-BR Portuguese, ru Russian, zh-CN Chinese, zh-TW Chinese in traditional characters, ja Japanese, ko Korean, pl Polish, ar Arabic, hi Hindi, id Indonesian, ca Catalan. Titles, subtitles, authors and page addresses come back in this language. Default: the language of the query, else English."
    },
    "paragraph": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,40}$",
      "description": "Optional paragraph id such as p3."
    }
  },
  "additionalProperties": false
}
open_in_reader annotations
{
  "title": "Open in reader",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
610 ms
95th percentile latency
610 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 610 ms · metadata changed · 26 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http library-of-alexandria-mcp https://mcp.libraryofalexandria.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add library-of-alexandria-mcp --url https://mcp.libraryofalexandria.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable library-of-alexandria-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "library-of-alexandria-mcp": {
      "url": "https://mcp.libraryofalexandria.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "library-of-alexandria-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.libraryofalexandria.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start library-of-alexandria-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "library-of-alexandria-mcp": {
      "type": "http",
      "url": "https://mcp.libraryofalexandria.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http library-of-alexandria-mcp https://mcp.libraryofalexandria.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "library-of-alexandria-mcp": {
      "url": "https://mcp.libraryofalexandria.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "library-of-alexandria-mcp": {
      "serverUrl": "https://mcp.libraryofalexandria.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Library of Alexandria MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.