letterboxd-mcp
letterboxd-mcp
Letterboxd ユーザーの視聴履歴を LLM に渡す MCP サーバーです。これにより、モデルがあなたの観た作品を読み取り、あなたが本当に好きそうな新しい映画を提案できます。
RSS を使う理由
Letterboxd には公式の公開 API がありません。ユーザーごとの RSS フィード(https://letterboxd.com/{username}/rss/)だけが正規の機械可読なインターフェースなので、このサーバーはそれを解析します。スクレイピングもログインも不要です。
注記: フィードには直近の ~50 件の日記エントリーしか含まれません。
Related MCP server: Filmladder MCP Server
ツール
ツール | 戻り値 |
| 直近のエントリー: 映画、年、レーティング、いいね、再視聴、視聴日、レビュー本文、TMDB id |
| 同上。ただし、レビュー本文が書かれたエントリーのみ |
必要なもの
フィードで拾ってもらうには、映画が日記に記録されている必要があります。作品ページで星評価を付けてもカウントされず、フィードには届きません。代わりに Log/Review フローを使い、そこでレーティングを設定してください。レビュー本文は任意です。
書かれたレビューは、1 行でも役立ちます。レーティングはモデルに、あなたが何を観たのかを伝えます。レビューは、なぜあなたがそれを好きだったのか、あるいは嫌いだったのかを伝えます。そして、その後半の情報こそが、提案を実際に役立つものにするのです。
セットアップ
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 checkMCP クライアント登録
{
"mcpServers": {
"letterboxd": {
"command": "uv",
"args": ["run", "--directory", "/path/to/letterboxd-mcp", "python", "server.py"]
}
}
}Available Tools
2 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| username | 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, 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.
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.
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.
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.
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.
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.
2 tool updates
v0.1.0- First observed
get_diary - First observed
get_reviews
TDQS
Scored across 2 tools
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.
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.
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.
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
Related MCP Connectors
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
- AchriomOAuthcom.achriom
Media memory for AI agents and their humans: books, movies, music, shows, anime, podcasts, games.
Ask Claude, ChatGPT, or Grok about your ReelRifter watchlist, history, and viewing stats.
- RecaloOAuthcom.recaloapp
Your life in Recalo, from your AI: recipes, movies, books, places, people. Needs a Recalo account.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables 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.4103 npm4MIT
- FlicenseNot gradedqualityDmaintenanceProvides 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-
- FlicenseNot gradedqualityCmaintenanceA 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-
- AlicenseNot gradedqualityDmaintenanceEnables AI models to interact with Letterboxd data and perform account actions like rating films, writing reviews, and managing watchlists.4ISC