Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OBSBOT Tiny 2 Camera Control

NPM · OBSBOT-MCP

Control an OBSBOT Tiny 2 camera: pan/tilt/zoom, AI tracking, focus, exposure, snapshots, recording

Available components

+2 this week 86 Trust /100

Last scanned (1 hour ago)

Scores higher than 89% of npm servers

Category IoT and Hardware

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 93 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to lxman/obsbot-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability69
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 9188 tokens (~112/item across 82 items; 82 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
  • Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "obsbot_preset_update" implies "overwrite" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 82 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (16)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Nov 26 −3
    • Stability: pass → 0.80 functional
  • 5 Nov 26 0
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.9.5 → 0.9.6 functional
  • 4 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
    • Package version: 0.6.3 → 0.9.5 functional
  • 3 Nov 26 −10
    • Malware scan: pass → unverified ▼ security
    • CVE-2023-54404 no longer affects this package ▲ security
    • Known CVEs: fail → pass ▲ security
    • Package version: 0.9.3 → 0.9.5 functional
    • Package version: 0.9.3 → 0.9.4 functional
  • 1 Nov 26 0
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.9.2 → 0.9.3 functional
    • Package version: 0.6.3 → 0.9.3 functional
  • 24 Oct 26 −5
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
  • 18 Oct 26 0
    • Stability: 0.97 → pass security
  • 17 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 6 Nov 2026 · Analysed npm/obsbot-mcp@0.9.6

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo lxman/obsbot-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/lxman/obsbot-mcp/.github/workflows/release.yml@refs/tags/v0.9.6
Rekor log index 3697770277
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:fc74d66f0b36b5d89aa520ea21b749c3d7fdd5ec493a7bf358befcb43cf6c6d85db2f4d02e410209408e54f4c2542c18dc3c806944a834fb7ba4f30a4

Background: How many MCP packages publish verified provenance →

Dependencies 93 packages
Packages resolved 93
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 82 exposed · ~9,188 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
obsbot_tail2_iso_range ~80

Read or set the auto-ISO range (the double-ended slider: both bounds, 100-6400 in doubling stops). Pass min and/or max; both default to the current value when omitted. Readback-verified write.

NameTypeReqDescription
camerastring––
maxinteger––
mininteger––

No output schema declared.

No examples provided.

obsbot_tail2_live_status ~129

Read a FRESH runtime snapshot (GET /camera/test/status) distilled to what the REST tree hides: live gimbal pose (euler + joint angles — the WS push has no pose), zoom internals including digital_enable (the hybrid-zoom state, the readback obsbot_tail2_hybrid_zoom verifies against), runtime exposure truth (shutter/ISO/aperture as actually running), battery/lens temperatures, boot stage and uptime, and accessory state (360° base, BT remote, tally). Regenerated server-side per request.

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_only_me ~62

Read (bare call) or set (enabled) the Tail 2's OnlyMe human-tracking switch — track only the nearest/locked person rather than reframing for everyone.

NameTypeReqDescription
camerastring––
enabledboolean––

No output schema declared.

No examples provided.

obsbot_tail2_portrait ~135

Rotate a Tail 2's barrel 90° for portrait framing (enable) or back to landscape (disable) — a motorized physical rotation no Tiny 2 has. Takes ~1.5s; the tool polls the status push for the new orientation and returns settled:false if the motor hadn't finished within ~5s. MEASURED 2026-09-26: while the motor is in motion the camera can acknowledge a write and silently drop it — if settled stays false, retry the command. Hardware-verified both directions.

NameTypeReqDescription
camerastring––
enablebooleanyes–

No output schema declared.

No examples provided.

obsbot_tail2_preset_delete ~51

Delete a Tail 2 preset slot (1–3), freeing it. Verified by the slot disappearing from the list.

NameTypeReqDescription
camerastring––
slotintegeryes–

No output schema declared.

No examples provided.

obsbot_tail2_preset_list ~82

List a Tail 2's three preset slots: occupied/empty, decoded name, and pose in degrees + zoom ratio (pitch/yaw/roll/ratio). Slot numbers are 1–3 (the camera's own ids are 0-based; mapped for consistency with the Tiny 2 preset tools).

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_preset_recall ~126

Recall a Tail 2 preset slot (1–3): drives the gimbal and zoom to the saved pose. Refuses an empty slot. Arrival is verified through the only live observable — the zoom ratio from the status push — so gimbal axes are open-loop (the Tail 2 reports no live pose). Disable AI tracking first or it will fight the move. Hardware-verified 2026-09-26 (zoom 1.5 → saved 3.0 observed).

NameTypeReqDescription
camerastring––
slotintegeryes–

No output schema declared.

No examples provided.

obsbot_tail2_preset_rename ~71

Rename a Tail 2 preset slot (1–3). Names travel base64 on the wire; the tool encodes/decodes transparently (up to 40 chars).

NameTypeReqDescription
camerastring––
namestringyes–
slotintegeryes–

No output schema declared.

No examples provided.

obsbot_tail2_preset_save ~160

Save a Tail 2's CURRENT live pose into a slot (1–3): aim the camera first (via tracking, a recall, or physically), then save. name defaults to P1/P2/P3. NOTE: unlike the Tiny 2, save OVERWRITES an occupied slot (no create-once), and there is no explicit-pose write in this API at all — a slot always captures the camera's CURRENT pose (measured 2026-09-26; TAIL2-PROTOCOL.md §3) — deleting first is unnecessary. Hardware-verified 2026-09-26.

NameTypeReqDescription
camerastring––
namestring––
slotintegeryes–

No output schema declared.

No examples provided.

obsbot_tail2_preset_speed ~58

Read or set the preset switching speed (1-5, Center's Console page). How fast recalls drive the gimbal. Readback-verified write.

NameTypeReqDescription
camerastring––
speedinteger––

No output schema declared.

No examples provided.

obsbot_tail2_recenter ~122

Recenter a Tail 2's gimbal (yaw 0 / pitch 0 / roll 0). Returns as soon as the command is acknowledged — the Tail 2 exposes no live pose to verify arrival against (open-loop, like the Tiny 2 on Linux), and note that commanding a reset can drop AI tracking to none (observed once 2026-09-26; re-enable with obsbot_tail2_ai_track if that matters). Hardware-verified 2026-09-26.

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_record ~78

Read (bare call) or control (enable) the Tail 2's recording switch over REST. Recording needs storage — with no SD card the state still reads ("off") but starting will not succeed; check obsbot_tail2_status's sdcard field first.

NameTypeReqDescription
camerastring––
enableboolean––

No output schema declared.

No examples provided.

obsbot_tail2_roll_bias ~83

Set a Tail 2's roll trim angle in degrees (horizon correction / deliberate tilt), clamped to ±90. Unlike the Tiny 2 (whose roll slot is inert), this moves the image. Verified write+readback on hardware 2026-09-26.

NameTypeReqDescription
anglenumberyes–
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_scan ~116

Discover OBSBOT Tail 2 cameras on the network and register them. Listens for the camera's own mDNS announcements (~5s — it multicasts its MAC, name and IPs every few seconds, the same channel OBSBOT Center discovers by) and falls back to an HTTP subnet sweep only when nothing was heard (multicast-filtered networks; ~20s on a full /24). Returns the cameras found; they stay registered afterwards. Run this once to onboard a Tail 2 whose IP you don't know.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

obsbot_tail2_sleep ~153

Put a Tail 2 to sleep (POST /camera/sdk/poweroff). Despite the endpoint name, the camera's own web UI uses this for sleep/hibernate rather than a hard power cut: this MOVES the camera (stowing the gimbal face-down at pitch ~84–89°), suspends the media/streaming daemon (NDI/SRT/RTSP and /camera/test/status stop while asleep), and keeps the HTTP/WS server online so obsbot_tail2_wake can resume it over the network. Polls the status push until power_on reads false (~3–6s). Hardware-verified 2026-11-03.

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_snapshot ~210

Grab one still frame from a Tail 2 and return it as an image (for framing/lighting checks — and for measuring pixels). Source: the camera's SRT output via ffmpeg SRT caller (port 5000) — requires SRT listener mode in OBSBOT Center; exclusive with NDI, cleared by reboots, and Center only allows changing streaming settings while the output is off. Serves immediately once on. If SRT is off, returns a report of what it found with the available options and their costs (SRT toggle, NDI Webcam bridge caveats, NDI Tools install) so you can pick the cheapest path instead of dead-ending. resolution is the longest edge (256–1920, default 640); quality 1–100 (default 80). Needs ffmpeg. Frames are 16:9 1080p-sourced.

NameTypeReqDescription
camerastring––
qualityinteger––
resolutioninteger––

No output schema declared.

No examples provided.

obsbot_tail2_status ~137

Read a Tail 2's full live status block (one WebSocket push): power, recording, portrait rotation, AI mode + tracking settings, zoom ratio, roll bias, focus modes, NDI/RTSP/SRT/RTMP enablement, SD card, preset list with poses (degrees + zoom ratio), and per-subsystem health (gimbal/AI/battery/lens/ToF). NOTE: no live yaw/pitch — the Tail 2 reports pose only via saved presets, so gimbal moves are open-loop (same limitation as the Tiny 2 on Linux).

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_stream ~96

Read (bare call) or set the Tail 2's active network output: ndi|rtsp|srt|off — exactly ONE is active at a time (setting srt displaces ndi, and a camera reboot resets to off). This is the programmatic way to arm SRT for obsbot_tail2_snapshot without touching OBSBOT Center.

NameTypeReqDescription
camerastring––
outputstring––

No output schema declared.

No examples provided.

obsbot_tail2_stream_config ~145

Read (bare) or set the stream encoder configuration shared by the network outputs: encoder (h264/h265), resolution (camera format like 1920X1080P30), bitrate (Mbps). The bare read also includes the RTSP URLs for both network interfaces. GATED (MEASURED 2026-10-01): resolution writes 500 while an output is live — set obsbot_tail2_stream output:"off" first (encoder and bitrate writes are ungated). Readback-verified writes.

NameTypeReqDescription
bitratenumber––
camerastring––
encoderstring––
resolutionstring––

No output schema declared.

No examples provided.

obsbot_tail2_track_custom ~197

Configure CUSTOM tracking speed (Center's `customized` track speed): enable it, set the per-axis Pan/Tilt speeds 1-10, and toggle the per-axis Auto buttons. Bare call reads current state from the status push (tracking_settings, locks included read-only). Writes ride UDP 9999 keys 04/07/0a/06/09 (pan/tilt travel as float32 slider/10 on the wire; keys 06/09 are the Auto buttons — hardware-verified against horizontal_auto/vertical_auto). The AXIS LOCKS have no known write path (not UDP, REST guesses 404) — shown read-only. Verified by tracking_settings readback.

NameTypeReqDescription
camerastring––
enabledboolean––
paninteger––
panAutoboolean––
tiltinteger––
tiltAutoboolean––

No output schema declared.

No examples provided.

obsbot_tail2_track_speed ~82

Set a Tail 2's tracking follow speed: superLazy | lazy | slow | fast | crazy | customized — the camera's own six-speed enum (NOT the Tiny 2's standard/sport pair). Verified by readback on hardware 2026-09-26.

NameTypeReqDescription
camerastring––
speedstringyes–

No output schema declared.

No examples provided.

obsbot_tail2_track_target ~153

Tap-to-track: give a normalized frame coordinate (x/y 0.01-0.99, top-left ~0,0) and the camera engages AI tracking on the subject there — measured to arm humanTrackingSingleMode on its own from mode none. Divide a snapshot pixel by frameWidth/frameHeight and pass it straight in. The mode that engages depends on what is at the point, so read it back (obsbot_tail2_status ai_mode) when it matters; objectTracking cannot be entered this way (it demands a bounding box the API grammar for which is not yet decoded).

NameTypeReqDescription
camerastring––
xnumberyes–
ynumberyes–

No output schema declared.

No examples provided.

obsbot_tail2_usb_mode ~89

Read or set the USB-C function mode: mtp or uvc. Control rides the network either way, so switching is safe remotely. `mtp` is the measured wire value; `uvc` is the presumed counterpart (GET-measured 2026-10-01). Readback-verified write.

NameTypeReqDescription
camerastring––
modestring––

No output schema declared.

No examples provided.

obsbot_tail2_wake ~103

Wake a sleeping Tail 2 (POST /camera/sdk/poweron). This MOVES the camera: waking un-stows the gimbal back to its active pose and resumes the media/streaming daemon. Polls the WebSocket status push (riding out brief socket restarts while the daemon wakes) until power_on reads true (~4–6s). Hardware-verified 2026-11-03.

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_tail2_wb ~84

Read (bare call) or set the Tail 2's white balance: mode auto|daylight|fluorescent|tungsten|cloudy|manual, plus temperature in Kelvin (2000-10000) which applies in manual mode.

NameTypeReqDescription
camerastring––
modestring––
temperaturenumber––

No output schema declared.

No examples provided.

obsbot_tail2_zone_tracking ~110

Toggle zone tracking (Center's Console page switch) on or off. Rides the camera's private UDP 9999 channel (generic key-value command, key 03 — decoded from a labeled capture 2026-10-01, TAIL2-PROTOCOL.md §10b). No ack and no REST-readable state — the effect shows in the tracking behavior. Synthesized frame, works with Center closed.

NameTypeReqDescription
camerastring––
enabledbooleanyes–

No output schema declared.

No examples provided.

obsbot_tail2_zoom ~132

Set absolute zoom ratio on a Tail 2 (1.0–12.0 — twelve x, six times the Tiny 2's range; scale is the camera's own ratio, not a magnification multiple). speed 1–10 is REQUIRED by the firmware and defaults to 5. Zoom ramps mechanically; the tool polls the readback and returns settled:false if it hadn't arrived within ~5s — the command was still sent. Hardware-verified 2026-09-26.

NameTypeReqDescription
camerastring––
rationumberyes–
speedinteger––

No output schema declared.

No examples provided.

obsbot_tail2_zoom_type ~170

Read or set the auto-zoom framing pattern (Center's Console slider under Single/Group tracking: off/3/5/7/9/…/24). Off=normal, 7/9/16/24=P7/P9/P16/P24 (subject-size framing percentages), 3/5≈halfBody/fullBody (3 disabled in group mode). Arming AI tracking sets this to `shot` — which is why the status block's zoom_type reads shot while tracking. Writes are GATED (MEASURED 2026-10-01): the camera 500s unless human tracking is armed — obsbot_tail2_ai_track enabled:true first. Readback-verified write.

NameTypeReqDescription
camerastring––
typestring––

No output schema declared.

No examples provided.

obsbot_wake ~65

Wake the camera/gimbal (sends "run"). This MOVES the camera: waking un-stows the gimbal and brings it back to level (pitch ~0). Most control commands also wake the camera implicitly as a side effect.

NameTypeReqDescription
camerastring––

No output schema declared.

No examples provided.

obsbot_zoom_to_fit ~463

Frame a region of a frame you just captured: centre the gimbal on it and zoom so the region fills the frame. Give x/y/width/height of the region plus the frameWidth/frameHeight from THE SAME obsbot_capture_snapshot result — mixing a region from one frame with dimensions from another frames the wrong place and cannot be detected. Must come from a snapshot, and takes the same `source` declaration as obsbot_aim_at_pixel. `margin` (default 0.1) backs the zoom off by that fraction so the region isn't framed edge-to-edge; the tighter of the region's two axes decides the zoom, so the WHOLE region stays visible rather than being cropped on one side. Moves the gimbal BEFORE zooming, since zooming first can push the region's centre out of frame. Refuses on the same conditions as obsbot_aim_at_pixel: AI tracking active, the camera was asleep (waking it moves the gimbal and invalidates the frame), the FOV mode can't be decoded, a corrupt zoom reading, or the region's centre lying past vertical from the current pose, or a frame that isn't 16:9 (obsbot_capture_snapshot always returns 16:9; a non-16:9 pair looks transposed). Also refuses a region that isn't within the frame (edges included), or has non-positive width/height. The requested zoom is clamped to the camera's [1x, 4x] magnification range and reported via `clamped`; a partial fit still moves and zooms to the limit. Zoom ramps rather than jumping, so the tool polls the status block for up to 3s waiting for it to arrive and returns `settled:false` (not an error) if it didn't — a frame captured mid-ramp is at an unknown magnification, so check `settled` before trusting a follow-up snapshot.

NameTypeReqDescription
camerastring––
frameHeightnumberyes–
frameWidthnumberyes–
heightnumberyes–
marginnumber––
sourcestring––
widthnumberyes–
xnumberyes–
ynumberyes–

No output schema declared.

No examples provided.

obsbot_zoom_uvc ~164

Standard UVC zoom: set an absolute zoom ratio, clamped to [1.0, 2.0]. Snaps to the requested target exactly (unlike obsbot_zoom_vendor, whose ratio scale differs and may not land exactly where asked). Waits for the zoom to actually arrive and returns { settled }: the ramp is not instant (a full 1.0->2.0 sweep takes about 2.4s), and obsbot_aim_at_pixel and obsbot_zoom_to_fit both refuse while it is in flight, so this returning early would just move the failure downstream. settled:false means the zoom had not arrived within the timeout — the command was still sent.

NameTypeReqDescription
camerastring––
rationumberyes–

No output schema declared.

No examples provided.

obsbot_zoom_vendor ~103

Vendor zoom path with adjustable speed: zoom to a ratio at a chosen speed. This tool's ratio scale differs from obsbot_zoom_uvc's and may not land exactly on the requested target. ratio is clamped to [1.0,2.0]; speed 0=device default, 1-10 slow→fast, 255=maximum.

NameTypeReqDescription
camerastring––
rationumberyes–
speednumber––

No output schema declared.

No examples provided.

Install

How do I install the OBSBOT Tiny 2 Camera Control MCP server?

OBSBOT Tiny 2 Camera Control runs locally as an npm package, launched with npx -y obsbot-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · obsbot-mcp

# add to Claude Code
claude mcp add lxman-obsbot-mcp -- npx -y obsbot-mcp
Common questions

What is the OBSBOT Tiny 2 Camera Control MCP server?

OBSBOT Tiny 2 Camera Control is an MCP server listed in the public MCP registry as io.github.lxman/obsbot-mcp. Control an OBSBOT Tiny 2 camera: pan/tilt/zoom, AI tracking, focus, exposure, snapshots, recording. This page covers its npm package (obsbot-mcp).

Is the OBSBOT Tiny 2 Camera Control MCP server safe to use?

OBSBOT Tiny 2 Camera Control scores 86 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 6 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OBSBOT Tiny 2 Camera Control MCP server expose?

OBSBOT Tiny 2 Camera Control exposes 82 tools: obsbot_devices, obsbot_wake, obsbot_sleep, obsbot_gimbal_move, obsbot_gimbal_recenter, and 77 more. Their descriptions and schemas cost roughly 9,188 tokens of context every time the server is loaded.

Is the OBSBOT Tiny 2 Camera Control MCP server still maintained?

OBSBOT Tiny 2 Camera Control is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the OBSBOT Tiny 2 Camera Control MCP server under?

OBSBOT Tiny 2 Camera Control declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the OBSBOT Tiny 2 Camera Control MCP server?

VerifyMCP ran 16 checks on OBSBOT Tiny 2 Camera Control, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.