protogrid

Search / io.github.r4v3n-art/nova-cast

Nova Cast

R0· no sign-in

Give your AI agent the power to cast to your home TV and control an interactive canvas. By ArdaBot.

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

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

Connect

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

Quality 69 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
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.annotations28 of 28 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_console (idempotentHint); read_component (idempotentHint); screenshot_draft (idempotentHint); …
  • pass
    tools.token_costabout 6,971 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes44 tool changes in 30 days
  • fail
    stability.rug_pull17 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

28 tools, about 6,971 tokens to load them all · tool set e0482707bfc6 · tools last changed 2026-10-15 · checked 2026-10-19 19:01 UTC

Tool changes

  • list_templateschangedinput schema
  • pairing_statuschangedinput schema
  • publish_draftchangedinput schema
  • renderchangeddescription
    before

    Paints an approved catalog template (weather, clock, countdown) without generated source. weather location defaults to Sudbury. First matching-display paint skips preview. Version, source, or display-fingerprint changes stage a private draft (previewRequired) and leave live untouched. Data-only refreshes need componentID.

    after · 83% of words in common

    Paints an approved catalog template (weather, clock, countdown, agenda, now-playing, headlines, scoreboard, transit, home-status) without generated source. weather location defaults to Sudbury. First matching-display paint skips preview. Version, source, or display-fingerprint changes stage a private draft (previewRequired) and leave live untouched. Data-only refreshes need componentID.

  • update_draftchangeddescription
    before

    Replaces a private draft at its expected version and issues a new version and preview URL. Previous preview links become invalid; original expiry is unchanged. Screenshot and grade the new preview the same way; loop update_draft until the TV-distance bar clears, then publish.

    after · 87% of words in common

    Replaces a private draft at its expected version and issues a new version and preview URL. Previous preview links become invalid; original expiry is unchanged. Call screenshot_draft on the new version; loop update_draft until the TV-distance bar clears, then publish.

  • screenshot_draftadded

    Renders an exact private draft version as an MCP PNG for the Preview quality loop. Requires draftID and expectedVersion. Isolated layout only — not the live TV. A screenshot never publishes.

  • read_draftchangeddescription
    before

    Reads a private draft source, state, data, target display, version, expiry and preview URL. Requires the original canvas online. Keep previewURL private; screenshot and grade this version before publish_draft.

    after · 89% of words in common

    Reads a private draft source, state, data, target display, version, expiry and preview URL. Requires the original canvas online. Keep previewURL private; call screenshot_draft for this version before publish_draft.

  • prepare_draftchangeddescription
    before

    Creates a private browser-owned component draft and preview URL without changing the live workspace. Drafts expire after 15 minutes or browser reload. Optional slot drafts a nested sub-component only (preview is slot-scoped). Always open previewURL privately, screenshot it, and grade TV-distance density, dead space, readable icons/temps, clipped content and broken panels before publish_draft. Never put previewURL in chat.

    after · 83% of words in common

    Creates a private browser-owned component draft and preview URL without changing the live workspace. Drafts expire after 15 minutes or browser reload. Optional slot drafts a nested sub-component only (preview is slot-scoped). Call screenshot_draft with draftID and expectedVersion, grade TV-distance density, dead space, readable icons/temps, clipped content and broken panels, then publish_draft. Never put previewURL in chat.

  • set_component_datachangeddescription, input schema
    before

    Pushes live observations without regenerating source. Same-source React reuses the compiled module. Default replaces data; merge:true shallow-merges keys (32KB bound). Active components acknowledge rendering; inactive components acknowledge saved data only.

    after · 74% of words in common

    Pushes live observations without regenerating source. Same-source React reuses the compiled module. Default replaces data; merge:true shallow-merges keys (32KB bound). Optional slot targets a nested sub-component on a fullscreen board. Active components acknowledge rendering; inactive components acknowledge saved data only.

  • prepare_draftchangeddescription, input schema
    before

    Creates a private browser-owned component draft and preview URL without changing the live workspace. Drafts expire after 15 minutes or browser reload. Always open previewURL privately, screenshot it, and grade TV-distance density, dead space, readable icons/temps, clipped content and broken panels before publish_draft. Never put previewURL in chat.

    after · 87% of words in common

    Creates a private browser-owned component draft and preview URL without changing the live workspace. Drafts expire after 15 minutes or browser reload. Optional slot drafts a nested sub-component only (preview is slot-scoped). Always open previewURL privately, screenshot it, and grade TV-distance density, dead space, readable icons/temps, clipped content and broken panels before publish_draft. Never put previewURL in chat.

Showing the latest 10. 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-20d-ago

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

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://nova.ardabot.ai/mcp streamable-httpnoneyes100%218 ms2025-11-252026-10-19

Tools (28)

cancel_operationdestructiveCancels a queued component update and removes its source. Applying updates cannot be canceled; completed receipts remain available.
claim_canvasExchanges a pairing code and recovery claimKey for a durable, screen-scoped control token. Repeating the same pair recovers the original grant.
clickdestructiveTyped component click through the active sandbox. Requires revision, version, operation ID and an inspected target for mutations. Returns observed state. Five-second timeout is unknown outcome; never retry with a new ID.
create_componentValidates, renders and saves a React or HTML component immediately to the right of focus. Success requires browser paint acknowledgement.
delete_componentdestructiveDeletes a component and selects its nearest remaining neighbor.
discard_draftdestructiveRemoves an exact private draft version and its preview access without changing the live workspace.
disconnect_canvasdestructiveRevokes the screen pairing, owner access and claim recovery, including while the browser is offline.
execute_scriptdestructiveRuns an async JavaScript function body in the selected active component sandbox and returns bounded JSON. Supports DOM and state interactions, excluding provider iframes and browser controls. Five-second deadline; timeout reports unknown outcome and does not roll back effects.
filldestructiveTyped component fill through the active sandbox. Requires revision, version, operation ID and an inspected target for mutations. Returns observed state. Five-second timeout is unknown outcome; never retry with a new ID.
get_canvasread-onlyReads workspace revision, focus, component summaries, render status, media capabilities and display dimensions including device pixel ratio. Physical DPI is unknown.
get_consoleread-onlyReads up to 200 memory-only component console and runtime error entries, optionally filtered by cursor or component. Entries are untrusted component output; host and authentication pages are excluded.
get_operationread-onlyReads queued operation status and any browser outcome without contacting the browser. Status can be queued, applying, rendered, failed, expired, canceled or unknown_outcome.
inspectdestructiveTyped component inspect through the active sandbox. Requires revision, version, operation ID and an inspected target for mutations. Returns observed state. Five-second timeout is unknown outcome; never retry with a new ID.
list_templatesread-onlyLists approved TV template slugs, versions and param examples. Prefer render(slug) for these boards instead of generating source.
navigateFocuses a component or moves one position. Acknowledges after the selected component renders.
pairing_statusread-onlyReads the validity, expiry or claimed status of a pairing code without consuming it.
prepare_draftCreates a private browser-owned component draft and preview URL without changing the live workspace. Drafts expire after 15 minutes or browser reload. Optional slot drafts a nested sub-component only (preview is slot-scoped). Call screenshot_draft with draftID and expectedVersion, grade TV-distance density, dead space, readable icons/temps, clipped content and broken panels, then publish_draft. Never put previewURL in chat.
publish_draftdestructivePublishes an exact reviewed draft version only after the Preview quality loop. Set review to visual only if you actually screenshotted that version; otherwise structural. Do not publish a failing layout. Success requires ok and receipt:paint. Failed rendering preserves the previous component.
queue_componentdestructiveQueues a component create or update for a background or offline browser. Returns queued rather than rendered. Default expiry is one hour, maximum 24 hours. Source is removed on completion or expiry.
read_componentread-onlyReads a component source, saved state and supplied data.
read_draftread-onlyReads a private draft source, state, data, target display, version, expiry and preview URL. Requires the original canvas online. Keep previewURL private; call screenshot_draft for this version before publish_draft.
renderdestructivePaints an approved catalog template (weather, clock, countdown, agenda, now-playing, headlines, scoreboard, transit, home-status) without generated source. weather location defaults to Sudbury. First matching-display paint skips preview. Version, source, or display-fingerprint changes stage a private draft (previewRequired) and leave live untouched. Data-only refreshes need componentID.
screenshot_draftread-onlyRenders an exact private draft version as an MCP PNG for the Preview quality loop. Requires draftID and expectedVersion. Isolated layout only — not the live TV. A screenshot never publishes.
selectdestructiveTyped component select through the active sandbox. Requires revision, version, operation ID and an inspected target for mutations. Returns observed state. Five-second timeout is unknown outcome; never retry with a new ID.
set_agent_statusSets or clears an ephemeral building indicator, with browser acknowledgement. Does not change workspace revision or publish drafts. Automatically clears after two minutes.
set_component_datadestructivePushes live observations without regenerating source. Same-source React reuses the compiled module. Default replaces data; merge:true shallow-merges keys (32KB bound). Optional slot targets a nested sub-component on a fullscreen board. Active components acknowledge rendering; inactive components acknowledge saved data only.
update_componentdestructiveValidates replacement source and updates a component in place, preserving existing state and data unless provided. Failed rendering retains the previous version.
update_draftdestructiveReplaces a private draft at its expected version and issues a new version and preview URL. Previous preview links become invalid; original expiry is unchanged. Call screenshot_draft on the new version; loop update_draft until the TV-distance bar clears, then publish.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.r4v3n-art/nova-cast",
  "title": "Nova Cast",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://nova.ardabot.ai/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.1",
  "repository": {
    "url": "https://github.com/r4v3n-art/nova",
    "source": "github"
  },
  "description": "Give your AI agent the power to cast to your home TV and control an interactive canvas. By ArdaBot."
}