Resources
+1
- + tvmaze-guide
io.github.cyanheads/tvmaze-mcp-server
7 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.
https://raw.githubusercontent.com/cyanheads/tvmaze-mcp-server/HEAD/AGENTS.md
− **Version:** 0.2.1− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.14`− **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0− **Zod:** ^4.6.5− import { field, ShowSummary, showSummaryLines, yearRange } from './shared-schemas.js';− `### ${show.name} (${yearRange(show)})`,− This server ships neither — everything is reachable through the seven tools, a `tvmaze://shows/{id}` resource would only mirror `tvmaze_get_show` while demanding the one thing a caller starting from a title lacks, and the domain has no recurring interaction worth templating (`docs/design.md` § Design Decisions). If that changes, the `add-resource` and `add-prompt` skills carry the current patterns — don't hand-write one from memory.− tools: [searchShows, getShow, lookupShow, getNextEpisode, getEpisodes, getSchedule, getCast],− index.ts # createApp() entry point — seven tools, instructions, service lifecycle+ **Version:** 0.3.0+ **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+ import { field, inline, ShowSummary, showSummaryLines, yearRange } from './shared-schemas.js';+ .trim()+ `### ${inline(`${show.name} (${yearRange(show)})`)}`,+ This server ships neither — everything is reachable through the eight tools, a `tvmaze://shows/{id}` resource would only mirror `tvmaze_get_show` while demanding the one thing a caller starting from a title lacks, and the domain has no recurring interaction worth templating (`docs/design.md` § Design Decisions). If that changes, the `add-resource` and `add-prompt` skills carry the current patterns — don't hand-write one from memory.+ tools: [searchShows, getShow, lookupShow, getNextEpisode, getEpisodes, getSchedule, getCast, getPerson],+ index.ts # createApp() entry point — eight tools, instructions, service lifecycle
https://raw.githubusercontent.com/cyanheads/tvmaze-mcp-server/HEAD/AGENTS.md
− **Version:** 0.2.0− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.6`− **MCP SDK:** `@modelcontextprotocol/server` ^2.0.0− **Zod:** ^4.4.3− | `ctx.fail` / `ctx.recoveryFor` | Typed throw against the tool's own `errors[]` reason union, and the declared recovery hint to forward as the throw's data. See Errors. |− | `ctx.requestId` | Unique request ID. |− `ctx.requestInput` / `ctx.inputs` are unused — no handler asks the caller for input mid-flight, which is why `createApp()` can declare a plain `sessionMode: 'stateless'` rather than `require: 'stateful'`. Adding an elicitation to any tool means revisiting that declaration. `ctx.content` is unused as well: every response is text plus `structuredContent`, and image URLs are returned as fields, not as image blocks. The framework CLAUDE.md carries the full signatures for all four.− **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− ...ctx.recoveryFor('show_not_found'),− **A 404 becomes `null` in the service, not a throw.** Every by-id fetch method returns `T | null`, so the handler decides what a miss means — a typed `ctx.fail` where the caller supplied an id, or a `{ found: false, guidance }` result where resolving an identifier was the tool's whole job (`tvmaze_lookup_show`, the title arm of `tvmaze_get_next_episode`). That keeps every `ctx.fail` lexically inside a handler, the only place the `error-contract-unthrown` and `error-contract-recovery-unforwarded`− **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.2.1+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.14`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0+ **Zod:** ^4.6.5+ | `ctx.fail` / `ctx.recoveryFor` | Typed throw against the tool's own `errors[]` reason union — the framework fills the declared recovery hint — and that hint as data, for building an explicit override. See Errors. |+ | `ctx.requestId` | Request ID — the one every log record of the call carries and its error envelope returns as `data.requestId`. |+ `ctx.requestInput` / `ctx.inputs` / `ctx.clientCapabilities` are unused — no handler asks the caller for input mid-flight, which is why `createApp()` can declare a plain `sessionMode: 'stateless'` rather than `require: 'stateful'`. Adding an elicitation to any tool means revisiting that declaration. `ctx.content` is unused as well: every response is text plus `structuredContent`, and image URLs are returned as fields, not as image blocks. The framework CLAUDE.md carries the full signatures for a+ **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 puts it on the+ **A 404 becomes `null` in the service, not a throw.** Every by-id fetch method returns `T | null`, so the handler decides what a miss means — a typed `ctx.fail` where the caller supplied an id, or a `{ found: false, guidance }` result where resolving an identifier was the tool's whole job (`tvmaze_lookup_show`, the title arm of `tvmaze_get_next_episode`). That keeps every `ctx.fail` lexically inside a handler, the only place the `error-contract-unthrown` lint can see it. Where the service must t+ **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
We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect