Nova Cast
Give your AI agent the power to cast to your home TV and control an interactive canvas. By ArdaBot.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen claim_canvas
- LOWen disconnect_canvas
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"nova-cast": {
"url": "https://nova.ardabot.ai/mcp"
}
}
}Puntos de conexión remotos
https://nova.ardabot.ai/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (21)
⚪claim_canvas(code, claimKey)
Exchanges a pairing code and recovery claimKey for a durable, screen-scoped control token. Repeating the same pair recovers the original grant.
Esquema de entrada
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"claimKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$"
}
},
"required": [
"code"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢pairing_status(code)
Reads the validity, expiry or claimed status of a pairing code without consuming it.
Esquema de entrada
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"required": [
"code"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴disconnect_canvas(controlToken)
Revokes the screen pairing, owner access and claim recovery, including while the browser is offline.
Esquema de entrada
{
"type": "object",
"properties": {
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_canvas(controlToken)
Reads workspace revision, focus, component summaries, render status, media capabilities and display dimensions including device pixel ratio. Physical DPI is unknown.
Esquema de entrada
{
"type": "object",
"properties": {
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_console(after, componentID, controlToken)
Reads 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.
Esquema de entrada
{
"type": "object",
"properties": {
"after": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢read_component(componentID, controlToken)
Reads a component source, saved state and supplied data.
Esquema de entrada
{
"type": "object",
"properties": {
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"componentID",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡prepare_draft(operationID, expectedRevision, title, format, source, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"format": {
"type": "string",
"enum": [
"react",
"html"
]
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 240000,
"description": "React TSX or full HTML. Use a sized nova-video element: YouTube/Vimeo embed URLs play inline, other service URLs are unsupported; do not create launch buttons or placeholders; see /agent media guidance. Arbitrary nested frames stay blocked. Do not author clickable links or external-navigation buttons; keep interactions within the canvas and share external URLs in the agent conversation."
},
"action": {
"type": "string",
"enum": [
"create",
"update"
]
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"state": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"title",
"format",
"source",
"action",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🟢read_draft(draftID, controlToken)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"draftID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"draftID",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴update_draft(operationID, expectedRevision, title, format, source, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"format": {
"type": "string",
"enum": [
"react",
"html"
]
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 240000,
"description": "React TSX or full HTML. Use a sized nova-video element: YouTube/Vimeo embed URLs play inline, other service URLs are unsupported; do not create launch buttons or placeholders; see /agent media guidance. Arbitrary nested frames stay blocked. Do not author clickable links or external-navigation buttons; keep interactions within the canvas and share external URLs in the agent conversation."
},
"draftID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedVersion": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"state": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"title",
"format",
"source",
"draftID",
"expectedVersion",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🔴publish_draft(operationID, expectedRevision, draftID, version, review, ...)
Publishes 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.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"draftID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"version": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"review": {
"type": "string",
"enum": [
"visual",
"structural"
],
"description": "visual if you actually screenshotted this exact version after the Preview quality loop; structural if you only inspected source/metadata. Never claim visual without a screenshot. Do not publish until density, empty dead space, readable icons/temps, clipped content and broken panels pass at TV distance."
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"draftID",
"version",
"review",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴discard_draft(operationID, expectedRevision, draftID, version, controlToken)
Removes an exact private draft version and its preview access without changing the live workspace.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"draftID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"version": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"draftID",
"version",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴queue_component(operationID, expectedRevision, title, format, source, ...)
Queues 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.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"format": {
"type": "string",
"enum": [
"react",
"html"
]
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 240000,
"description": "React TSX or full HTML. Use a sized nova-video element: YouTube/Vimeo embed URLs play inline, other service URLs are unsupported; do not create launch buttons or placeholders; see /agent media guidance. Arbitrary nested frames stay blocked. Do not author clickable links or external-navigation buttons; keep interactions within the canvas and share external URLs in the agent conversation."
},
"action": {
"type": "string",
"enum": [
"create",
"update"
]
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"state": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"expiresInSeconds": {
"default": 3600,
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"title",
"format",
"source",
"action",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🟢get_operation(operationID, controlToken)
Reads queued operation status and any browser outcome without contacting the browser. Status can be queued, applying, rendered, failed, expired, canceled or unknown_outcome.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴cancel_operation(operationID, controlToken)
Cancels a queued component update and removes its source. Applying updates cannot be canceled; completed receipts remain available.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡set_agent_status(operationID, expectedRevision, status, controlToken)
Sets or clears an ephemeral building indicator, with browser acknowledgement. Does not change workspace revision or publish drafts. Automatically clears after two minutes.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"status": {
"type": "string",
"enum": [
"working",
"finished"
]
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"status",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡create_component(operationID, expectedRevision, title, format, source, ...)
Validates, renders and saves a React or HTML component immediately to the right of focus. Success requires browser paint acknowledgement.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"format": {
"type": "string",
"enum": [
"react",
"html"
]
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 240000,
"description": "React TSX or full HTML. Use a sized nova-video element: YouTube/Vimeo embed URLs play inline, other service URLs are unsupported; do not create launch buttons or placeholders; see /agent media guidance. Arbitrary nested frames stay blocked. Do not author clickable links or external-navigation buttons; keep interactions within the canvas and share external URLs in the agent conversation."
},
"state": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"title",
"format",
"source",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🔴update_component(operationID, expectedRevision, componentID, title, format, ...)
Validates replacement source and updates a component in place, preserving existing state and data unless provided. Failed rendering retains the previous version.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"format": {
"type": "string",
"enum": [
"react",
"html"
]
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 240000,
"description": "React TSX or full HTML. Use a sized nova-video element: YouTube/Vimeo embed URLs play inline, other service URLs are unsupported; do not create launch buttons or placeholders; see /agent media guidance. Arbitrary nested frames stay blocked. Do not author clickable links or external-navigation buttons; keep interactions within the canvas and share external URLs in the agent conversation."
},
"state": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"componentID",
"title",
"format",
"source",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🔴delete_component(operationID, expectedRevision, componentID, controlToken)
Deletes a component and selects its nearest remaining neighbor.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"componentID",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}⚪navigate(operationID, expectedRevision, componentID, direction, controlToken)
Focuses a component or moves one position. Acknowledges after the selected component renders.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"direction": {
"type": "string",
"enum": [
"next",
"previous"
]
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴set_component_data(operationID, expectedRevision, componentID, data, controlToken)
Replaces supplied component data without regenerating source. Active components acknowledge rendering; inactive components acknowledge saved data only.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"componentID",
"data",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}🔴execute_script(operationID, expectedRevision, componentID, script, controlToken)
Runs 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.
Esquema de entrada
{
"type": "object",
"properties": {
"operationID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"expectedRevision": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"componentID": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"script": {
"type": "string",
"minLength": 1,
"maxLength": 32000
},
"controlToken": {
"type": "string",
"minLength": 20,
"maxLength": 200
}
},
"required": [
"operationID",
"expectedRevision",
"componentID",
"script",
"controlToken"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Ejemplos de llamadas registradas
read_draftParámetros de entrada
{
"draftID": "example-0",
"controlToken": "example-0"
}Resultado de salida
{
"result": {
"content": [
{
"type": "text",
"text": "MCP error -32602: Input validation error: Invalid arguments for tool read_draft: Too small: expected string to have >=20 characters at controlToken"
}
],
"isError": true
},
"durationMs": 251
}Comunidad
Evidencia