Open Textbook Finder MCP
Uses Internet Archive via Open Library to identify public domain or borrowable copies of textbooks, marking results as free or borrowable loans.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Open Textbook Finder MCPIs there a free legal copy of the Calculus textbook by Stewart?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Open Textbook Finder MCP
Open Textbook Finder MCP is a free, open source MCP server, published on npm as open-textbook-finder-mcp. Give it a textbook title, an ISBN or a course topic and it looks for free legal copies on OpenStax, the Directory of Open Access Books (DOAB) and Open Library. It can also look up the editions of a book by ISBN and suggest older editions that usually cost less.
Use it with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and any other app that runs a local MCP server. It needs no API key and no account.
Free forever. No account and no subscription.
What it does
Tool | Example prompt |
| "Is there a free legal copy of the Calculus textbook by Stewart, or something close to it?" |
| "Look up ISBN 978-0-13-468599-1 and tell me what other editions exist." |
| "My course wants the 9th edition of Stewart Calculus. Is there an older edition that would work?" |
| "List free textbooks for intro statistics." |
See Tools for the parameters of each one.
Related MCP server: mcp-books
Install
Run it straight from npm with npx. You need Node.js 20 or newer, see Node version for the details. There is nothing else to install and no config file for the server itself.
npx -y open-textbook-finder-mcpAdd it to your AI app's MCP config so the app can start it for you. Every app reads its config from its own file, so pick yours:
All of them start the same server the same way. The only difference is where the config goes.
Claude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"textbooks": {
"command": "npx",
"args": ["-y", "open-textbook-finder-mcp"]
}
}
}Restart Claude Desktop after you save the file.
Claude Code
Run this in a terminal:
claude mcp add textbooks -- npx -y open-textbook-finder-mcpCursor
Cursor reads mcp.json from the project folder at .cursor/mcp.json, or from your home folder at ~/.cursor/mcp.json if you want the server in every project. On Windows the home folder file is %USERPROFILE%\.cursor\mcp.json.
{
"mcpServers": {
"textbooks": {
"type": "stdio",
"command": "npx",
"args": ["-y", "open-textbook-finder-mcp"]
}
}
}Restart Cursor after you save the file. The Customize page in the sidebar lists the server once it starts, and you can turn it on or off there.
VS Code
Put this in .vscode/mcp.json in your project folder, or in the mcp.json file in your user profile:
{
"servers": {
"textbooks": {
"type": "stdio",
"command": "npx",
"args": ["-y", "open-textbook-finder-mcp"]
}
}
}VS Code also reads a portable .mcp.json file in the project root. That file uses the name mcpServers instead of servers:
{
"mcpServers": {
"textbooks": {
"command": "npx",
"args": ["-y", "open-textbook-finder-mcp"]
}
}
}Restart VS Code after you save the file.
Windsurf
Windsurf reads mcp_config.json from ~/.codeium/windsurf/mcp_config.json. On Windows that is %USERPROFILE%\.codeium\windsurf\mcp_config.json.
{
"mcpServers": {
"textbooks": {
"command": "npx",
"args": ["-y", "open-textbook-finder-mcp"]
}
}
}Refresh the list of servers in Windsurf after you save the file.
After any of these, try one of the prompts below.
Try these three prompts
Find a free copy
"Is there a free legal copy of the Calculus textbook by Stewart, or something close to it?"
The model calls
find_free_textbookwith that title. It checks the OpenStax list that ships with the server, then asks DOAB and Open Library. OpenStax Calculus Volume 1 comes back first, and an Open Library result is marked free only when there is a public domain copy to read online.Look up an ISBN
"Look up ISBN 978-0-13-468599-1 and tell me what other editions exist."
lookup_isbnchecks the check digit first, then returns the title, publisher, publish date and page count from Open Library. It also lists the other editions of the same book, newest first.Find a cheaper older edition
"My course wants the 9th edition of Stewart Calculus. Is there an older edition that would work?"
find_older_editionlists the earlier editions of the book, closest first, with the year, the edition name and the ISBN when Open Library has them. Passedition_yearto say which edition your course asks for.
More things you can ask:
"List free textbooks for intro statistics."
"Is there a free textbook for nursing pharmacology?"
"Find a free legal copy of Pride and Prejudice."
"Which free textbooks cover microeconomics?"
"I have the ISBN 9780134685991. Is there a free copy of that book?"
"Is the 7th edition close enough to the 9th for an intro physics course?"
Tools
Four tools. These names are the ones your AI app sees.
Tool | Parameters | What it does |
|
| Search OpenStax, DOAB and Open Library for a free legal copy by title, ISBN or course topic. Open Library results are marked free for a public domain copy and borrow for a free loan |
|
| Return the edition details for an ISBN, say whether a free copy is known and list the related editions of the same book |
|
| Browse free textbooks for a course topic from OpenStax and DOAB |
|
| Suggest earlier editions of a textbook that usually cost less, closest to the current edition first |
Every tool description sent to your AI app ends with one example prompt, so the model can match a question like "Is there a free copy of this book?" to the right tool and fill in every parameter.
Every tool also returns its results as structured data. Each tool has an output schema, so a client that reads JSON gets fields such as results or suggestions straight away, and the text answer stays the same for an app that only reads words. The fields each tool returns are listed in llms.txt and in glama.json.
Where the books come from
Source | What it gives | How it is searched |
OpenStax | Free peer reviewed college textbooks | A list of OpenStax titles ships with the server and is matched on your computer, because OpenStax has no public search service |
DOAB | Open access academic books, with the licence when DOAB lists one | The DOAB search service |
Open Library | Edition records, and public domain or borrowable copies at the Internet Archive | The Open Library search and edition services |
A result has an access value. free means a copy you can read online or keep, borrow means a free loan that you have to return, and none means no free copy is known. Always check the licence on the page you land on before you reuse a book.
FAQ
Does it need an API key?
No. Open Library and DOAB can be searched without a key, and the OpenStax list ships with the server.
Does it find pirated copies?
No. It only returns OpenStax, DOAB and Open Library records, which are open licensed, public domain or legal loans.
What if I only have an ISBN?
Pass it to find_free_textbook or lookup_isbn. Hyphens and spaces are fine. The check digit is tested first, so a typo is reported as a bad ISBN instead of a search that finds nothing.
Can it tell me the price of an older edition?
No. The tool does not know prices, because no free price service exists. It tells you which earlier editions exist so you can check a used book seller yourself.
Will an older edition match my course?
Often an edition one or two releases back keeps the same chapters, but publishers reorder problems and drop sections. Compare the table of contents with your syllabus and ask your instructor before you buy.
What happens if one source is down?
The other sources still answer, and the reply names the source that did not. If every source is down the tool says so instead of returning an empty list.
How it compares
Option | Needs a key or account | Covers | When to use |
Open Textbook Finder MCP (this server) | No | OpenStax, DOAB and Open Library in one question, plus ISBN and edition lookups | You want your AI app to check the free options before you buy a book. |
Searching each site yourself | No | One site at a time | You already know which site has your book. |
Node version
There are two floors here, and they are not the same number.
What you are doing | Node.js |
Running the published server | 20 or newer |
Building and testing a clone | 22.12 or newer, on the 22 and 24 release lines or 26 and later |
The server itself is happy on Node.js 20, and that is what engines in package.json says. The test runner wants a newer Node.js, so the development floor lives in devEngines in the same file. npm checks devEngines before install, run and test, so a clone on Node.js 20 stops with a clear message instead of a strange failure part way through the test suite. The 23 and 25 release lines are left out on purpose, because the test runner does not run on them.
Both numbers live in package.json, and a test in tests/node-version.test.ts keeps them in step with the README and with the range the test runner asks for.
Development
npm install
npm run build
npm testThe tests call every tool through a real MCP client with a fake network, so they need no account, no key and no internet. They need the newer Node.js from the Node version section above, because of the test runner.
Privacy
There is no key, no login and no account. The server sends your search text or ISBN to two public services and nothing else: openlibrary.org and directory.doabooks.org. The OpenStax match runs on your computer and sends nothing. The server writes no files, keeps no history and has no analytics. Each request carries a User-Agent header with the package name and the repository address, which Open Library asks of every client. Those services have their own privacy policies for the requests they receive.
More free student MCP servers
All free, open source and read only where they touch your accounts. Browse the full list at brightspacemcp.com/more-mcps.
Server | What it does |
D2L Brightspace for AI. Due dates with real submission status, grades, a target grade calculator and course files. | |
Canvas LMS for AI, read only. Due dates, missing work, grades and announcements. | |
Moodle for AI, read only. Due dates, overdue work, grades and announcements. | |
Google Classroom for AI, read only. Todos, due dates, missing work and grades. | |
GPA, CGPA, weighted grades, target grades and final exam math. Works offline. | |
APA, MLA and Chicago citations from a DOI, an ISBN or typed details. No account. | |
Exam study schedules, spaced repetition dates, pomodoro plans and assignment milestones. Works offline. | |
Search scholarly papers, find open access copies and related work through OpenAlex. No key needed. |
License
MIT
Available Tools
4 toolsfind_free_textbookFind a free textbookARead-only
Search for free and legal copies of a textbook on OpenStax, the Directory of Open Access Books (DOAB) and Open Library. Inputs: query (a book title, an ISBN or a course topic such as "organic chemistry") and an optional limit of 1 to 10 results from each source. Open Library results are marked free when there is a public domain copy to read online, and borrow when the book is a free loan. No account or key is needed. If one source is down the others still answer and the reply names the source that did not. Example prompt: "Is there a free legal copy of the Calculus textbook by Stewart, or something close to it?"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return, 1 to 10. Defaults to 5. | |
| query | Yes | A textbook title, an ISBN (10 or 13 digits, hyphens allowed) or a course topic. |
Output Schema
| Name | Required | Description |
|---|---|---|
| isbn | No | The ISBN that was searched, when the query was an ISBN. |
| query | Yes | The search text that was used. |
| results | Yes | Free and borrowable books, OpenStax first, then DOAB, then Open Library. |
| sources_unavailable | Yes | Names of the sources that did not answer, so a short list can be told from a failed search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and open-world, yet the description adds genuine behavior: no account or API key required, per-source graceful degradation with the failed source named in the reply, and how Open Library results are classified as 'free' vs 'borrow'. Only the result ordering/merging across sources is left unstated, so this is useful added context rather than a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and sources, then inputs, then fallback behavior, then an example. Mostly earns its space, though the 'Inputs:' sentence duplicates schema content that the agent already receives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and annotations present, the description covers what the agent needs: sources searched, input flexibility, auth requirements, and partial-outage behavior. Only result ordering/deduplication across the three sources is left to the output schema or inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds a detail the schema omits: the limit applies 'from each source' rather than overall, which changes how an agent sets it. The query guidance (title, ISBN, or course topic) largely restates the schema but confirms the accepted input forms.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'Search for free and legal copies of a textbook' across three named sources (OpenStax, DOAB, Open Library). It is clearly separable from siblings like lookup_isbn and list_open_textbooks_by_subject because it is a cross-source search rather than a single-record lookup or subject browse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example prompt ('Is there a free legal copy of the Calculus textbook by Stewart…') implies the intended use case, and the query description ('a book title, an ISBN or a course topic') implicitly advertises the broad input space. However, no sibling is named, so an agent gets no guidance on when to prefer lookup_isbn (which overlaps with the ISBN query form) or list_open_textbooks_by_subject, and there are no when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_older_editionFind a cheaper older editionARead-only
Suggest earlier editions of a textbook, which usually cost less used than the newest one. Inputs: query (a title or an ISBN) and two optional values: edition_year, the year of the edition your course asks for, and limit, 1 to 10 suggestions. Without edition_year the newest edition Open Library lists counts as the current one, and an ISBN counts as the current edition when you pass one. Suggestions run from the closest older edition down. Editions only one or two releases back often keep the same chapters, but problem sets get reordered, so check the table of contents against your syllabus. The tool does not know prices. Example prompt: "My course wants the 9th edition of Stewart Calculus. Is there an older edition that would work?"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return, 1 to 10. Defaults to 5. | |
| query | Yes | The textbook title or its ISBN. | |
| edition_year | No | Year of the edition your course requires. Leave it out to treat the newest edition found as the current one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| work_title | Yes | Title of the book the editions belong to. |
| newest_year | No | Year of the newest edition Open Library lists. |
| suggestions | Yes | Older editions, closest to the current one first. |
| current_year | No | Year of the edition the suggestions are older than. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, open-world lookup. The description adds useful behavioral context: it does not know prices, suggestions are ordered from the closest older edition downward, and results should be checked against the syllabus.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and generally well organized. It is slightly verbose for a three-parameter tool because it repeats schema details such as the 1-to-10 limit and includes a full example prompt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set, complete schema descriptions, annotations, and an output schema, the description covers the important usage context and limitations. An agent has enough information to call the tool correctly and interpret the caveat about edition contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is complete, so the baseline is 3. The description adds meaning beyond the schema by explaining that query can be a title or ISBN, that edition_year represents the course-required edition year, and that omitting it treats the newest listed edition as current.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: suggesting earlier editions of a textbook. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools such as find_free_textbook or lookup_isbn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example prompt and the course-edition scenario make the intended use case clear. However, it does not explicitly say when to use this instead of the sibling tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_textbooks_by_subjectBrowse open textbooks by subjectARead-only
Browse free textbooks for a course topic. It lists matching OpenStax books and open access books from the Directory of Open Access Books (DOAB). Inputs: subject (a course topic such as "calculus", "nursing" or "economics") and an optional limit of 1 to 25 results. OpenStax books come first. If DOAB is down the OpenStax list still comes back and the reply says so. Example prompt: "List free textbooks for intro statistics."
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return, 1 to 25. Defaults to 10. | |
| subject | Yes | A course topic or subject, like "calculus", "statistics", "nursing" or "economics". |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Free textbooks for the subject, OpenStax first and then DOAB. |
| subject | Yes | The subject that was searched. |
| sources_unavailable | Yes | Names of the sources that did not answer, so a short list can be told from a failed search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses result ordering (OpenStax first) and graceful degradation when DOAB is unavailable, including that the response signals the partial result. That is meaningful operational context not present in structured fields, though rate limits or result-shape details are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences and front-loads what the tool returns before covering inputs and failure behavior. The trailing example prompt is slightly redundant but does usefully illustrate the intended subject granularity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be explained. The description still covers the multi-source merge, ordering, and the DOAB-outage case, which is what an agent needs to set expectations; only sibling routing is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both the subject examples and the 1-to-25 limit range are already documented in the input schema. The description restates them rather than adding new semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Browse free textbooks for a course topic') and names the two sources it aggregates, OpenStax and DOAB. It does not explicitly contrast itself with siblings like find_free_textbook, but the browse-by-subject scope is distinct enough that an agent can infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the example prompt ('List free textbooks for intro statistics'), which suggests a broad topical query. There is no explicit statement of when to prefer this over find_free_textbook or find_older_edition, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_isbnLook up an ISBNARead-only
Look up an ISBN on Open Library and return the edition details plus the other editions of the same book. Inputs: isbn (10 or 13 digits, hyphens allowed). The check digit is tested first, so a typo is reported before any search. The reply has the title, authors, publisher, publish date, page count and edition name, and says whether a free copy is known. Related editions are listed newest first. Example prompt: "Look up ISBN 978-0-13-468599-1 and tell me what other editions exist."
| Name | Required | Description | Default |
|---|---|---|---|
| isbn | Yes | The ISBN to look up, 10 or 13 digits, hyphens and spaces allowed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The Open Library page for this edition. |
| isbn | Yes | The ISBN as given, with hyphens and spaces removed. |
| pages | No | Number of pages, when known. |
| title | Yes | Title of the edition. |
| isbn13 | Yes | The ISBN 13 form of the ISBN. |
| authors | Yes | Authors, when Open Library lists them. |
| free_copy | Yes | True when a free copy to read online is known. |
| publishers | Yes | Publishers of the edition. |
| edition_name | No | Edition name such as "3rd edition", when known. |
| publish_date | No | Publish date as Open Library gives it. |
| free_copy_url | No | Where to read the free copy, when there is one. |
| related_editions | Yes | Other editions of the same book, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description goes further by disclosing that the check digit is validated before any search, which explains error behavior, and that related editions come back newest first. That ordering and validation detail is genuinely useful context not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and stays compact. The sentence enumerating return fields (title, authors, publisher, publish date, page count, edition name) is somewhat redundant given the output schema, but it is brief and helps set expectations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one required, fully documented parameter, read-only annotations, and an output schema, so the description only needs to establish purpose, validation behavior, and result ordering, all of which it covers. There are no material gaps for an agent calling a single-parameter lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself documents the ISBN format, hyphens and spaces included, so the description's restatement of '10 or 13 digits, hyphens allowed' adds no new meaning. The one extra is the note that the check digit is validated first, which hints at the failure mode but gives no format for the error.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Look up an ISBN on Open Library') and names the scope of the result (edition details plus other editions of the same book). It does not explicitly distinguish itself from related siblings such as find_older_edition or find_free_textbook, whose functions the described output partly overlaps with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an example prompt shows a lookup in context, but there is no statement of when to prefer this tool over find_older_edition or find_free_textbook, or of any preconditions. The agent must infer the routing from the example alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
find_free_textbook - First observed
find_older_edition - First observed
list_open_textbooks_by_subject - First observed
lookup_isbn
TDQS
Scored across 4 tools
The four tools are largely distinct: ISBN lookup, subject browsing, free-copy search, and older-edition suggestions. However, find_free_textbook and list_open_textbooks_by_subject both accept course topics and return OpenStax/DOAB results, so an agent could hesitate between them for topic-based queries.
All tool names use consistent snake_case and follow a clear verb-led pattern: find_free_textbook, lookup_isbn, list_open_textbooks_by_subject, find_older_edition. The slight variation between 'find', 'lookup', and 'list' is natural and predictable for the actions.
Four tools is well-scoped for a focused textbook-finding server. Each tool covers a distinct search or lookup need without excessive surface area.
The surface covers the core workflows: search by title/topic/ISBN, browse by subject, validate ISBN details, and find older editions. Minor gaps remain, such as no direct way to list available subjects/sources or retrieve full textbook details for non-ISBN OpenStax/DOAB results.
Maintenance
Related MCP Connectors
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Academic literature search, retrieval, and private library management on top of OpenAlex.
Search and download academic papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, Semantic…
Find academic papers across major sources like arXiv, PubMed, bioRxiv, and more. Download PDFs whe…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables querying open-access availability of scholarly articles via Unpaywall API, including DOI lookup, title search, and citation export.431 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching for books by title, author, or keyword, retrieving edition details by ISBN, and accessing author profiles and canonical work records through the Open Library API.13 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and retrieving Project Gutenberg books by title, author, topic, and popularity, along with book details and download statistics through the Gutendex API.10 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching CALI eLangdell's catalogue of free US law-school casebooks and retrieving per-title licensing, attribution, and download links.7 npm1MIT