Skip to main content
Glama
aby0

reading-companion

by aby0
README.md
# Reading Companion

A 4-stage reading companion that helps you set goals, discover books, track progress, and deepen learning through reflection.

Works as an MCP (Model Context Protocol) server integrated with Claude Desktop.

## The 4 Stages

```
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   STAGE 1    │     │   STAGE 2    │     │   STAGE 3    │
│ Interviewer  │ ──▶ │   Context    │ ──▶ │   Syllabus   │
│              │     │   Builder    │     │   Builder    │
│ "Who are you │     │  "Extract    │     │ "Build your  │
│  as a reader"│     │   patterns"  │     │  book stacks"│
└──────────────┘     └──────────────┘     └──────────────┘
       │                                          │
       │              ┌──────────────┐            │
       └────────────▶ │   STAGE 4    │ ◀──────────┘
                      │  Reflection  │
                      │   Partner    │
                      │              │
                      │ "What did    │
                      │  you learn?" │
                      └──────────────┘
```

1. **Interviewer** - Builds your reading profile through conversation
2. **Context Builder** - Extracts deeper patterns from your profile
3. **Syllabus Builder** - Creates curated book stacks for each domain
4. **Reflection Partner** - Helps process books and track growth

## Installation

### Prerequisites

- Python 3.10+
- [uv](https://docs.astral.sh/uv/) (Python package manager)
- Claude Desktop

### Setup

```bash
# Clone the repo
git clone https://github.com/aby0/reading-companion
cd reading-companion

# Install dependencies
uv sync
```

### Configure Claude Desktop

Add to your Claude Desktop config file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "reading-companion": {
      "command": "uv",
      "args": ["--directory", "/path/to/reading-companion", "run", "reading-companion"]
    }
  }
}
```

Replace `/path/to/reading-companion` with the actual path where you cloned the repo.

Restart Claude Desktop. You should see "Reading Companion" in the MCP servers list (hammer icon).

## Usage

### Initial Setup (Do Once)

**Step 1: Run the Interview**
```
You: "Interview me for my reading goals"
```
Claude will ask about your goals, preferences, and context. At the end, your profile is saved.

**Step 2: Extract Context (Optional)**
```
You: "Analyze my reading profile"
```
Claude extracts deeper patterns to improve recommendations.

**Step 3: Build Your Book Stacks**
```
You: "Build me a reading stack for classic literature"
```
Get curated book recommendations for each domain.

### Ongoing Use

**Log a completed book:**
```
You: "I just finished Anna Karenina by Tolstoy"
```

**Reflect on a book:**
```
You: "I want to reflect on Anna Karenina"
```

**Check progress:**
```
You: "How's my reading progress?"
```

**Get next recommendation:**
```
You: "What should I read next?"
```

**Add a book manually:**
```
You: "Add 'War and Peace' to my classic lit stack"
```

## Available Tools

### Stage 1: Interviewer
| Tool | Description |
|------|-------------|
| `start_interview` | Begin the reading goal interview |
| `save_profile` | Save interview results as profile |
| `get_profile` | View current profile |

### Stage 2: Context Builder
| Tool | Description |
|------|-------------|
| `extract_context` | Analyze profile for deeper patterns |
| `update_latent_features` | Save extracted features |

### Stage 3: Syllabus Builder
| Tool | Description |
|------|-------------|
| `build_bookstack` | Generate recommendations for a domain |
| `save_bookstack` | Save generated book stack |
| `get_bookstacks` | View all book stacks |
| `get_next_book` | Get next unread book |
| `add_book_to_stack` | Manually add a book |

### Stage 4: Reflection
| Tool | Description |
|------|-------------|
| `log_book` | Quick log a completed book |
| `start_reflection` | Begin deep reflection session |
| `save_reflection` | Save reflection insights |
| `get_reading_log` | View reading history |
| `get_progress` | Get progress summary |

### Author & Pattern Analysis
| Tool | Description |
|------|-------------|
| `analyze_reading_patterns` | Analyze your reading history for patterns |
| `get_author_profile` | View profile for an author you've read |
| `update_author_notes` | Add style notes about an author |
| `get_favorite_authors` | List your top authors by affinity |
| `add_book_connection` | Link related books together |
| `get_similar_books` | Find books connected to one you've read |

## Data Storage

All your reading data is stored in `~/reading-companion-data/` (separate from the code):

```
~/reading-companion-data/
├── profile.md                    # Your profile (human-readable)
├── profile.json                  # Profile data (system)
├── bookstacks.json               # All stacks data (system)
├── authors.json                  # Author tracking (system)
├── patterns.json                 # Reading patterns (system)
├── connections.json              # Book connections (system)
│
├── bookstacks/                   # Book recommendations
│   ├── _index.md                 # Overview of all stacks
│   ├── classic_lit.md            # One file per domain
│   └── neuroscience.md
│
├── progress/                     # Progress tracking
│   ├── _current.md               # Current status with progress bars
│   ├── _insights.md              # Reading pattern insights
│   └── reading_log.json          # Structured log (system)
│
├── authors/                      # Author profiles
│   ├── _index.md                 # All authors by affinity
│   ├── leo-tolstoy.md            # One file per author
│   └── james-clear.md
│
└── reflections/                  # Book reflections
    ├── _index.md                 # Index of all books read
    ├── anna-karenina.md          # One file per book
    └── atomic-habits.md
```

**Key feature**: All `.md` files are human-readable and can be opened in VS Code, Obsidian, or any text editor.

## Customization

### Prompts

The prompts that guide each stage are in the `reading_companion/prompts/` directory:

- `interviewer.md` - How interviews are conducted
- `context_builder.md` - How profiles are analyzed
- `syllabus_builder.md` - How books are curated
- `reflection.md` - How reflections are guided

Feel free to customize these to match your preferences.

### Domains

You can have any reading domains you want - they're not hardcoded. During the interview, define whatever areas interest you:
- Classic Literature
- Science Fiction
- Neuroscience
- Philosophy
- Engineering
- History
- Whatever you're curious about!

## Principles

- **Intentional over random** - Every book serves a purpose
- **Learning over consuming** - Reflection matters as much as reading
- **Progress over perfection** - Steady beats ambitious
- **Personal over popular** - What fits YOU, not bestseller lists

## Troubleshooting

**"Reading Companion not appearing in Claude Desktop"**
- Check that the path in `claude_desktop_config.json` is correct
- Restart Claude Desktop
- Check the MCP logs for errors

**"No profile found"**
- Run `start_interview` first to create your profile

**"Domain not found"**
- Check your domain ID matches what's in your profile
- Use `get_profile` to see available domains

## Development

To run the server directly for testing:
```bash
uv run reading-companion
```

To test with the MCP inspector:
```bash
npx @modelcontextprotocol/inspector uv run reading-companion
```

## License

MIT

TDQS

B3.2/5.0

Scored across 21 tools

Disambiguation4/5

Tools have distinct purposes, though some like get_next_book and get_similar_books could be confused; descriptions help resolve ambiguity.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with underscores, making them predictable and easy to understand.

Tool Count4/5

21 tools is on the higher side for typical MCP servers, but each serves a unique function in the reading companion domain without redundancy.

Completeness3/5

Covers core CRUD for profiles, stacks, connections, and reflections, but lacks update/delete for some entities and a book search feature.

Maintenance

ActivityInactive
ResponsivenessNo issues