# IP cameras (ONVIF/RTSP) (pypi · ipcam-mcp)

MCP server for local IP cameras (ONVIF/RTSP): snapshots, recordings, pan/tilt, presets

- Trust score: 53/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `ipcam-mcp`: 53/100 (this document), [markdown](https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp.md), [page](https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp)

## Channel facts

- Registry: `pypi`
- Package: `ipcam-mcp`
- Version: `0.4.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs uv_build at install time, a recognised build step with no custom scripting around it.
  - 3 of 53 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 63/100
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 1552 tokens (~77/item across 20 items; 20 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (75% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the IP cameras (ONVIF/RTSP) MCP server?

IP cameras (ONVIF/RTSP) runs locally as a PyPI package, launched with uvx ipcam-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add aidev-iprokszin-ipcam-mcp -- uvx ipcam-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "aidev-iprokszin-ipcam-mcp": {
      "command": "uvx",
      "args": [
        "ipcam-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "aidev-iprokszin-ipcam-mcp": {
      "command": "uvx",
      "args": [
        "ipcam-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add aidev-iprokszin-ipcam-mcp -- uvx ipcam-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aidev-iprokszin-ipcam-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "ipcam-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add aidev-iprokszin-ipcam-mcp --command uvx --arg ipcam-mcp
```

### Hermes

```yaml
mcp_servers:
  aidev-iprokszin-ipcam-mcp:
    command: "uvx"
    args: ["ipcam-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "aidev-iprokszin-ipcam-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "ipcam-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add aidev-iprokszin-ipcam-mcp -t stdio -c uvx -a ipcam-mcp
```

### Other

```json
{
  "mcpServers": {
    "aidev-iprokszin-ipcam-mcp": {
      "command": "uvx",
      "args": [
        "ipcam-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 53, −14)

- [security regression] Malware scan: pass → unverified

### 2026-11-04 (score 67, +17)

- [security improvement] Malware scan: unverified → pass
- [functional improvement] Stability: unverified → 0.03
- [functional] Destructive annotations: All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
- [functional] Package version: 0.3.2 → 0.4.0

### 2026-11-03 (score 50)

First indexed and scored.

## MCP tools (20)

### `list_cameras` (~68 tokens)

List cameras

List configured cameras with their ids (names), uids, types and capabilities
(camera, ptz). include_removed=true also lists removed cameras whose files are still
on disk ("removed": true), e.g. to clean them up with delete_camera.

Input parameters:

- `include_removed` (boolean)

Output parameters:

- `result` (string)

### `camera_snapshot` (~198 tokens)

Take a snapshot

Take a still picture from a camera. Returns the image (downscaled to at most 1280 px
wide) and the path of the full-size JPEG saved on the local machine.

quality: "high" = main stream (1080p); "low" = sub stream (smaller, quicker).
crop: [x, y, w, h] as fractions of the frame (0-1) to see a detail at full resolution.
region: a named ninth of the frame instead of crop (not both).
from_path: reuse an earlier full-size snapshot (e.g. the one just viewed, or one from
scene_timeline) instead of taking a new one; combine with crop/region to zoom into it.
The camera is not contacted, and camera may be omitted.

Input parameters:

- `camera`
- `crop`
- `from_path`
- `quality` (string)
- `region`

### `camera_save_baseline` (~53 tokens)

Save a baseline snapshot

Take a snapshot and keep it as a named reference for camera_compare (e.g.
'door-closed').

Input parameters:

- `camera` (string, required)
- `name` (string, required)
- `quality` (string)

### `camera_compare` (~74 tokens)

Compare with a previous snapshot

Take a new snapshot and report what changed compared with this camera's previous
snapshot in its current scene, or with a named baseline saved in that scene. Use the
reported cells as `region` in camera_snapshot to look closer.

Input parameters:

- `baseline`
- `camera` (string, required)
- `quality` (string)

### `list_scenes` (~41 tokens)

List scenes

The scenes (places watched): their configured cameras, removed cameras that were
there, the time of the oldest and newest capture, and how many there are.

Output parameters:

- `result` (string)

### `scene_snapshot` (~39 tokens)

Snapshot every camera in a scene

Take a snapshot with every camera in the scene, labelled with the camera's name.

Input parameters:

- `quality` (string)
- `scene` (string, required)

### `scene_compare` (~43 tokens)

Compare every camera in a scene

camera_compare for every camera in the scene, labelled with the camera's name.

Input parameters:

- `baseline`
- `quality` (string)
- `scene` (string, required)

### `scene_timeline` (~85 tokens)

Scene timeline

The scene's snapshots, recordings and baselines, newest first, from every camera
that watched it (removed ones too). start/end: YYYY-MM-DD (whole day) or an ISO
datetime. Open a snapshot with camera_snapshot(from_path=...).

Input parameters:

- `end`
- `limit` (integer)
- `scene` (string, required)
- `start`

Output parameters:

- `result` (string)

### `camera_record` (~103 tokens)

Record a video clip

Record a video clip (1-60 s) from a camera to an mp4 file on the local machine.
Returns the file path and size; the video itself is not returned, so take a snapshot
if you need to see the scene.

quality: "high" = main stream (1080p); "low" = sub stream (smaller file).

Input parameters:

- `camera` (string, required)
- `quality` (string)
- `seconds` (integer)

Output parameters:

- `result` (string)

### `ptz_move` (~113 tokens)

Pan or tilt the camera

Pan or tilt a camera. Directions are as seen in the camera image ("left" turns the
view left). amount: "small" is a slight nudge, "medium" a noticeable turn, "large" a big
sweep. Waits until the camera has stopped, then returns its pan/tilt position if the
camera reports one. Take a snapshot afterwards to see the new view.

Input parameters:

- `amount` (string)
- `camera` (string, required)
- `direction` (string, required)

Output parameters:

- `result` (string)

### `ptz_list_presets` (~35 tokens)

List PTZ presets

List the saved camera positions (presets) of a pan/tilt camera.

Input parameters:

- `camera` (string, required)

Output parameters:

- `result` (string)

### `ptz_goto_preset` (~44 tokens)

Go to a PTZ preset

Move a pan/tilt camera to a saved preset, given by name or token.

Input parameters:

- `camera` (string, required)
- `preset` (string, required)

Output parameters:

- `result` (string)

### `ptz_save_preset` (~52 tokens)

Save a PTZ preset

Save the camera's current position as a preset. Refuses an existing name unless
overwrite=true.

Input parameters:

- `camera` (string, required)
- `name` (string, required)
- `overwrite` (boolean)

Output parameters:

- `result` (string)

### `ptz_remove_preset` (~39 tokens)

Remove a PTZ preset

Delete a saved preset by name or token. This cannot be undone.

Input parameters:

- `camera` (string, required)
- `preset` (string, required)

Output parameters:

- `result` (string)

### `reload_cameras` (~35 tokens)

Reload cameras.toml

Re-read cameras.toml after it was edited by hand and list the cameras, in the same
format as list_cameras.

Output parameters:

- `result` (string)

### `add_camera` (~203 tokens)

Add a camera

Add an ONVIF/RTSP IP camera. Ask the user for the camera's IP address (from its app
or router) and pick a short name such as "garage".

Credentials are never passed as arguments: by default the user is shown a login form;
with credentials_via="file" a secrets file is created for the user to fill in, then
call add_camera again with credentials_via="file". Use credentials_via="file" when the
user is on Remote Control or a phone and the form does not appear.

onvif_port: only if the camera uses a non-standard ONVIF port (80 and 2020 are tried).
scene: the place it watches, if not its own name (several cameras may share a scene).

Input parameters:

- `credentials_via` (string)
- `host` (string, required)
- `name` (string, required)
- `onvif_port`
- `scene`

Output parameters:

- `result` (string)

### `rename_camera` (~39 tokens)

Rename a camera

Change a camera's name. Its baselines, snapshots and recordings stay with it.

Input parameters:

- `new` (string, required)
- `old` (string, required)

Output parameters:

- `result` (string)

### `set_scene` (~103 tokens)

Move a camera to a scene

Move a camera to another scene (the place it watches). Its earlier snapshots stay
with the earlier scene; camera_compare only compares within the current scene.

If removed cameras watched that scene, the user is asked in a form whether this camera
replaces one of them (it then continues that camera's compare and baselines). Call it
with the camera's current scene to answer that question later.

Input parameters:

- `camera` (string, required)
- `scene` (string, required)

Output parameters:

- `result` (string)

### `remove_camera` (~37 tokens)

Remove a camera from the config

Remove a camera from the configuration. Never deletes snapshots or recordings
(delete_camera does, after the user approves).

Input parameters:

- `name` (string, required)

Output parameters:

- `result` (string)

### `delete_camera` (~78 tokens)

Delete a camera and its files

Delete a camera and all its snapshots, recordings and baselines, or the leftover
files of a removed camera with that name. The user approves in a form that lists what
will be deleted; you cannot approve it. Without form support nothing is deleted and the
result says how to do it by hand.

Input parameters:

- `name` (string, required)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp#diagnostics

## Score history

- 2026-11-05: 53
- 2026-11-04: 67
- 2026-11-03: 50

## Common questions

### What is the IP cameras (ONVIF/RTSP) MCP server?

IP cameras (ONVIF/RTSP) is an MCP server listed in the public MCP registry as io.github.aidev-iprokszin/ipcam-mcp. MCP server for local IP cameras (ONVIF/RTSP): snapshots, recordings, pan/tilt, presets. This page covers its PyPI package (ipcam-mcp).

### Is the IP cameras (ONVIF/RTSP) MCP server safe to use?

IP cameras (ONVIF/RTSP) scores 53 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. 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 IP cameras (ONVIF/RTSP) MCP server expose?

IP cameras (ONVIF/RTSP) exposes 20 tools: list_cameras, camera_snapshot, camera_save_baseline, camera_compare, list_scenes, and 15 more. Their descriptions and schemas cost roughly 1,482 tokens of context every time the server is loaded.

### Is the IP cameras (ONVIF/RTSP) MCP server still maintained?

IP cameras (ONVIF/RTSP) is still listed as active in the MCP registry. We last reached this channel on 5 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 IP cameras (ONVIF/RTSP) MCP server under?

IP cameras (ONVIF/RTSP) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/ipcam-mcp/
- Socket report: https://socket.dev/pypi/package/ipcam-mcp
- Repository: https://github.com/aidev-iprokszin/ipcam-mcp
- Changelog RSS feed: https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp.json
- HTML version of this page: https://verifymcp.io/servers/aidev-iprokszin-ipcam-mcp/ipcam-mcp
