Skip to main content
Glama
umsachde

simkl-mcp

by umsachde

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SIMKL_AUTH_PATHYesPath to the simkl_auth.json file containing the Simkl token (used to authenticate requests).

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
login_statusA

Whether this server holds a usable Simkl token, without revealing it.

logoutA

Delete the stored Simkl token from this machine.

This does not revoke the app on Simkl's side -- do that at simkl.com/settings/apps.

get_activitiesA

Timestamps of the user's most recent list changes.

The cheapest call in the API and the gate for every sync: if all has not moved since the last recorded value, nothing needs fetching.

get_libraryA

Read the watch history and watchlists.

type: shows, movies or anime. Omit for all three in one call. status: watching, plantowatch, hold, completed or dropped. Omit for all. date_from: an ISO timestamp from get_activities, passed back byte-for-byte. With it you get only what changed since; without it, the full library.

Deletions never appear in a delta. When activities' removed_from_list moves, call get_library_ids and diff instead.

Returns normalized items plus skipped, the number of entries that carried no Simkl ID. A non-zero skipped is a hole in the exclusion guarantee and must be reported to the user, not hidden.

get_library_idsA

Every Simkl ID in the library, and nothing else.

The cheap half of deletion reconciliation: IDs present locally but absent here have been removed from Simkl, and any rating stored for them is gone too (Simkl wipes the rating on removal).

lookup_watchedA

Ask Simkl directly whether specific titles are already in the library.

items: a list like [{"simkl": 54130}, {"imdb": "tt0110912"}] -- any mix of supported ID keys. Simkl returns a parallel array with each item's library status and last-watched time.

This is the server-side check behind re-com-video's "never already seen" guarantee. It is independent of the local mirror, so it catches anything watched since the last sync.

get_ratingsA

The titles the user has rated themselves.

type: movies, shows or anime. rating: 1-10, or omit for every rating. Ratings 8-10 are the strong positive seeds for "what should I watch tonight"; 1-4 are the negative signal (PLAN.md 5.1).

get_titleA

Full detail record for one title, including its viewer-based neighbours.

type: movie, tv or anime -- Simkl's own classification, which can change for a given title; follow it rather than assuming.

The record carries users_recommendations: titles suggested from what this title's viewers also watched. That is the viewer signal re-com-video ranks on, and the count varies enormously by title.

resolve_idB

Turn an external ID into a Simkl ID -- the cheapest way in.

A TMDB ID needs type ('movie' or 'show'): TMDB IDs are not unique across movies and TV, so a bare TMDB ID is ambiguous and is refused here.

Reads the 301's Location header without following it, as Simkl requires.

searchA

Search Simkl by title.

type: movie, tv or anime. Omit to search everything.

Titles collide constantly -- "The Bear" is seven distinct works. Treat every result as a candidate to disambiguate by year and type, never as the answer. Prefer resolve_id whenever an external ID is available.

mark_watchedA

Record that the user watched these titles.

items: [{"ids": {"simkl": 54130}}, ...]. Add "watched_at" (ISO, UTC) if the date is known; omit it for "now". For "a long time ago, don't remember", Simkl's placeholder is 1970-01-01T00:00:01Z -- store that, and never display it as a literal 1970 date.

type: movie, tv or anime. Anime goes in the shows[] envelope.

Simkl serialises sync writes per user behind a 20-second lock, so batch rather than sending one call per title.

set_statusA

Move titles into a watchlist status.

status: watching, plantowatch, hold, completed or dropped.

Two behaviours worth knowing: movies have no watching or hold, and writing completed for a still-airing show silently becomes watching.

rateB

Rate titles 1-10.

Rating something that is on no list auto-files it: a released movie becomes completed, an unreleased one plan-to-watch, a single-episode show completed, anything else watching. That move is intended -- read the next delta as authoritative rather than trying to predict it.

remove_from_historyA

Remove titles from the watch history.

Removing an item also wipes its Simkl rating. Anything removed here stops being excluded from recommendations, which is usually the point.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: auth (logout, login_status), library retrieval (get_library, get_library_ids, lookup_watched), title info (get_title, search, resolve_id), write actions (mark_watched, set_status, rate, remove_from_history), and sync support (get_activities, get_ratings). Even similar tools like get_library vs get_library_ids are explicitly differentiated by intent (full data vs ID-only for deletion reconciliation).

Naming Consistency5/5

All tool names follow a consistent snake_case verb-noun pattern (e.g., get_activities, mark_watched, resolve_id). Verbs are uniform across CRUD-like operations, and even standalone verbs like 'search' and 'rate' fit the pattern. No mixed conventions or ambiguous naming.

Tool Count5/5

14 tools is well-scoped for a media library sync and recommendation server. Each tool fills a clear role—auth, reading, writing, ID resolution, and search—without redundancy. The count is neither bloated nor insufficient, covering the full integration surface.

Completeness5/5

The tool surface covers the entire lifecycle: login status, library synchronization with delta support, deletion reconciliation, direct watched-check, ratings, title details, ID resolution, search, and all write operations (mark, status, rate, remove). No obvious gaps for the stated purpose of powering a recommendation system.

Maintenance

ActivityMaintained
ResponsivenessNo issues