# Reel Estate MCP (npm · reel-estate-mcp)

Turn real-estate listing photos into property videos from your AI assistant.

- Trust score: 69/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `reel-estate-mcp`: 69/100 (this document), [markdown](https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp.md), [page](https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp)

## Channel facts

- Registry: `npm`
- Package: `reel-estate-mcp`
- Version: `0.3.4`
- 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-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/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 30 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2204 tokens (~95/item across 23 items; 23 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 83/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 50% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add com-tryreelestate-reel-estate-mcp -- npx -y reel-estate-mcp
```

### Codex

```bash
codex mcp add com-tryreelestate-reel-estate-mcp -- npx -y reel-estate-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-tryreelestate-reel-estate-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "reel-estate-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-tryreelestate-reel-estate-mcp --command npx --arg -y --arg reel-estate-mcp
```

### Hermes

```yaml
mcp_servers:
  com-tryreelestate-reel-estate-mcp:
    command: "npx"
    args: ["-y", "reel-estate-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "com-tryreelestate-reel-estate-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "reel-estate-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-08-03 (score 69, +1)

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

### 2026-08-02 (score 68, +43)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 25, −17)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 42, +16)

- [security regression] Provenance: unverified → fail
- [security regression] Malware scan: pass → unverified
- [security improvement] Install scripts: unverified → pass
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-07-29 (score 26, −24)

- [functional regression] Schema quality: 100 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 50)

First indexed and scored.

## MCP tools (23)

### `whoami` (~98 tokens)

Who am I

Show the upstream MCP URL, read-only flag, the account plan, whether writes are allowed (canWrite) with a plain-language writeAccess reason, and the live /users/profile response for the OAuth-authenticated user. Good first call to confirm auth and whether create/generate/render tools will work (free accounts are read-only over the MCP). If not signed in, it returns a 'run login' error — use the `login` tool.

### `login` (~63 tokens)

Log in

Authenticate with the backend. If not already logged in, returns an authorization URL to open in your browser; approve the sign-in and the token is cached in the background, then retry your action. (Browser-based login can't be popped reliably from here, so you click the link.)

### `logout` (~46 tokens)

Log out

Clear the cached OAuth session (and best-effort revoke it server-side) so the next tool call re-authenticates via the browser. Use to switch accounts or reset a broken auth state.

### `list_projects` (~101 tokens)

List projects

GET /projects for the authenticated user. Supports paging, sorting, search, and status filter.

Input parameters:

- `folderId` (string)
- `limit` (integer)
- `page` (integer)
- `search` (string)
- `sortBy` (string): e.g. updatedAt, createdAt, name, lastInteractedAt
- `sortOrder` (string)
- `starred` (boolean)
- `status` (string)

### `get_project` (~31 tokens)

Get a project

GET /projects/:id — full project document for the authenticated user.

Input parameters:

- `id` (string, required): Project id.

### `project_stats` (~24 tokens)

Project stats

GET /projects/stats — aggregate project counts/metrics for the authenticated user.

### `list_clips` (~69 tokens)

List clips

Clips for the authenticated user. With projectId -> GET /clips/project/:projectId; otherwise GET /clips (the clip library) with paging/status.

Input parameters:

- `limit` (integer)
- `page` (integer)
- `projectId` (string)
- `status` (string)

### `list_movies` (~40 tokens)

List movies

Rendered movies for the user. With projectId -> GET /movies/project/:projectId; else GET /movies.

Input parameters:

- `projectId` (string)

### `list_voices` (~25 tokens)

List voices

GET /voices — voiceover voices available to the user (stock + cloned).

### `get_usage` (~23 tokens)

Get usage

GET /billing/usage — credit and export usage for the authenticated user.

### `help` (~69 tokens)

How to use this server (start-to-finish walkthrough)

Guided, numbered walkthrough of the whole pipeline — sign in → create a project → add photos → edit → animate clips → add music/voiceover/overlays → arrange → render — with example args and the gotchas (async polling, paid gating). Call this first if you're not sure where to start.

### `list_endpoints` (~46 tokens)

List API endpoints

Return the curated catalog of API endpoints (grouped) so you know what `api_request` can call. Not exhaustive — every mounted route is reachable, this covers the main surface.

### `add_image_from_file` (~188 tokens)

Add a photo to a project from a local file

Upload a LOCAL image file to a project. Reads the file, mints a presigned S3 URL (POST /projects/:id/images/upload-url), PUTs the bytes straight to storage (no credentials needed), then attaches it (POST /projects/:id/images). This is the credential-less upload path the remote MCP can't do. Image aspect ratio must be between 0.5:1 and 2:1. Blocked in read-only mode.

Input parameters:

- `addToTimeline` (boolean): Also append a video timeline element so the image is in the render. Default true.
- `caption` (string): Optional caption stored with the image.
- `filename` (string): Override the stored filename (defaults to the file's basename).
- `path` (string, required): Absolute path to a local image file (jpg/png/webp).
- `projectId` (string, required): Target project id.

### `resolve_address` (~82 tokens)

Geocode a free-text address

Resolve a free-text address into ranked candidates (formatted, placeId, location, components). Use before creating a project for a real listing — pass the chosen candidate as the project `address` so listing facts (price/beds/baths) auto-populate. Prefer candidates with isStreetLevel=true.

Input parameters:

- `limit` (integer)
- `query` (string, required)

### `generate_clip` (~136 tokens)

Generate a video clip from a project image

Animate one still project image into a video clip (Runway Gen-4). Async — returns a jobId; poll get_clip_status. imageUrl is auto-resolved from the project if omitted. Costs credits.

Input parameters:

- `aspectRatio` (string)
- `customMotionPrompt` (string): Required when motion='custom'.
- `duration` (number): Seconds, 3-10 (default 5).
- `imageId` (string, required)
- `imageUrl` (string): Auto-resolved from the project if omitted.
- `motion` (string, required)
- `projectId` (string, required)
- `resolution` (string)

### `get_clip_status` (~38 tokens)

Check clip generation status

Poll a clip-generation job started by generate_clip (GET /clip-generation/clip-status/:jobId).

Input parameters:

- `jobId` (string, required)

### `edit_image` (~177 tokens)

Edit a project image (Gemini)

Create a non-destructive, versioned edit of a project image. editType: staging/destaging, twilight(+_interior), upscale, green_grass, bright_day, seasonal (winter/halloween/christmas +_interior), advanced replace/remove/add (need advancedParams), or manual (customPrompt). staging needs roomType+style. Async — returns a jobId; the new version appears on the image. Costs 1 credit.

Input parameters:

- `advancedParams` (object): Required for replace/remove/add.
- `customPrompt` (string): Required for editType='manual'.
- `editType` (string, required)
- `imageId` (string, required)
- `projectId` (string, required)
- `roomType` (string): Required for staging + advanced/interior edits.
- `style` (string): Required for staging.

### `render_movie` (~88 tokens)

Render the final movie for a project

Assemble the project's timeline into the final video (clips + music + watermark + overlays). Only projectId is required; settings fall back to the project. Async — returns a jobId; poll list_movies. Costs credits and an export.

Input parameters:

- `aiGeneratedLabel` (boolean): Per-render override of the AI-disclosure label.
- `projectId` (string, required)
- `settings` (object)

### `add_timeline_audio` (~232 tokens)

Add an audio track to the timeline

Place an EXISTING audio asset (a generated voiceover, a music track, any audio URL) on the timeline at a specific point so it's in the render. duration defaults to the full movie length (ideal for background music); pass sourceDuration for a fixed clip like a voiceover. Get a voiceover url/durationSec from get_project (project.voiceover / voiceovers[]). Blocked in read-only mode.

Input parameters:

- `duration` (number): Seconds. Defaults to movie length, else sourceDuration, else 5.
- `fadeIn` (number)
- `fadeOut` (number)
- `projectId` (string, required)
- `s3Key` (string)
- `sourceDuration` (number): Full length of the source audio, for a fixed-length clip.
- `startTime` (number): Seconds from the start of the movie. Default 0.
- `title` (string): Display label for the timeline clip.
- `url` (string, required): Public URL to the audio file (mp3).
- `volume` (number): 0-1. Default 1.

### `add_timeline_overlay` (~259 tokens)

Add an image/logo or text overlay to the timeline

Overlay an EXISTING image/logo OR a text caption on the timeline at a specific point. For an image, pass imageId (already in the project — url auto-resolved) or a direct url; for text, pass `text`. position is percent-of-canvas (0-100) from the top-left. Blocked in read-only mode.

Input parameters:

- `duration` (number): Seconds on screen. Default 5.
- `fontColor` (string): Text color, e.g. #FFFFFF. Text overlays only.
- `fontSize` (number): Text size in px. Text overlays only.
- `imageId` (string): Project image id to overlay (url auto-resolved).
- `opacity` (number)
- `position` (object): Percent-of-canvas position from top-left.
- `projectId` (string, required)
- `s3Key` (string)
- `size` (number): Image scale factor 0-1. Image overlays only.
- `startTime` (number): Seconds from the start of the movie. Default 0.
- `text` (string): Text caption — provide instead of an image for a text overlay.
- `url` (string): Direct image url (alternative to imageId).

### `move_timeline_element` (~118 tokens)

Retime a timeline element

Change when a single timeline element starts and/or how long it lasts (any track). Use to nudge a floating audio/overlay element to a new point. To resequence all clips, use reorder_timeline. Element ids come from get_project (timeline.tracks[].elements[].id). Blocked in read-only mode.

Input parameters:

- `duration` (number): New duration in seconds.
- `elementId` (string, required)
- `projectId` (string, required)
- `startTime` (number): New start, seconds from the movie start.

### `reorder_timeline` (~131 tokens)

Reorder timeline elements

Rearrange a track's elements (defaults to the video/clip track) into the given order and recompute sequential startTimes so they play back-to-back. Pass element ids in the desired order; omitted elements keep their relative order and are appended after. Ids come from get_project. Blocked in read-only mode.

Input parameters:

- `gap` (number): Seconds of gap to insert between elements. Default 0.
- `order` (array, required): Element ids in the desired playback order.
- `projectId` (string, required)
- `trackId` (string): Track to reorder. Defaults to the video track.

### `api_request` (~120 tokens)

Call any API endpoint

Generic authenticated request to ANY backend route. Path is relative to the API base (e.g. '/projects' or 'admin/users'). Use list_endpoints to discover paths. Non-GET methods are blocked when MCP_READONLY is set. Returns { status, ok, request, data } including error envelopes.

Input parameters:

- `body`: JSON body for non-GET requests.
- `method` (string, required)
- `path` (string, required): Path relative to API base, e.g. /projects/123 or admin/stats
- `query` (object)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 68
- 2026-08-01: 25
- 2026-07-31: 42
- 2026-07-29: 26
- 2026-07-28: 50
- 2026-07-27: 50

## Links

- npm package: https://www.npmjs.com/package/reel-estate-mcp
- Socket report: https://socket.dev/npm/package/reel-estate-mcp
- Repository: https://github.com/TryReelEstate/reel-estate-mcp
- Website: https://tryreelestate.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-tryreelestate-reel-estate-mcp/reel-estate-mcp
