protogrid

Search / io.github.cyanheads/tvmaze-mcp-server

tvmaze-mcp-server

R0· no sign-in

TVmaze shows, people, next episodes in your timezone, episode guides, schedules, and credits.

v0.3.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality84good
Trust94of 100
Uptime, 30 days100%
Latency p50190 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "tvmaze-mcp-server": {
      "type": "http",
      "url": "https://tvmaze.caseyjhand.com/mcp"
    }
  }
}
claude mcp add --transport http tvmaze-mcp-server https://tvmaze.caseyjhand.com/mcp
[mcp_servers.tvmaze-mcp-server]
url = "https://tvmaze.caseyjhand.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tvmaze-mcp-server": {
      "type": "remote",
      "url": "https://tvmaze.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "tvmaze-mcp-server": {
      "type": "http",
      "url": "https://tvmaze.caseyjhand.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=tvmaze-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdHZtYXplLmNhc2V5amhhbmQuY29tL21jcCJ9"
}
{
  "servers": {
    "tvmaze-mcp-server": {
      "type": "http",
      "url": "https://tvmaze.caseyjhand.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "tvmaze-mcp-server": {
      "httpUrl": "https://tvmaze.caseyjhand.com/mcp"
    }
  }
}
extensions:
  "tvmaze-mcp-server":
    enabled: true
    name: "tvmaze-mcp-server"
    type: streamable_http
    uri: "https://tvmaze.caseyjhand.com/mcp"
    timeout: 300

Quality 84 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations8 of 8 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: tvmaze_lookup_show (destructiveHint); tvmaze_get_next_episode (destructiveHint); tvmaze_get_episodes (destructiveHint); …
  • pass
    tools.token_costabout 3,567 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes6 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15

8 tools, about 3,567 tokens to load them all · tool set 01143d1c453f · tools last changed 2026-10-16 · checked 2026-10-20 15:57 UTC

Tool changes

  • tvmaze_get_personadded

    Search people by name to return candidates, then select a person_id to list their cast, guest, or crew credits. Name searches never select a person automatically. Credits preserve source order and page at 50 rows by default, up to 250 per call; show_id chains to tvmaze_get_show or tvmaze_get_episodes, and guest episode_id chains to tvmaze_get_cast with scope "episode".

  • tvmaze_get_castchangedinput schema, output schema
  • tvmaze_get_schedulechangedinput schema, output schema
  • tvmaze_get_episodeschangedinput schema, output schema
  • tvmaze_lookup_showchangedoutput schema
  • tvmaze_get_showchangedoutput schema

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% +updated-4d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://tvmaze.caseyjhand.com/mcp streamable-httpnoneyes100%190 ms2026-07-282026-10-20
packageregistryversionruntimesecrets
@cyanheads/tvmaze-mcp-servernpm0.3.0npx
@cyanheads/tvmaze-mcp-servernpm0.3.0npx

Tools (8)

tvmaze_get_castread-onlyList the credited cast of a show with the characters they play, optionally with crew; or list the guest cast of one episode, optionally with its guest crew such as the director and writers. Results are paged: cast rows come first, then crew rows, and each page splits them back into cast and crew. The source records no recurring-versus-guest distinction on a show’s cast list, so a name’s absence from it does not mean the performer never appeared — check an episode’s guest cast for that.
tvmaze_get_episodesread-onlyList a show’s episodes with air times, runtimes, and synopses. Pass a season number to list one season, which is the cheaper path and the usual one; pass air_date to list the episodes dated to one day, the direct path to a single night of a daily show; omit both to walk the whole run, which is paged because a long-running series returns hundreds of episodes. Specials are excluded unless include_specials is set, and the number left out is reported.
tvmaze_get_next_episoderead-onlyReport when a show’s next episode airs, converted to a viewer timezone. Accepts a TVmaze id or a show title — a title is resolved with a stricter single-match search than tvmaze_search_shows uses. A show with no scheduled next episode is reported as a miss carrying its most recent episode, which is the normal state for a series between seasons.
tvmaze_get_personread-onlySearch people by name to return candidates, then select a person_id to list their cast, guest, or crew credits. Name searches never select a person automatically. Credits preserve source order and page at 50 rows by default, up to 250 per call; show_id chains to tvmaze_get_show or tvmaze_get_episodes, and guest episode_id chains to tvmaze_get_cast with scope "episode".
tvmaze_get_scheduleread-onlyList television episodes airing on a given date. Scope "linear" covers broadcast and cable networks in one country; "streaming" covers streaming services — global services such as Netflix and Prime Video when no country is given, or that country’s local streaming services when one is. Scope "all" merges both. The source caches schedule data for up to an hour, so a same-day listing can lag a late change.
tvmaze_get_showread-onlyFetch a television show by its TVmaze id: full profile, weekly broadcast slot, season list, and the previous and next episode when the source has them. This is the entry point for an id returned by tvmaze_search_shows or tvmaze_lookup_show. For the episode list itself use tvmaze_get_episodes, and for credits use tvmaze_get_cast.
tvmaze_lookup_showread-onlyResolve a television show from its id in another catalog — IMDb, TheTVDB, or TVRage — and return the matching TVmaze profile. Use this to cross a show id from another source into TVmaze. A show absent from TVmaze is reported as a miss with guidance, not an error.
tvmaze_search_showsread-onlySearch television shows by title and return up to 10 matches, each with its network or streaming service, production status, genres, rating, and ids in other catalogs. Matching is fuzzy, so small typos still resolve. The result set is hard-capped at 10 by the source and cannot be paged — narrow the title to reach an eleventh match. To go the other way, from an IMDb or TheTVDB id to a show, use tvmaze_lookup_show.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 140 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/tvmaze-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://tvmaze.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.3.0",
  "packages": [
    {
      "version": "0.3.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/tvmaze-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "TVMAZE_BASE_URL",
          "format": "string",
          "default": "https://api.tvmaze.com",
          "description": "TVmaze API base URL. Override to point at an enterprise endpoint."
        },
        {
          "name": "TVMAZE_USER_AGENT",
          "format": "string",
          "description": "User-Agent sent on every upstream request. TVmaze asks that clients identify themselves. Defaults to the server name, version, and repository URL."
        },
        {
          "name": "TVMAZE_DEFAULT_TIMEZONE",
          "format": "string",
          "default": "UTC",
          "description": "IANA timezone used when a tool call omits 'timezone' (e.g. 'America/Los_Angeles')."
        },
        {
          "name": "TVMAZE_DEFAULT_COUNTRY",
          "format": "string",
          "default": "US",
          "description": "ISO 3166-1 alpha-2 country used for tvmaze_get_schedule scopes 'linear' and 'all' when 'country' is omitted."
        },
        {
          "name": "TVMAZE_CACHE_TTL_S",
          "format": "string",
          "default": "300",
          "description": "Seconds to hold an upstream response in the in-process cache. 0 disables caching."
        },
        {
          "name": "TVMAZE_MAX_CONCURRENCY",
          "format": "string",
          "default": "4",
          "description": "Concurrent upstream requests."
        },
        {
          "name": "TVMAZE_REQUEST_TIMEOUT_MS",
          "format": "string",
          "default": "10000",
          "description": "Per-request timeout in milliseconds."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    },
    {
      "version": "0.3.0",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/tvmaze-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_TRANSPORT_TYPE",
          "value": "http",
          "format": "string",
          "description": "Selects the HTTP transport."
        },
        {
          "name": "TVMAZE_BASE_URL",
          "format": "string",
          "default": "https://api.tvmaze.com",
          "description": "TVmaze API base URL. Override to point at an enterprise endpoint."
        },
        {
          "name": "TVMAZE_USER_AGENT",
          "format": "string",
          "description": "User-Agent sent on every upstream request. TVmaze asks that clients identify themselves. Defaults to the server name, version, and repository URL."
        },
        {
          "name": "TVMAZE_DEFAULT_TIMEZONE",
          "format": "string",
          "default": "UTC",
          "description": "IANA timezone used when a tool call omits 'timezone' (e.g. 'America/Los_Angeles')."
        },
        {
          "name": "TVMAZE_DEFAULT_COUNTRY",
          "format": "string",
          "default": "US",
          "description": "ISO 3166-1 alpha-2 country used for tvmaze_get_schedule scopes 'linear' and 'all' when 'country' is omitted."
        },
        {
          "name": "TVMAZE_CACHE_TTL_S",
          "format": "string",
          "default": "300",
          "description": "Seconds to hold an upstream response in the in-process cache. 0 disables caching."
        },
        {
          "name": "TVMAZE_MAX_CONCURRENCY",
          "format": "string",
          "default": "4",
          "description": "Concurrent upstream requests."
        },
        {
          "name": "TVMAZE_REQUEST_TIMEOUT_MS",
          "format": "string",
          "default": "10000",
          "description": "Per-request timeout in milliseconds."
        },
        {
          "name": "MCP_HTTP_HOST",
          "format": "string",
          "default": "127.0.0.1",
          "description": "The hostname for the HTTP server."
        },
        {
          "name": "MCP_HTTP_PORT",
          "format": "string",
          "default": "3010",
          "description": "The port to run the HTTP server on."
        },
        {
          "name": "MCP_HTTP_ENDPOINT_PATH",
          "format": "string",
          "default": "/mcp",
          "description": "The endpoint path for the MCP server."
        },
        {
          "name": "MCP_AUTH_MODE",
          "format": "string",
          "default": "none",
          "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/tvmaze-mcp-server",
    "source": "github"
  },
  "description": "TVmaze shows, people, next episodes in your timezone, episode guides, schedules, and credits."
}