Skip to main content
Glama
rhrabun

letterboxd-mcp

by rhrabun
README.md
# letterboxd-mcp

An MCP server that feeds a Letterboxd user's viewing history to LLMs, so the model can read what you watched and suggest new movies you'll actually like.

## Why RSS?

Letterboxd has no official public API. The per-user RSS feed (`https://letterboxd.com/{username}/rss/`) is the only sanctioned machine-readable surface, so this server parses it. No scraping, no login.

**Note**: the feed only holds the ~50 most recent diary entries.

## Tools

| Tool | Returns |
|------|---------|
| `get_diary(username)` | Recent entries: film, year, rating, liked, rewatch, watched date, review text, TMDB id |
| `get_reviews(username)` | Same, but only entries with written review text |

## What it needs

Films must be in your diary for the feed to pick them up. Star-rating a film on its page doesn't count; it never reaches the feed. Use the Log/Review flow instead and set your rating there. Review text optional.

Written reviews still help, even a single line. A rating tells the model what you watched. A review tells it why you liked or hated it, and that second part is what makes its suggestions any good.

## Setup

Requires [uv](https://docs.astral.sh/uv/).

```sh
uv sync
uv run python test_server.py   # self-check against bundled fixtures
uv run python smoke.py <your_username>  # live end-to-end check
```

## MCP client registration

```json
{
  "mcpServers": {
    "letterboxd": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/letterboxd-mcp", "python", "server.py"]
    }
  }
}
```

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation2/5

get_diary and get_reviews both return diary entries, and get_diary already includes review text. The only distinction is that get_reviews filters out entries without text, which is a minor filtering difference rather than a clearly separate purpose. An agent could easily pick the wrong one or assume get_reviews returns something fundamentally different.

Naming Consistency5/5

Both tools follow the exact verb_noun pattern (get_ + resource) with clear and consistent naming. get_diary and get_reviews are both prefixed with 'get' and use lowercase snake_case, maintaining a predictable and uniform style.

Tool Count2/5

Two tools is very thin for a Letterboxd server, especially since the broader Letterboxd domain includes films, lists, ratings, watchlists, and user profiles. While the two tools cover a narrow use case, the count feels too low for a comprehensive MCP server.

Completeness2/5

The tool set covers diary entries and written reviews but lacks any other Letterboxd functionality such as searching films, fetching user profile data, adding to watchlists, or rating films. Even within the 'understanding taste' purpose, there is no way to query older snippets or paginate beyond the ~50 most recent entries, causing incomplete retrospective data.

Maintenance

ActivitySlowing
ResponsivenessNo issues