Skip to main content
Glama
rhrabun

letterboxd-mcp

by rhrabun

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.

Related MCP server: Filmladder MCP Server

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.

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

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

Available Tools

2 tools
get_diaryA

Get a Letterboxd user's recent watched films: title, year, rating, liked, rewatch, watched date, review text, TMDB id. Returns ~50 most recent entries. Use to understand someone's taste before recommending movies.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry behavioral context. It makes clear this is a retrieval operation and adds a meaningful behavior: it returns about 50 most recent entries. It does not discuss auth, rate limits, or edge cases, but for a read-only lookup the behavior is reasonably disclosed.

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 two sentences, front-loads the purpose and result fields, and finishes with a concrete use case. Each sentence earns its place, though the field list is a little dense.

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?

With a single parameter, an output schema, and a clear description of returned fields and volume, this is largely complete for making the call. The main missing piece is guidance on the exact username format or pagination behavior, but these are minor for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter, username, with 0% description coverage. The description compensates by indicating this is a Letterboxd user whose recent watched diary will be returned. For a single simple string parameter, this fills the gap well enough.

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 states a clear action and resource: get a Letterboxd user's recent watched films, and it enumerates the returned fields. It is specific enough to understand what the tool does, though it does not explicitly differentiate itself from the sibling get_reviews.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear intended use: 'Use to understand someone's taste before recommending movies.' It does not mention when not to use it or explicitly compare with get_reviews, but the context is sufficient for most selection decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reviewsA

Get only the Letterboxd user's recent diary entries that have written review text (skips plain 'watched on' logs).

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the key filtering behavior—only entries with review text are returned—but does not mention authentication requirements, rate limits, pagination, or what 'recent' means. This gives the core behavior but leaves some operational details unspecified.

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 one focused sentence that front-loads the main filtering behavior and wastes no words. It captures the essential distinction in a compact, scannable way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one well-named parameter and an output schema, the description is complete enough for selection and invocation. It conveys what the tool returns, what it excludes, and how it differs from its sibling.

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 schema has a single username parameter with no description coverage, and the tool description does not mention username at all. However, username is self-explanatory, so the missing description is not a major obstacle. Still, the description adds no parameter-level nuance beyond the schema.

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 and resource: it gets the user's diary entries that contain written review text and explicitly excludes plain 'watched on' logs. This clearly differentiates it from the sibling get_diary, so an agent can immediately understand the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the selection criteria clear: only diary entries with written review text, skipping plain logs. This implicitly tells the agent when to use get_reviews instead of the companion get_diary, though it does not explicitly name get_diary or state when not to use this tool.

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.

  1. 2 tool updatesv0.1.0
    • First observedget_diary
    • First observedget_reviews

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

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
    B
    quality
    D
    maintenance
    Enables AI assistants like Claude to interact with The Movie Database (TMDB) API, providing capabilities for searching movies, retrieving movie details, and generating customized movie reviews and recommendations.
    4
    134
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides movie listings, showtimes, and personalized recommendations for Amsterdam cinemas by scraping filmladder.nl, with support for filtering by date, cinema, rating, and preferred showtimes.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Tracks movies, books, and TV shows with ratings and preferences, providing intelligent cross-media recommendations. Automatically fetches metadata from OMDB, Google Books, and TMDB to help manage watchlists and analyze viewing patterns.
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A comprehensive MCP server that enables users to interact with Letterboxd for searching films, viewing member data, and performing actions like rating or reviewing movies. It supports private data access and automated browser actions for managing watchlists, diaries, and custom lists.
    1
    -