Skill Inspector
NVIDIA/SkillSpector
Decides whether an agent skill is safe to install by combining a SkillSpector static scan with the agent's own source review, ending in APPROVE, CAUTION or REJECT.
A skill your agent uses when controlling NVIDIA Broadcast through MCP to apply effects, process local media, select devices, or change camera resolution, or when Broadcast is missing or too old to…
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install NVIDIA/skills nvidia-broadcast --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/nvidia-broadcast .claude/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .claude/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcastType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install NVIDIA/skills nvidia-broadcast --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/nvidia-broadcast .agents/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .agents/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install NVIDIA/skills nvidia-broadcast --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/nvidia-broadcast .cursor/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .cursor/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/NVIDIA/skills.git --path skills/nvidia-broadcast--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install NVIDIA/skills nvidia-broadcast --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/nvidia-broadcast .gemini/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .gemini/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install NVIDIA/skills nvidia-broadcastInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/nvidia-broadcast .github/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .github/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add NVIDIA/skills --skill nvidia-broadcast -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install NVIDIA/skills nvidia-broadcast --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/NVIDIA/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/nvidia-broadcast .opencode/skills/nvidia-broadcast && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "nvidia-broadcast" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/nvidia-broadcast into .opencode/skills/nvidia-broadcast/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nvidia-broadcast", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
nvidia-broadcastA skill your agent uses when controlling NVIDIA Broadcast through MCP to apply effects, process local media, select devices, or change camera resolution, or when Broadcast is missing or too old to…
Nvidia Broadcast is an agent skill from NVIDIA/skills, published by the product's own GitHub organization. Use when controlling NVIDIA Broadcast through MCP to apply effects, process local media, select devices, or change camera resolution, or when Broadcast is missing or too old to expose the gateway and the user wants it installed; not for Broadcast app settings outside the MCP gateway.
Its SKILL.md is about 10k tokens, which your agent loads only when the skill is triggered. The skill folder holds 17 other files, including scripts and reference files (for example `BENCHMARK.md`, `config/skillspector-baseline.yaml` and `evals/evals.json`).
It works with NVIDIA AI Platform and Model Context Protocol. The repository describes itself as: Agent Skills for NVIDIA products — install into Claude Code, Codex, and other coding agents to run Physical AI, robotics, simulation, CUDA, and RAG workflows end to end. The licence is Apache-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 67a13c0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (PowerShell), which the agent can run.
Shell commands in SKILL.md call:
npxpipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
ota.nvidia.comAlso links to:
nvidia.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Nvidia Broadcast loads about 10k tokens when it runs, and up to ~34k if it reads all its reference files. Until then it costs about 75 tokens; SKILL.md has 5,722 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from NVIDIA/skills at commit 67a13c0, republished under its Apache-2.0 licence (© NVIDIA). 5,722 words, ~10,432 tokens.
.claude/skills/nvidia-broadcast/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.Launching: start Broadcast only by running
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "<skill_dir>\scripts\launch_broadcast.ps1"
with the terminal tool. When running inside WSL, follow Launch and version-check through
interop in references/connection.md instead. Except for the security-policy fallback below
and that WSL interop procedure, never invoke
NVIDIA Broadcast.exe directly — not via terminal, execute_code, subprocess, or
Start-Process.
Security-policy fallback: use this only if security policy blocks the launcher script.
Confirm that NVIDIA Broadcast.exe is not already running, then run:
powershell.exe -NoProfile -Command "Start-Process -FilePath ([Environment]::ExpandEnvironmentVariables('%ProgramFiles%\NVIDIA Corporation\NVIDIA Broadcast\NVIDIA Broadcast.exe')) -ArgumentList '--launch-hidden' -WindowStyle Hidden"
with the terminal tool.
Command tools: follow Which tool to run commands with below.
Never read effect state from disk — not AppSetting.json, not the registry, not logs, not
the UI. Those are saved settings, not live state. Exception: gateway.json may be read and
decoded only to obtain the gateway port for rule 4; it is connection configuration, not effect
state.
Connecting to the gateway — exactly these steps, no other path:
ProductVersion without launching it. If the executable is missing or its version is 2.2.x
or older, stop the connection sequence and follow Installing or updating NVIDIA Broadcast.
Do not return the restart-only response below.tasklist /FI "IMAGENAME eq NVIDIA Broadcast.exe" via terminal.
If Broadcast is installed but not running, launch it immediately (rule 1); do not ask the user
to start it manually. A gateway.json left from an earlier run proves nothing about whether
the gateway is live.%APPDATA%\nvidia-broadcast\gateway.json → {"port": <number>}. Use the port from the latest
successful read. Decode gateway.json within the command and output only the port. Never print
its base64 contents because credential redaction may mask them.http://127.0.0.1:<port>/gateway with your MCP client as a Streamable HTTP server.
You are the MCP client — register it yourself.nvidia-broadcast via the MCP client's server info.
If it does not, treat NVIDIA Broadcast as unavailable, use the restart response below, and stop.If the required tools are available, the connection is ready; proceed with the requested operation.
Stop if any of these occurs — report and go no further:
nvidia-broadcast, orReply only: "NVIDIA Broadcast MCP tools are unavailable in this session. Please restart your MCP client and retry." Then stop. Do not add rationale, gateway URLs, port details, configuration instructions, or post-restart steps. Do not substitute another source or guess which effects are on.
Only after completing rule 4, if any required NVIDIA Broadcast MCP tool is still not in your tool list, that is the final answer. Stop. Its initial absence is not a reason to skip launch or registration. Do not try to make it work. Specifically, never:
urllib, http.client, socket, requests, httpx, curl,
Invoke-WebRequest, or anything else. A correct, spec-compliant client is
still a violation. The prohibition is on you speaking the protocol at all,
not on which library you choose.which mcp, mcp exec,
npx @modelcontextprotocol/cli, pip install mcp[cli].Recover from MCP connection failures. If any NVIDIA Broadcast tool call fails because the MCP connection was closed, refused, reset, disconnected, or otherwise became unavailable, repeat the connection sequence in rule 4:
NVIDIA Broadcast.exe is running.gateway.json, obtain the current port, and register the gateway again.nvidia-broadcast. If it does not, use the short
restart response from rule 4 and stop.If the tools are still unavailable, use the short restart response from rule 4 and stop. After reconnecting, retry a read-only or idempotent tool call at most once. Do not automatically repeat a non-idempotent request when the connection closed after submission because it may already have been accepted.
Do not run this recovery sequence for normal gateway or tool errors such as invalid arguments,
ambiguous_frame_rate, device_not_selected, file_not_found, rate limiting, or an effect
operation failure.
NVIDIA Broadcast applies AI effects to your camera, microphone, and speaker, and can apply the same effects to local media files. You drive it over a local MCP gateway that NVIDIA Broadcast runs on loopback. It also lets you check and change AI effects, select Studio Voice microphone profiles, manage camera, microphone, and speaker devices, and change camera resolution.
%ProgramFiles%\NVIDIA Corporation\NVIDIA Broadcast\NVIDIA Broadcast.exe.%APPDATA%\nvidia-broadcast\gateway.json.gateway.json are reached differently — see If you are running inside WSL below.set_effects: either effects[] with 1-32 unique effect IDs (each effectId + enabled, optional params), or action: "restore_previous_live".submit_file_processing: _version: 1, absolute inputPath, 1-32 unique effects[]; optional batchId, outputFolder, outputPath. There is no overwrite input — a fresh collision is rejected, while resume/retry replaces only that job's own partial output.list_devices: optional kind. set_active_device: kind + fresh deviceId, plus optional camera width, height, frameRate. set_camera_resolution: fresh camera deviceId, width, height, optional frameRate.frameRate only when the user explicitly specified or selected it; the camera's current frame rate is not the user's choice for a new request.Use terminal for shell commands and execute_code for Python. Never call browser_exec —
its code parameter makes it look like execute_code, but it runs that code inside a browser
session and opens Chrome. No task in this skill uses a browser.
In this skill, “MCP client” means the current agent runtime executing this skill—not a separate application, CLI, profile, agent, or session. This definition applies throughout the skill.
Do not conclude that no MCP client exists merely because Broadcast tools were not preloaded. Do not search client configuration files, invoke another client such as Claude Code, use a browser, browser-based MCP connection, browser automation, or browser-based remote debugging, delegate to another agent or session, or ask whether another MCP client is installed.
Streamable HTTP is the default and recommended transport. Register the gateway with your MCP client and let the client speak the protocol. Do not hand-roll HTTP requests — it is a normal Streamable HTTP MCP server, and your client already handles protocol version and transport. Add it to your MCP client configuration:
{
"mcpServers": {
"nvidia-broadcast": {
"type": "http",
"url": "http://127.0.0.1:18100/gateway"
}
}
}Or, for clients that register servers from the command line:
<mcp-client> mcp add --transport http nvidia-broadcast http://127.0.0.1:<port>/gatewaySubstitute the client's own command for <mcp-client> and the resolved gateway port for
<port>; subcommand and flag names vary by client, but the three values being registered are the
same ones in the entry above.
18100 is the default port and is correct on almost every install. No API key or header is
required for loopback MCP clients. This URL and port are for the client's configuration, not for
connecting directly.
The gateway takes the first free port in 18100-18109 and publishes the one it actually
bound in %APPDATA%\nvidia-broadcast\gateway.json — base64, decoding to { "port": <number> }.
Re-read that file on every retry rather than caching the port; a restart can move it, which is
the one case where a registered URL goes stale.
Before launching or registering the gateway, read the executable's ProductVersion without
launching it.
If the executable is not there, NVIDIA Broadcast is not installed. If it is 2.2.x or
older, that build has no MCP gateway and no amount of retrying will produce one. Either way,
stop the connection sequence, tell the user what you found, and offer to install or update
it — see Installing or updating NVIDIA Broadcast below. If they decline, or if installing is
genuinely impossible from here — no Windows interop, no PowerShell — point them to
https://www.nvidia.com/broadcast-app/ and stop. An earlier failed attempt is not one of those
reasons, and neither is a download that had to be retried.
Check whether NVIDIA Broadcast.exe is running. If it is not, launch it by running the bundled
launcher script — the primary launch command. Use the security-policy fallback in rule 1 under
Hard rules only if policy blocks the script:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "<skill_dir>\scripts\launch_broadcast.ps1"<skill_dir> is the absolute path in the skill_dir field of the skill_view result you
already have. Run it with the terminal tool. Never with browser_exec — it takes a code
parameter just like execute_code, but it runs that code inside a browser session and will open
Chrome. Nothing in this skill ever needs a browser.
Except for the security-policy fallback in rule 1 under Hard rules, do not write your own launch command or invoke
NVIDIA Broadcast.exe directly with subprocess.run, check_output, Start-Process -Wait, or
any command that waits for or captures output from the Broadcast process. Never launch a second
copy when the process is already running.
Whether Broadcast was already running or was just launched, retry for up to 60 seconds: reread
and decode gateway.json, then register http://127.0.0.1:<port>/gateway through the MCP client.
If nothing answers, use the restart response in hard rule 4 and stop.
Discovery is exactly these two places and nothing else: gateway.json and ports
18100-18109. Do not search the filesystem for gateway or config files, and do not read
environment variables looking for an endpoint or credential — the loopback gateway publishes
its port only in gateway.json and needs no key. When both places come up empty, stop endpoint
discovery.
Probe only through your MCP client. Register the candidate URL and let the client connect; a failed registration is the probe result. Never reach the gateway from a shell: no command-line web clients, no throwaway request scripts, and no scanning the port range yourself — see Safety and scope for the full list of prohibited alternatives. If your client cannot register MCP servers at runtime, follow If your client cannot register MCP servers below. Not being able to probe never licenses shell tooling as a substitute.
Some clients only load MCP servers from a config file at startup. That is a client configuration problem, not a Broadcast problem, and it is never a reason to fall back to "just turn it on in the app yourself" without checking anything. Do the version check in step 1 first — it reads the filesystem and needs no MCP client — then report whichever of these you actually found:
Name which of the two it is. "The gateway isn't available to this session" on its own leaves the user unable to tell whether the app is missing, too old, or merely unconfigured — and sends them off to click through the UI when one config line, or an install, would have fixed it for good.
The gateway runs in the Windows Broadcast process, so before registering anything establish that
127.0.0.1 in the distro really is Windows loopback, and read the port through the mounted Windows
drive. Full procedure in references/connection.md; in short:
/proc/sys/kernel/osrelease — it contains microsoft or WSL. Do not
read environment variables to decide this.wslinfo --networking-mode. On mirrored — or a WSL 1 distro — loopback is shared,
so register http://127.0.0.1:<port>/gateway exactly as on Windows. On nat (the default) the
gateway is unreachable from the distro: stop, tell the user, and offer mirrored networking,
an MCP client running on Windows, or a tunnel terminating on Windows loopback. Never
substitute another address for loopback — not the nameserver in /etc/resolv.conf, the
default route from ip route, nor $(hostname).local; nothing is published off loopback and
the gateway rejects every non-loopback Host by design.wslpath "$(cmd.exe /c 'echo %APPDATA%' | tr -d '\r')" to reach gateway.json, and powershell.exe -NoProfile -Command '...' to launch,
version-check, and install. If the Windows drive is not mounted or powershell.exe is missing, say so and
stop — do not search the Linux filesystem for gateway.json and do not look for a Linux-side
substitute; ask the user to start Broadcast on Windows.See references/connection.md for the version-check command, endpoint discovery, startup,
access, WSL specifics, and rate limits.
On connect, the server's instructions already list the exact effectIds available
right now, grouped by section, and the set_effects schema constrains effectId to
that live set. So you can act immediately — you do not need a discovery call first.
Only when the version check above found no executable at the standard path, or a
2.2.x-or-older build. Never as a workaround for any other failure, and never as a side effect
of an unrelated request. Full procedure, commands and failure modes in references/installation.md.
GET https://ota.nvidia.com/release/available?product=rtxb&channel=OFFICIAL&version=$installed&cpuArchType=$arch,
where $installed is the installed ProductVersion (0.0.0.0 when Broadcast is not installed)
and $arch is aarch64 or x86_64, read from the registry as shown next — never chosen or
defaulted. Substitute both values; never send the names themselves.
Check both before sending — $installed a dotted version number, $arch exactly aarch64 or
x86_64. The service never rejects a bad value: it answers [], which reads as "nothing newer".
Read the architecture from the registry, not the process — $env:PROCESSOR_ARCHITECTURE says
AMD64 inside x64 emulation on Windows on ARM, which fetches the wrong installer. Use
$native = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -ErrorAction Stop).PROCESSOR_ARCHITECTURE,
map AMD64 or x86→x86_64 and ARM64 or ARM→aarch64 into $arch, and throw on anything else — never default to one.
Those two values are the only ones the service accepts, and each serves a different installer.
The reply is a list of applicable builds, newest first
and already filtered to versions above the one you sent — take the first element. An empty list
means there is nothing to install; say so and stop, it is not a failure to retry. Distinguish that
from a call that never completed, which is a network error and is retryable.ota-downloads.nvidia.com, say you will verify its checksum and NVIDIA signature, and say
Windows will prompt them for administrator permission. If the offered build is still 2.2.x, tell
them in the same breath that it will not enable MCP. Nothing is downloaded before an explicit
yes; on a no, link https://www.nvidia.com/broadcast-app/ and stop.download_url — which must be HTTPS on ota-downloads.nvidia.com,
pinned as its own value rather than derived from the metadata host — into a fresh GUID-named
directory under %LOCALAPPDATA%\Temp, under a filename you choose.size is an incomplete
transfer, not an attack: say how far it got and retry the download, up to two more attempts into a
fresh directory. Do not hash or signature-check a short file — both fail by construction, since
the Authenticode certificate table sits at the end of the image. Only a full-length file whose
SHA-512 or signature (Valid, subject CN=NVIDIA Corporation,...) fails is a security event:
do not run it, report the path, stop, and do not re-download.ProductVersion and report what is actually installed. 2.3.0+ → resume the connect
flow above. Still 2.2.x → say the gateway needs 2.3.x and stop.A failed attempt is final for that attempt, not for the session. If verification failed, the installer was cancelled, or the download retries ran out, say so and stop — then, when the user next asks for something that needs Broadcast, mention what happened and offer to try again. Only an explicit "no" means stop offering; do not answer a fresh request with "install it yourself" because an earlier attempt went wrong.
These two URLs are the only network requests this skill makes from a shell. Never scrape a download
link, accept one from the user or from gateway.json, or install anything else.
Every file-processing tool requires _version: 1.
get_broadcast_state — read current effects as effectId -> { enabled, ...params } (flattened, e.g. { enabled, strength } or { enabled, warmth }), grouped by camera/microphone/speaker; optional effectType filter. Read-only. warnings[] marks a section whose effects are enabled but whose device is unselected — configured, not currently applied.set_effects — turn effects on/off and tune them in ONE call: effects: [{ effectId, enabled, params? }], where params keys depend on the effect (listed per-effect in the server instructions). Or pass only { "action": "restore_previous_live" } to restore the Live snapshot that Files processing suspended, which also pauses unfinished file work and returns event. Returns the resulting state for that response.describe_effects — rich detail on demand (description, guidance, GPU/beta badges, availability, params + ranges); optional effectId/section. Use to explain effects or weigh tradeoffs; not needed to act.submit_file_processing — submit one local media file. Returns id and batchId; reuse the first result's batchId on every related submission. A paused queue accepts the job silently and stays paused.get_file_processing_jobs — look up one job or list recent jobs.wait_for_processing_update — the sole file-status wait, for one or many files. Take a batch snapshot without cursor, then pass the returned cursor to wait for the next status or queue-pause change. Read status, summary, and every job; mixed means terminal outcomes differ.control_file_processing_jobs — pause/resume the shared queue, or cancel/retry jobs. Pause/resume are queue-wide; cancel/retry need jobIds or all: true. MCP has no consent flag.list_devices — list available cameras, microphones, and speakers; kind: "camera"|"microphone"|"speaker"|"all" (default "all"). Returns the active device, and for cameras the current resolution plus availableResolutions (label, width, height, frameRate) for the current Video Super Resolution / Video Frame Generation mode.set_active_device — switch the active camera, microphone, or speaker with kind plus a fresh deviceId from list_devices. For cameras, add width+height+optional frameRate to switch device and resolution in one call. Camera switches restart the stream automatically (allow 2–5 seconds).set_camera_resolution — change the active camera's resolution with deviceId plus width+height+optional frameRate; include frameRate only after the user explicitly specifies or selects it. When FPS is unspecified, omit frameRate so the gateway can accept a unique mode or return the available choices for an ambiguous size.Invalid requests — including unavailable or ambiguous resolutions — return a gateway tool error
before anything changes. How to read the success-path fields (success, alreadyActive,
alreadySet, frameRateMismatch, failed[], skipped[]) is under Instructions.
Effect ids and params mirror the app's UI (e.g. "Virtual key light" → virtual_key_light with warmth). The exact ids + each effect's params are in the server instructions. See references/effects.md.
For file processing, nest every effect's options under params, exactly as with set_effects.
Frame Generation accepts multiplier 2|4 and model "performance"|"balanced"|"quality".
Set the Studio Voice profile through params.micProfile in either set_effects or
submit_file_processing. Read the capability-aware enum from the tool schema or server
instructions; the current supported profiles are default,
bright, full, and warm. Do not send flat, colored, or thin when they are absent
from the advertised enum.
Complete tool calls — single and combined effects, per-effect params, background replace, frame
generation, Studio Voice profiles, restore_previous_live, state reads, device switches and
resolution changes — are in references/examples.md. Load it when you need the exact JSON shape.
Multi-step tasks have an expected shape. Follow it exactly.
batchId — the response creates one:{ "name": "submit_file_processing", "arguments": { "_version": 1,
"inputPath": "C:\\Users\\me\\Videos\\a.mp4",
"effects": [{ "effectId": "background_blur", "params": { "strength": 0.6 } }] } }batchId.batchId.cursor:{ "name": "wait_for_processing_update", "arguments": { "_version": 1, "batchId": "<batchId>" } }status is queued or in_progress, call it again with the same batchId plus the
cursor the previous response returned, and an optional timeoutMs.status — completed, failed, cancelled, or mixed — then report summary and name which files landed in which outcome from jobs. mixed is not success.Do not wait once per file, and do not poll get_file_processing_jobs in a loop.
{ "name": "list_devices", "arguments": { "kind": "camera" } }id, then pick a row from that camera's availableResolutions rather than assuming a size is supported. If the size you want appears at more than one frameRate, ask the user which — do not choose for them. The current FPS does not count as an explicit user choice.set_active_device call, passing kind, the deviceId from step 1, width, height, and the chosen frameRate. If FPS was not specified and the size has only one advertised rate, frameRate may be omitted.success, then use device and resolution. alreadyActive: true means nothing changed. success: true with frameRateMismatch: true means the size applied but the frame rate differs — tell the user which FPS is actually live.Do not follow with set_camera_resolution (that is a second stream restart), and do not call list_devices again to confirm.
set_effects call — including bulk operations (e.g. "turn everything off" = one call with all effectIds enabled:false; disabling an already-off effect is harmless). Its result includes the authoritative state for that call; do not follow it with get_broadcast_state only to confirm.set_effects. Call it once with only action: "restore_previous_live". Do not ask which effects were enabled, pre-read state, or pause the file queue first — Broadcast owns the snapshot. Report event: "live_effects_restored"; event: "no_change" means no suspended snapshot was available or it was already restored.set_effects accepts stale params when enabled:false. To change params while keeping an effect disabled, enable it with the new params then disable it — two calls, because one call rejects a repeated effectId, and the effect is briefly live in between.success: false carries failed[] ({ effectId, reason } — timeout, unavailable, device_not_selected, file_not_found, or failed) and/or skipped[] ({ effectId, conflictsWith }). Effects absent from both applied. Name which ones did not; never report the batch as done. Retry timeout and unavailable; device_not_selected and file_not_found need corrected user input.reason: "device_not_selected" with deviceType and requiresUserInput: true for that effect; when no requested effect applied for that reason, the whole call fails with error -33201. Tell the user which device type is unselected and ask them to select one. Do not retry unchanged, and do not choose a device on their behalf without saying so.set_effects response is point-in-time. Never answer a later current-state question from prior tool results; call get_broadcast_state.get_broadcast_state is the only authoritative source. Never open, read, parse, search for, inspect metadata for, or test the existence of AppSetting.json or any other persisted settings file. Do not mention or offer a disk-file fallback, and do not report whether such a file exists. This prohibition still applies when Broadcast is stopped or its gateway is unavailable.effectId strings (e.g. virtual_key_light, auto_frame, noise_removal) — do not invent ids or use internal names.params values are UI-aligned and normalized 0–1 where numeric (strength, warmth, zoom); modes are enums (e.g. mode: "performance"|"quality").completed means every file completed; mixed means terminal outcomes differ. Report the summary and affected files, never “all passed” when any job failed or was cancelled.cancelled with reason: "cancelled_by_user", report it and stop. Never retry automatically. If the user explicitly asks afterward, call retry with that job's exact jobIds; do not use all, resubmit, or create a replacement.status is paused_by_user, ask in the agent conversation. Only after an explicit yes, call ordinary queue-wide resume; never send a consent flag.recovery is retry; all: true never retries cancellations. Read the returned event and jobIds; if retry returns no_change, stop and report it instead of submitting replacements.structuredContent.error, schema rejections included, so one parse path covers all of them; JSON-RPC protocol failures use a top-level error instead. When data.requiresUserInput is true, stop and ask the user — ambiguous_frame_rate (with data.frameRateOptions) means ask which fps, device_not_selected means ask them to select that device, file_not_found means ask for a real local path. Never substitute a value of your own.error.retryable before giving up. -32602 means your arguments were wrong and will stay wrong; fix them. -32603 with retryable: true means the app was busy or not ready — the same call may well succeed shortly, so back off and retry rather than reporting failure.list_devices fresh — every time the user asks what is available, and before every set_active_device or set_camera_resolution to get the current deviceId. Devices can be plugged or unplugged between turns; never reuse an ID from an earlier turn or session.list_devices shows multiple FPS values for the requested size, stop before a setter call, present those values, and ask the user to choose. If ambiguity is not known yet, call the setter with width+height and omit frameRate; when it returns requiresUserInput: true with frameRateOptions, present those options and ask. Supply frameRate only after the user explicitly specifies or selects it, then retry.set_active_device call with resolution over two calls. Switching camera and changing resolution together saves one stream restart and is faster.set_active_device or set_camera_resolution, use device / resolution from that response — do not follow with list_devices. alreadyActive: true means the device was already selected and no stream restart happened; alreadySet: true means the camera was already at that resolution.success in non-error results from both device tools. success: false means the switch or width/height change did not fully apply, and the response carries what you need to recover without another list_devices: for set_active_device, deviceConfirmed: true with resolution.confirmed: false means the device switched but the resolution did not (read resolution.actual and state), while deviceConfirmed: false includes availableDevices and state; for set_camera_resolution, actual and state.cameras show what the camera set. If width/height applied but only FPS differed, both return success: true with frameRateMismatch: true — tell the user the applied FPS.wait_for_processing_update wakes for job-status and queue-pause changes, not progress ticks.env, printenv, set, or otherwise dump
environment variables, and do not read credential stores, key files, or shell profiles. The
gateway is unauthenticated on loopback, so there is no key to find and nothing to look up.
Expanding %APPDATA%, %LOCALAPPDATA% or %ProgramFiles% to reach one documented path is path
resolution, not environment inspection — resolve the single path you need, nothing more.http.client, httpx, requests,
urllib, socket, curl, wget, Invoke-WebRequest, Invoke-RestMethod, hand-built
JSON-RPC, raw TCP connect, or port check. gateway.json is readable only to extract the
port; the port and the absence of a credential are configuration facts for the user, never
a fallback route.references/connection.md.| Symptom | Cause | Solution |
|---|---|---|
| Endpoint refuses the connection | Broadcast is not running | Launch using rule 1 under Hard rules, then reread gateway.json and reprobe for up to 60 seconds |
| Still unreachable after launching and reprobing | The app is missing, or the build predates MCP | Read the exe's ProductVersion; if absent or 2.2.x or older, stop retrying and offer to install or update it — on a no, link https://www.nvidia.com/broadcast-app/ |
The update endpoint returns [], or the user declines the install | Nothing newer is published, or there is no consent | Report it, link https://www.nvidia.com/broadcast-app/, and stop — download nothing and do not raise it again unprompted |
| A later request needs Broadcast and an earlier install attempt failed | The attempt ended; the install path did not | Say in one line what happened last time and offer to try again. Never answer with "install it yourself" because a previous attempt failed |
The downloaded installer is shorter than size | Incomplete transfer — the most common failure in this flow | Not a security event. Report how far it got and retry the download, up to two more attempts in a fresh directory |
| A full-length installer fails SHA-512 or the NVIDIA signature check | Substituted or corrupted content | Do not run it. Report which check failed and where the file is, then stop — do not re-download it now, but offer a fresh attempt when the user next asks for something needing Broadcast |
ProductVersion is still 2.2.x after installing | The build that was installed predates the gateway | Say the MCP gateway needs 2.3.x, link the download page, and stop probing |
127.0.0.1:<port> refused, and you are inside WSL | NAT-mode WSL has its own loopback; Windows loopback is unreachable | Check wslinfo --networking-mode; on nat report it and offer mirrored networking, a Windows-side client, or a loopback-terminating tunnel — never swap in the host IP |
Tool error -33102 or -33103 | Rate limited, or too many in-flight calls | Back off using the limit in data, then retry |
requiresUserInput: true with frameRateOptions | That frame size exists at several frame rates | Ask the user which fps, then retry with frameRate |
Error -33201, or failed[].reason is device_not_selected | That effect's camera, mic, or speaker is not selected | Name the device type and ask the user to select it; do not retry unchanged or pick one silently |
Batch status is paused_by_user | The user stopped file processing | Ask in the agent conversation; after yes, call ordinary resume |
Job status is cancelled | The user cancelled processing | Report cancellation and stop. If explicitly asked afterward, retry with that job's exact jobIds; never use all or resubmit |
Batch status is mixed | Terminal outcomes differ | Report summary and per-job statuses; do not claim all files passed |
references/troubleshooting.md has the full table, including rejected effect IDs, warnings[],
and success: false recovery.
references/effects.md — categories, effectIds, strength semantics, incompatibilities.references/examples.md — the full call-example set.references/file-processing.md — file workflow, output paths, progress.references/connection.md — endpoint discovery, startup, access, rate limits.references/installation.md — consent, download, verification, and install of a missing or too-old build.references/troubleshooting.md — the full symptom table.references/mcp-tool-contract.md — complete public tool contract.© NVIDIA, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 13 other files (scripts, references) in skills/nvidia-broadcast of NVIDIA/skills.
Open the folder on GitHubat commit 67a13c0
Nvidia Broadcast next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Nvidia Broadcast this skillNVIDIA/skills | 3.5k | — | ~10k | Automated safety check: Pass | Apache-2.0 | |
| Skill InspectorNVIDIA/SkillSpector | 20k | 1 repos | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Integrate Modeltryonlabs/opentryon | 551 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Memorywhalewuisabel-gif/MemWhale | 154 | — | ~765 | Automated safety check: Pass | MIT | |
| Memorywhale Evidencewuisabel-gif/MemWhale | 154 | — | ~459 | Automated safety check: Pass | MIT | |
| Memorywhale Debuggingwuisabel-gif/MemWhale | 154 | — | ~370 | Automated safety check: Pass | MIT |
NVIDIA/SkillSpector
Decides whether an agent skill is safe to install by combining a SkillSpector static scan with the agent's own source review, ending in APPROVE, CAUTION or REJECT.
tryonlabs/opentryon
Integrates a hosted API or local/open-weight model end-to-end across OpenTryOn (adapter, CLI registry, MCP, docs) and TryOn Studio (catalog, Connect keys, planner).
wuisabel-gif/MemWhale
Query and write durable debugging memory recorded by MemoryWhale.
wuisabel-gif/MemWhale
Use MemoryWhale debugging evidence when the user requests recall or a recurring failure may have relevant recorded history.
wuisabel-gif/MemWhale
MemoryWhale debugging; compiler failures; terminal diagnostics.
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
NVIDIA/skills
A skill your agent uses when the user wants to deploy, run, debug, tear down, or call the REST API of the RTVI-CV 2D detection / tracking microservice.
NVIDIA/skills
Generates, validates, compares and explains HOLOLINK_def.svh macro files for the HSB IP, using bundled Python scripts and asking before it writes anything.
NVIDIA/skills
Runs and validates an end-to-end Mission Control demo in a locally installed Isaac Sim, with a Nova Carter robot driven through a Python server.
NVIDIA/skills
Orchestrates defect image generation for PCBA, metal surface and glass inspection with NVIDIA Cosmos AnomalyGen on OSMO, from cold-start Day 0 to real-photo Day 1 labeling.
NVIDIA/skills
Orchestrates video data augmentation and auto-labeling workflows on OSMO, from flow selection and preflight checks to submission, monitoring and output download.
NVIDIA/skills
Runs NVIDIA TAO Data Services KPI analysis on object detection results, comparing predictions to ground truth and writing per-class precision, recall and AP to a CSV.
Works with
A skill your agent uses when controlling NVIDIA Broadcast through MCP to apply effects, process local media, select devices, or change camera resolution, or when Broadcast is missing or too old to…. Nvidia Broadcast is an agent skill from NVIDIA/skills, published by the product's own GitHub organization. Use when controlling NVIDIA Broadcast through MCP to apply effects, process local media, select devices, or change camera resolution, or when Broadcast is missing or too old to expose the gateway and the user wants it installed; not for Broadcast app settings outside the MCP gateway.
Nvidia Broadcast fits situations like: controlling NVIDIA Broadcast through MCP to apply effects; process local media; change camera resolution; broadcast is missing.
Run `npx skills add NVIDIA/skills --skill nvidia-broadcast -a claude-code`. Or copy the skill folder (skills/nvidia-broadcast in NVIDIA/skills) into .claude/skills/nvidia-broadcast in your project. Claude Code loads it when a task matches its description.
Run `npx skills add NVIDIA/skills --skill nvidia-broadcast -a codex`. Or copy the skill folder (skills/nvidia-broadcast in NVIDIA/skills) into .agents/skills/nvidia-broadcast in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add NVIDIA/skills --skill nvidia-broadcast -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nvidia-broadcast, .gemini/skills/nvidia-broadcast, .github/skills/nvidia-broadcast and .opencode/skills/nvidia-broadcast in your project.
Going by SKILL.md and its folder, Nvidia Broadcast needs PowerShell for the scripts in its folder and the command-line tools its instructions call (npx and pip). Our summary lists: Python 3; Node.js; PowerShell.
SKILL.md names 2 domains. In commands or code: ota.nvidia.com; the agent is likely to contact it when it follows the instructions. As links in the text: nvidia.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Nvidia Broadcast is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 10k tokens (SKILL.md is roughly 42k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 23k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Nvidia Broadcast: Skill Inspector (NVIDIA/SkillSpector, 20k stars), Integrate Model (tryonlabs/opentryon, 551 stars), Memorywhale (wuisabel-gif/MemWhale, 154 stars) and Memorywhale Evidence (wuisabel-gif/MemWhale, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
NVIDIA (a GitHub organization, an official publisher) maintains it in NVIDIA/skills, which has 3,539 GitHub stars. The repository holds 380 skills in this directory. The repository was last updated on October 7, 2026.
Source: NVIDIA/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.