Skip to content

tmdb mcp server changelog

io.github.cyanheads/tmdb-mcp-server

6 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • AGENTS.md +8 −6

    https://raw.githubusercontent.com/cyanheads/tmdb-mcp-server/HEAD/AGENTS.md

    − **Version:** 0.1.5− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.15`− **MCP SDK:** `@modelcontextprotocol/server` ^2.3.1− Skills are modular instructions in `framework-skills/` at the project root. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. The directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand these development skills to every agent that installs it. Keep `skills/` free for skills meant f− | `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity (run by devcheck) |− `npm run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips two classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`) and platform-specific native bindings, which would otherwise lock the bundle to the platform it was + **Version:** 0.2.0+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.18`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.4.0+ Development skills live in `framework-skills/`; read the matching `SKILL.md` before a task. `bun run list-skills` prints the registry. Maintenance syncs framework-managed skills and existing agent mirrors, preserving server-authored skills.+ Root `skills/tmdb-guide/SKILL.md` is published for agents calling the tools: regional watchlists, directing credits, filmography continuation, and season traversal. Plugin hosts discover it, npm and Docker ship it, and `createApp({ skills: 'skills' })` serves it through MCP. Use `framework-skills/add-skill/SKILL.md` before editing that tree; `lint:packaging` validates it. Never copy development skills into root `skills/`.+ | `add-skill` | Author a published tool-usage skill in root `skills/`, with identifier chains, gates, and delivery validation |+ | `bun run lint:packaging` | Packaging checks — env-var parity, bundle exclusions, plugin manifests, and the published `skills/` tree (run by devcheck) |+ `bun run bundle` packs the server and root `skills/`, prunes dev dependencies, then strips dependency documentation, platform-specific native bindings, node-gyp build output, and build-only framework files. Root development paths belong in `.mcpbignore` as anchored patterns. The cleaner and packaging linter deliberately match dependency skill documentation at package roots only: SDK `dist/ext/skills` modules are runtime code and must survive ([cyanheads/mcp-ts-core#794](https://github.com/cyanhe

  • server.json 1 field changed
    version
    0.1.5 0.2.0

  • AGENTS.md +8 −7

    https://raw.githubusercontent.com/cyanheads/tmdb-mcp-server/HEAD/AGENTS.md

    − **Version:** 0.1.4− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.13`− **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0− **Zod:** ^4.6.5−   defaultRegion: z.string().default('US').describe('Default ISO 3166-1 region hint for region-aware error messages.'),− | `ctx.recoveryFor(reason)` | Typed lookup of a declared hint. `tmdb_discover_titles` keeps an explicit forward for its direct-handler recovery test; the framework also fills the hint on production envelopes. |− | `ctx.requestId` | Unique request ID. |+ **Version:** 0.1.5+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.15`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.3.1+ **Zod:** ^4.6.7+ Discovery maps TV `primary_release_date.asc/desc` to `first_air_date.asc/desc`; TV revenue sorts explicitly use `popularity.desc` with a notice. Never add implicit date bounds. Person filmography uses `credits_page` (default 1), independent 50-entry cast/crew slices after stable release-year sorting, and an optional `next_credits_page`. Continuation guidance preserves supplied language; the person resource keeps its first-page shape without tool paging fields.+   defaultRegion: z.string().default('US').describe('ISO 3166-1 country example in discovery missing-region errors; never a query default.'),+ | `ctx.recoveryFor(reason)` | Typed lookup of a declared hint. Discovery builds its missing-region hint at handler time using `defaultRegion` as an example only; availability queries still require a caller-selected region. |+ | `ctx.requestId` | Request ID — the one every log record of the call carries and its error envelope returns as `data.requestId`. |

  • server.json 1 field changed
    version
    0.1.4 0.1.5

  • AGENTS.md +10 −9

    https://raw.githubusercontent.com/cyanheads/tmdb-mcp-server/HEAD/AGENTS.md

    − **Version:** 0.1.3− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.6`− **MCP SDK:** `@modelcontextprotocol/server` ^2.0.0− | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.getMany(keys)`, `.list(prefix, { cursor, limit })`. Accepts any serializable value. |− | `ctx.inputs` | Reader over a retried request's responses — `.accepted(key, schema)`, `.view(key)`, `.state()`, `.dropped`. Empty on the first round. |− | `ctx.recoveryFor(reason)` | Typed lookup of the contract `recovery` for a declared reason — used by `tmdb_discover_titles` to mirror the `region_required` hint onto the wire. |− **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable?, severity?, thrownBy? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required (≥ 5 words, lint-validated) — the single source of truth for the agent's next move. Pass `ctx.recoveryFor('reaso−   if (!item) throw ctx.fail('no_match', `No item ${input.id}`, ctx.recoveryFor('no_match'));− **Every release goes through a release PR, straight-through** — `git-wrapup`'s "Release PR mode", mode `straight-through`. One run: `git-wrapup` lands the commit stack on `release/<version>`, pushes it, and opens the PR (title = the release commit subject, body = the changelog entry plus a gates section); `release-and-publish` then fast-forwards `main` locally with `git merge --ff-only`, creates the tag on `main`'s tip, pushes `main` and the tag, deletes the branch, and publishes. A caller's bri+ **Version:** 0.1.4+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.13`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0+ | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.getMany(keys)`, `.list(prefix, { cursor, limit })`. Accepts any JSON-serializable value; reads return its JSON form (a `Date` comes back as an ISO string). |+ | `ctx.inputs` | Client-supplied responses, filtered by declared capabilities. Consent gates trust a server-stored record bound to operation, caller, and target. |+ | `ctx.clientCapabilities` | Capabilities declared for this request, or `undefined`; use for optional input, never to skip consent. |+ | `ctx.recoveryFor(reason)` | Typed lookup of a declared hint. `tmdb_discover_titles` keeps an explicit forward for its direct-handler recovery test; the framework also fills the hint on production envelopes. |+ **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable?, severity?, thrownBy? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required (≥ 5 words, lint-validated) — the single source of truth for the agent's next move. The framework fills a declar+   if (!item) throw ctx.fail('no_match', `No item ${input.id}`);+ **Every release goes through a release PR, straight-through** — `git-wrapup`'s "Release PR mode", mode `straight-through`. One run: `git-wrapup` lands the commit stack on `release/<version>`, pushes it, and opens the PR (title = the release commit subject, body = the release digest: theme line, `## Changes`, `## Gates`, changelog link last); `release-and-publish` then fast-forwards `main` locally with `git merge --ff-only`, creates the tag on `main`'s tip, pushes `main` and the tag, deletes the 

  • server.json 1 field changed
    version
    0.1.3 0.1.4