Skip to main content
Glama
1nwooozip

reading-cottage

by 1nwooozip

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" serve

Open 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 2

Connect 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

reader_list_books

List books and reading progress

reader_start_reading

Get a chapter, the agent's notes, starred context, and the previous chapter's discussion

reader_get_chapter

Read a chapter with annotations and highlights

reader_add_annotation

Add a paragraph annotation or reply

reader_mark_chapter_done

Mark a chapter as read and advance progress

reader_update_journal

Append to cross-chapter notes

reader_get_paragraph_thread

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 -q

Integration 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

Licensed under AGPL-3.0-or-later. See SOURCE.md for project provenance and third-party credits.

Available Tools

7 tools
reader_add_annotationB

Write a paragraph annotation as this MCP server's stable agent identity.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
reply_to_idNo
paragraph_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paragraph_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderNorecent

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
book_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 7 tool updatesv0.1.0
    • First observedreader_add_annotation
    • First observedreader_get_chapter
    • First observedreader_get_paragraph_thread
    • First observedreader_list_books
    • First observedreader_mark_chapter_done
    • First observedreader_start_reading
    • First observedreader_update_journal

TDQS

A3.5/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    65
    MIT

Latest Blog Posts

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