# reel-estate-mcp [Health: Active]

**Category:** 🏠 Real Estate  
**Repository:** https://github.com/TryReelEstate/reel-estate-mcp  
**GitHub Stars:** 0  
**npm Downloads (last month):** 398  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/reel-estate-mcp

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

## Tools
Capabilities this server exposes over MCP:

- **whoami** — 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** — 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** — 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** — GET /projects for the authenticated user. Supports paging, sorting, search, and status filter.
- **get_project** — GET /projects/:id — full project document for the authenticated user.
- **project_stats** — GET /projects/stats — aggregate project counts/metrics for the authenticated user.
- **list_clips** — Clips for the authenticated user. With projectId -> GET /clips/project/:projectId; otherwise GET /clips (the clip library) with paging/status.
- **list_movies** — Rendered movies for the user. With projectId -> GET /movies/project/:projectId; else GET /movies.
- **list_voices** — GET /voices — voiceover voices available to the user (stock + cloned).
- **get_usage** — GET /billing/usage — credit and export usage for the authenticated user.
- **help** — 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** — 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** — 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.
- **resolve_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.
- **generate_clip** — 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.
- **get_clip_status** — Poll a clip-generation job started by generate_clip (GET /clip-generation/clip-status/:jobId).
- **edit_image** — 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.
- **render_movie** — 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.
- **add_timeline_audio** — 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.
- **add_timeline_overlay** — 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.
- **move_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.
- **reorder_timeline** — 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.
- **api_request** — 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.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "reel-estate-mcp": {
    "command": "npx",
    "args": ["-y","reel-estate-mcp"]
  }
}
```

## Documentation

## What reel-estate-mcp does

The reel-estate-mcp MCP server brings Reel Estate’s property-video workflow into MCP-compatible assistants. It supports project browsing, address resolution, local image uploads, AI photo editing, clip generation, timeline changes, and final movie rendering. The available workflow is suited to real-estate agents, marketers, or automation systems that begin with listing photos and need a finished property video.

Photo editing operations include virtual staging, twilight conversion, upscaling, seasonal changes, and replace, remove, add, or manual edits. The broader tool set also supports motion clips, voiceover and other timeline audio, image or text overlays, timeline reordering, and rendered movie discovery.

## How it works

The reel-estate-mcp MCP server runs locally over stdio and forwards API operations to Reel Estate’s backend `/mcp` endpoint. The backend remains responsible for authentication, plan checks, and permissions. Convenience tools expose common operations, while `list_endpoints` and `api_request` provide access to the backend’s API catalog and routes.

On the first tool call, the server opens a browser for Reel Estate sign-in. OAuth authorization code flow with PKCE returns through a local callback at `http://localhost:8765/callback`; access and refresh tokens are then cached under `~/.reel-estate-mcp`. The `whoami` tool reports the current plan, whether writes are allowed, and the reason when they are not. Use `login` to begin or clear a session and `logout` to revoke the server session and remove local credentials.

## Setup and configuration

Node.js 18 or newer, a Reel Estate account, and an MCP-compatible client are required. Add the server to an MCP client with:

```json
{
  "mcpServers": {
    "reel-estate": {
      "command": "npx",
      "args": ["-y", "reel-estate-mcp"]
    }
  }
}
```

Claude Code can instead launch it with `claude mcp add reel-estate -- npx -y reel-estate-mcp`. No environment variables or API keys are required. The first authentication flow needs access to a browser and the local callback port. To switch accounts, run `logout` or remove the token cache directory.

## Tools and capabilities

The reel-estate-mcp MCP server provides tools for:

- Checking authentication and plan write access with `whoami`.
- Browsing projects, clips, rendered movies, and available voices.
- Resolving free-text property addresses into ranked candidates.
- Uploading local images to a project through presigned uploads.
- Editing images with staging, twilight, upscale, seasonal, and object-change operations.
- Generating motion clips and checking their status.
- Adding audio or image/text overlays to a timeline.
- Moving or reordering timeline elements.
- Rendering the completed timeline into a listing video.

The `help` tool and `getting_started` prompt provide a guided walkthrough. Start with `whoami` before attempting project changes or generation.

## Limitations and notes

Free Reel Estate accounts are read-only through MCP. Creating, editing, generating, uploading, and rendering operations require a paid plan; read operations such as browsing projects, clips, and movies remain available to free accounts. A blocked write can return `403 MCP_PAID_PLAN_REQUIRED`.

Authentication is account-based rather than API-key-based. The server uses a public OAuth client and PKCE, and its local token cache contains the session state needed for later calls. Local image uploads are supported, but the server does not require users to provide storage credentials. Generated operations and permissions remain subject to Reel Estate’s backend rules and plan limits.

## Getting started with this reel-estate-mcp MCP server
Always refer to the official documentation for the most accurate and up-to-date information.

_Full upstream README: https://allmcps.com/mcp/reel-estate-mcp/readme_

