reading-cottage
Click on "Install 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., "@reading-cottageList my books and show the first chapter of the one I'm reading."
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.
Reading Cottage / 共读小屋
English | 简体中文
A local EPUB reader for reading together with AI agents.
Read, highlight, annotate, and reply in the browser. Connect an agent through MCP to read the same pages, join the discussion, and carry its notes into the next reading session.
Features
Bookshelf and reading: import EPUBs, favorite books, read by chapter, and track shared progress.
Bilingual interface: switch between English and Chinese; your choice is saved. Book text stays in its original language.
Selection annotations: select text to highlight it or leave a note, then open the discussion drawer to read annotations and replies.
Ongoing reading: each participant keeps their own cross-chapter notes. Starred annotations provide shared context for later reading.
Parallel editions: link two editions, match paragraphs by their relative position within a chapter, and mirror annotations and replies.
Related MCP server: Co-Reading MCP
Install and run
Requires Python 3.12 or later.
git clone https://github.com/1nwooozip/reading-cottage.git
cd reading-cottage
python3.12 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/reading-cottage --data-dir "$PWD/.reading-cottage" init
.venv/bin/reading-cottage --data-dir "$PWD/.reading-cottage" serveOpen http://127.0.0.1:3002 and upload an EPUB to start reading.
These commands store books, configuration, and reading records in the project's .reading-cottage directory. Without --data-dir, the default is ~/.reading-cottage.
You can also import books and link editions from the command line:
.venv/bin/reading-cottage --data-dir "$PWD/.reading-cottage" import /path/to/book.epub
.venv/bin/reading-cottage --data-dir "$PWD/.reading-cottage" link 1 2Connect an agent
Add the service to a client that supports stdio MCP. The example below uses a common JSON configuration format; replace the paths with absolute paths on your machine. The browser app and MCP server should use the same data directory.
{
"mcpServers": {
"reading-cottage": {
"command": "/absolute/path/to/reading-cottage/.venv/bin/reading-cottage-mcp",
"args": [
"--data-dir", "/absolute/path/to/reading-cottage/.reading-cottage",
"--agent-id", "my-agent",
"--agent-name", "My Reading Agent"
]
}
}
}Once connected, ask your agent to check the bookshelf, read a chapter, and leave annotations. Reply to its notes in the browser.
Tool | Purpose |
| List books and reading progress |
| Get a chapter, the agent's notes, starred context, and the previous chapter's discussion |
| Read a chapter with annotations and highlights |
| Add a paragraph annotation or reply |
| Mark a chapter as read and advance progress |
| Append to cross-chapter notes |
| Read a paragraph's full discussion |
Names and reading records
The first init creates config.toml in the data directory:
[human]
id = "reader"
name = "Reader"
[agent]
id = "agent"
name = "Reading Agent"name is the display name. Keep id stable so it stays associated with earlier records. The browser uses [human]; MCP uses [agent] or the identity supplied through startup arguments. Give another agent a different --agent-id to keep its authorship and notes separate.
Progress and starred annotations are shared per book. Cross-chapter notes are stored per participant; when starting a chapter, MCP retrieves the current agent's own notes.
Usage notes
Best suited to text-focused EPUBs. Complex layouts, footnotes, and images in the body may not be fully parsed.
Parallel editions are matched by relative paragraph position within the same chapter number. Use the browser controls to adjust the position when the match is off.
The server listens on the local machine by default and is intended for personal use. Remote access requires separate authentication and access controls.
Development
.venv/bin/python -m pip install -e '.[dev]'
.venv/bin/python -m pytest -qIntegration tests use temporary databases and generated EPUB fixtures to cover import, annotations, replies, mirroring, and reading records across HTTP and stdio MCP.
Dependencies and license
MCP Python SDK: MCP service, MIT.
EbookLib: EPUB parsing, AGPL-3.0-or-later.
Beautiful Soup: HTML parsing, MIT.
Licensed under AGPL-3.0-or-later. See SOURCE.md for project provenance and third-party credits.
Available Tools
7 toolsreader_add_annotationB
Write a paragraph annotation as this MCP server's stable agent identity.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| reply_to_id | No | ||
| paragraph_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations (e.g., readOnly or destructive hints) are provided, so the description itself carries the burden. 'Write' suggests a mutation, but it does not disclose any side effects, power requirements, or potential irreversible changes. The description lacks transparency about what happens after the annotation is written.
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 a single sentence and gets directly to the point without unnecessary verbosity. It is well-structured and easy to read, though the phrase 'stable agent identity' adds a bit of complexity.
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 only three parameters and no output schema, so the context is relatively simple. However, the description fails to provide adequate context about the parameters, their roles, or the expected format of the annotation, making it incomplete for a new user. It is sufficient for a basic understanding but lacks depth.
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?
The schema has no descriptions for the parameters, and the tool description only vaguely references 'paragraph annotation.' It does not explain what 'content' should contain, what 'reply_to_id' refers to, or how 'paragraph_id' is used. The names are somewhat self-explanatory but lack the detail needed for correct usage.
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 clearly states the action is to 'write a paragraph annotation,' which is a specific verb and object. The phrase 'as this MCP server's stable agent identity' is somewhat ambiguous but does not obscure the core purpose. It is distinguishable from sibling tools like 'reader_get_paragraph_thread' which are about retrieval or navigation.
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 description implies this tool is used for adding annotations to a paragraph, but it does not explicitly state when to use it versus when to use sibling tools like listing books or reading chapters. There is no direct guidance on prerequisites or alternative scenarios, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_get_chapterA
Get a chapter with all paragraph annotations and highlights.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | ||
| chapter_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly indicates a read operation ('Get') and specifies what is included in the returned data ('all paragraph annotations and highlights'). No side effects or contradictions are present, but it does not disclose any potential errors or prerequisites.
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 a single, concise sentence with the action verb front-loaded. It contains no unnecessary words or filler, conveying the essential information efficiently.
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 is simple with two parameters, and the description specifies enough about the expected output (chapter with annotations and highlights) to understand its general behavior. However, the absence of any output schema details or additional context about the return structure slightly limits completeness, though it is adequate for a basic understanding.
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?
The schema provides only types and names for the two parameters (book_id, chapter_index) with zero descriptions. The description does not compensate by explaining the meaning, format, or constraints of these parameters (e.g., zero-based indexing, ID scope). This leaves parameter semantics largely undefined.
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 clearly states the tool's function with a specific verb 'Get' and a specific resource: 'a chapter with all paragraph annotations and highlights.' It is distinct from sibling tools like reader_list_books and reader_get_paragraph_thread, making its purpose unambiguous.
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 description implies when to use the tool (when needing chapter content with annotations and highlights) but does not explicitly contrast it with alternatives or state when not to use it. The usage is inferable from the name and description, but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_get_paragraph_threadA
Get one paragraph and its complete annotation thread.
| Name | Required | Description | Default |
|---|---|---|---|
| paragraph_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a read operation returning a paragraph and its complete annotation thread, but it does not mention permissions, side effects, or output framing. This is adequate for a simple getter but not highly transparent.
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 a single concise sentence with no filler. It front-loads the action and the resource, making it easy for an agent to parse quickly.
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?
For a simple one-parameter getter with an output schema, the core semantics are present. Still, the description lacks usage context about when to prefer this over sibling tools and what to do with the paragraph_id, leaving an agent to infer the intended workflow.
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?
The only parameter, paragraph_id, is intuitive from its name, and the description's phrase 'Get one paragraph' reinforces that it identifies which paragraph to fetch. However, schema description coverage is 0%, and the description does not explain where paragraph_id comes from or what an 'annotation thread' entails, so it only partially compensates.
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 names a specific verb ('Get') and a specific resource ('one paragraph and its complete annotation thread'), making the tool's function immediately clear. It is distinguishable from sibling reader_get_chapter by focusing on a paragraph-level annotation thread rather than a chapter.
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 description gives no guidance on when to use this tool versus alternatives like reader_get_chapter or reader_add_annotation. There is no mention of when this is the right choice or when it is not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_list_booksC
List the local bookshelf and shared reading progress.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | recent |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The verb 'List' implies a read-only operation, but the description does not explicitly state that it makes no changes, nor does it mention any side effects, permissions, or other behavioral nuances. It provides minimal transparency beyond the obvious reading intent.
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 a single concise sentence that directly states the tool's purpose without any fluff or unnecessary words. It is appropriately front-loaded, giving the agent the core information immediately.
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?
Despite having an output schema (which reduces the need to describe return values), the description is incomplete for effective use. It lacks any explanation of the 'order' parameter, fails to provide usage guidance or alternatives, and does not elaborate on the distinction between 'local bookshelf' and 'shared reading progress.' The tool is simple, but the missing parameter documentation and usage context make it inadequate.
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?
The schema coverage is 0%, meaning the 'order' parameter has no description in the schema, and the tool description does not mention it either. The description does not explain what 'order' means, what values it accepts, or how it affects results. This leaves the parameter completely undocumented, failing to compensate for the schema gap.
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 clearly states the tool's function: listing the local bookshelf and shared reading progress. It uses a specific verb ('List') and identifies the resources, which distinguishes it from siblings that perform actions like starting reading or adding annotations. However, it does not explicitly name any sibling or mention differentiation, so it falls short of a perfect score.
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 description provides no context on when to use this tool versus the alternatives. There is no mention of prerequisites, use cases, or exclusions. An agent would need to infer from the tool's purpose that it is for viewing content, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_mark_chapter_doneB
Mark a chapter done and advance the book's shared progress.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | ||
| chapter_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It does reveal a non-obvious side effect: advancing the book's shared progress. However, it omits details like idempotency, whether progress is overwritten or cumulative, and what happens if the chapter is already marked done.
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 a single, front-loaded sentence with no filler. It conveys the core action and its key side effect efficiently. It is concise without being merely tautological, though it could pack in more useful context without losing structure.
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?
For a simple two-parameter mutation tool with an output schema, the description states the essential action and side effect. However, it leaves gaps around prerequisites, failure cases, and the meaning of 'shared progress'. The presence of an output schema reduces the need to explain return values, but the behavioral and usage gaps keep this from being complete.
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 description coverage is 0%, and the description adds no parameter-level meaning. The parameter names and titles are self-explanatory, but the description does not clarify details like indexing behavior, whether book_id must reference an existing book, or what chapter_index values are valid. The description fails to compensate for the missing schema descriptions.
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 ('Mark a chapter done') and adds a unique behavioral effect ('advance the book's shared progress'). This clearly distinguishes it from sibling tools like reader_get_chapter or reader_start_reading. No ambiguity about what action the tool performs.
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 description offers no explicit guidance on when to use this tool versus alternatives. It neither names sibling tools nor states conditions or exclusions. Usage must be inferred from the word 'done', which is not enough for a clear routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_start_readingA
Return one chapter plus this agent's journal, pinned context, and previous discussion.
This is context, not an unread-reply queue. Keep comments short and avoid later-chapter spoilers by convention; the tool does not enforce a spoiler access boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | ||
| chapter_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden and does it well. It frames the output as context, warns that comments are not an unread-reply queue, and explicitly discloses that spoiler boundaries are convention-only and not enforced. It stops short of describing side effects or state changes, but for a read-like tool, the key behavioral caveats are present.
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 two short paragraphs with no filler. It front-loads the return value, then adds essential behavioral caveats about context, comments, and spoiler enforcement. Every sentence contributes useful information without redundancy.
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 description summarizes what is returned and gives important behavioral conventions, and the presence of an output schema reduces the need to document return fields. However, parameter conventions and sibling routing remain implicit, especially the distinction from reader_get_chapter. It is adequate for a simple tool but leaves some selection and invocation details to 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 description coverage is 0%, and the description does not meaningfully explain book_id or chapter_index. It mentions 'one chapter' but never says which parameter selects the book or the chapter, nor does it specify indexing, bounds, or validation behavior. The parameter names are guessable, but the description adds no real semantic value beyond the schema titles.
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 states a specific action and resource: return one chapter plus this agent's journal, pinned context, and previous discussion. This composite return clearly distinguishes it from sibling reader_get_chapter, which presumably returns only a chapter. The verb 'Return' and the explicit scope make the tool's purpose immediately understandable.
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 name 'start_reading' and the bundled return value imply this is the initial-context tool, but the description never explicitly says when to use it instead of reader_get_chapter or another sibling. The line 'This is context, not an unread-reply queue' provides some usage framing, but it does not give direct alternative guidance. Usage is mostly inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reader_update_journalA
Append to this agent identity's separate per-book running journal.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| book_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It usefully discloses that the operation appends rather than overwrites and that the journal is scoped per agent identity and per book, but it does not describe side effects, ordering, idempotency, or any output-related behavior beyond the append action.
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 a single front-loaded sentence with no filler. Every phrase adds meaningful scoping: append direction, agent identity, per-book separation, and journal as the target resource.
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?
For a two-parameter append operation with an output schema, the core invocation is adequately covered. However, the description lacks any note about when to use this over nearby tools like reader_add_annotation, and it omits context about what the journal represents or how appends are structured.
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 description coverage is 0%, so the description must compensate for parameter meaning. It indirectly maps book_id to the per-book journal and implies that text is the content being appended, but it never explicitly states that text is the journal entry or provides constraints on format or length.
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 the specific verb 'Append' and clearly identifies the resource as 'this agent identity's separate per-book running journal,' making the operation unambiguous. It is distinct from sibling tools like reader_add_annotation and reader_get_chapter because it explicitly names the journal as the target.
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 description provides no explicit guidance on when to use this tool versus alternatives. It does not mention how journaling differs from adding annotations or when a journal append is appropriate, leaving the agent to infer the decision context.
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. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
reader_add_annotation - First observed
reader_get_chapter - First observed
reader_get_paragraph_thread - First observed
reader_list_books - First observed
reader_mark_chapter_done - First observed
reader_start_reading - First observed
reader_update_journal
TDQS
Most tools are clearly distinct: listing books, annotating, marking done, updating the journal, and fetching paragraph threads all have separate purposes. However, reader_start_reading and reader_get_chapter both return chapter content, so an agent could be uncertain which to use if it simply wants to read a chapter.
All tools share the reader_ prefix and mostly follow a verb_noun pattern such as list_books, get_chapter, add_annotation, and update_journal. reader_start_reading and reader_mark_chapter_done deviate slightly from the pure noun-object form but are still predictable and readable.
Seven tools is a well-scoped count for a reading, annotation, progress, and journal workflow. Each tool serves a distinct purpose and the set does not feel bloated or thin.
The set covers the core lifecycle: list books, read chapters, annotate paragraphs, view annotation threads, advance progress, and update a journal. Minor gaps exist, such as no standalone journal retrieval or annotation update/delete, but reader_start_reading surfaces the journal and annotations appear designed as append-only.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- JunifyeOAuthpro.publifye
Write books, studies & commentaries with your AI — EPUB, print-ready PDF, web reader, ISBN, RTL
Academic literature search, retrieval, and private library management on top of OpenAlex.
Read-only MCP server exposing a user ORANO library to their own AI agent.
AI-native fiction platform. Any AI can register, read, search and co-author novels via MCP or REST.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to read and navigate EPUB files through 13 specialized tools for pagination, full-text search, metadata access, and footnote resolution. Supports session-based reading with table of contents navigation and chapter summaries.MIT
- AlicenseBqualityCmaintenanceA local MCP server that gives Claude a durable reading room for EPUB and plain text books, enabling chunk-by-chunk navigation, annotations, progress tracking, and shared margin cards.26111MIT
- AlicenseNot gradedqualityCmaintenanceA low-token human-AI co-reading MCP tool that imports local EPUB/TXT/Markdown books into chunks, enabling AI to read only relevant fragments and write co-reading results to long-term reading notes and progress files.65MIT
- AlicenseBqualityBmaintenanceA local MCP server that lets LLM agents read EPUB books and PDF documents with outline-first navigation, precise node reads, and local SQLite persistence.292MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/1nwooozip/reading-cottage'
If you have feedback or need assistance with the MCP directory API, please join our Discord server