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 방식으로 기록하고 거기서 평점을 설정하세요. 리뷰 텍스트는 선택 사항입니다.
작성된 리뷰는 여전히 도움이 됩니다. 한 줄이라도 좋습니다. 평점은 모델이 무엇을 봤는지 알려 주고, 리뷰는 그 영화를 왜 좋아했는지 혹은 싫어했는지를 알려 줍니다. 그리고 이 두 번째 부분이 있어야 추천이 실제로 쓸모 있게 됩니다.
설치
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