# ReelQuoteAI Survey Tool (remote · widget.reelquoteai.com)

Filmed moving surveys, itemized inventories, firm quotes and bookings for moving companies.

- Trust score: 83/100 (high trust)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-22

## Components

- remote · `widget.reelquoteai.com`: 83/100 (this document), [markdown](https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget.md), [page](https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget)

## Channel facts

- Endpoint: `https://widget.reelquoteai.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-09-22.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 85/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 3481 tokens (~102/item across 34 items; 32 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 67/100
  - Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 83% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 34 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the ReelQuoteAI Survey Tool MCP server?

ReelQuoteAI Survey Tool is a hosted endpoint at https://widget.reelquoteai.com/mcp, so there is nothing to install locally. 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 --transport http com-reelquoteai-survey-tool 'https://widget.reelquoteai.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-reelquoteai-survey-tool": {
      "url": "https://widget.reelquoteai.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-reelquoteai-survey-tool": {
      "type": "http",
      "url": "https://widget.reelquoteai.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-reelquoteai-survey-tool]
url = "https://widget.reelquoteai.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-reelquoteai-survey-tool": {
      "type": "remote",
      "url": "https://widget.reelquoteai.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-reelquoteai-survey-tool --url 'https://widget.reelquoteai.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-reelquoteai-survey-tool:
    url: "https://widget.reelquoteai.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-reelquoteai-survey-tool": {
      "Transport": "http",
      "Url": "https://widget.reelquoteai.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-reelquoteai-survey-tool -t streamable-http -u 'https://widget.reelquoteai.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-reelquoteai-survey-tool": {
      "type": "http",
      "url": "https://widget.reelquoteai.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-09-22 (score 83, +1)

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

### 2026-09-20 (score 82, +1)

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

### 2026-09-18 (score 81, +1)

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

### 2026-09-16 (score 80, +1)

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

### 2026-09-14 (score 79, +1)

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

### 2026-09-12 (score 78, +1)

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

### 2026-09-10 (score 77, 0)

- [functional] Schema quality: excellent → good
- [cosmetic] “list_jobs” reworded the description of “status”

### 2026-09-09 (score 77, +1)

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

## MCP tools (32)

### `get_session` (~25 tokens)

Resolve the key to its mover (name, branding, config).

Resolve the key to its mover (name, branding, config). Scope: quote.

### `list_home_profiles` (~33 tokens)

Home sizes for the ballpark step (2br_apt, 3br_house, …).

Home sizes for the ballpark step (2br_apt, 3br_house, …). Scope: quote.

### `ballpark_estimate` (~121 tokens)

Instant estimate range from home size + addresses.

Instant estimate range from home size + addresses. Free; never bookable. Scope: quote.

Input parameters:

- `destination` (object): One end of the move, as the customer gives it.
- `distance_miles` (number): Only used when no route can be found from the addresses
- `dwelling` (string, required): A `dwelling` from GET /home-profiles
- `move_date` (string): Lets date-based pricing apply. Optional but strongly recommended.
- `origin` (object): One end of the move, as the customer gives it.

### `create_job` (~273 tokens)

Start a job (the survey container).

Start a job (the survey container). Contact details are NOT accepted here — funnel rule. Send `Idempotency-Key` so a retry cannot create a second job. Scope: jobs:write.

Input parameters:

- `destination` (object): One end of the move, as the customer gives it.
- `dwelling` (string): What the customer says their home is (any wording; stored beside what the video measures)
- `idempotency_key` (string): Any unique string per intended job (a UUID, your order id). For 24 hours, the same key with the same body returns the ORIGINAL 201 body with `Idempotent-Replayed: true` and creates nothing; the same…
- `move_date` (string): YYYY-MM-DD
- `origin` (object): One end of the move, as the customer gives it.
- `quote_kind` (string): What the job is for. A firm job becomes bookable once filmed.

### `list_jobs` (~305 tokens)

List jobs for the tenant, newest first.

List jobs for the tenant, newest first. Secret key only. Paged: pass `limit` (1–100, default 25), optional `status`, and `cursor` from the previous page's `next_cursor` (null on the last page; a bad cursor is a 400). Scope: jobs:read.

Input parameters:

- `cursor` (string): Opaque; from the previous response's next_cursor.
- `limit` (integer)
- `status` (string): Funnel order. **created** — The job exists. Nothing uploaded yet. **uploading** — An upload URL was issued; the video is on its way. **uploaded** — A chunked upload was assembled (a single PUT skips…

### `get_job` (~44 tokens)

Full job state: status, inventory, quote, access, terms, move_date.

Full job state: status, inventory, quote, access, terms, move_date. Scope: jobs:read.

Input parameters:

- `job_id` (string, required): The job's ULID

### `set_contact` (~93 tokens)

Store customer email + optional name + move date.

Store customer email + optional name + move date. Sends NOTHING — required before upload-url. Scope: jobs:write.

Input parameters:

- `consent` (boolean, required): Must be true. Express consent to email about this quote.
- `email` (string, required)
- `job_id` (string, required): The job id (ULID)
- `move_date` (string|null): Null clears; absent leaves unchanged.
- `name` (string)

### `create_upload_url` (~193 tokens)

Presigned upload for the walkthrough video.

Presigned upload for the walkthrough video. Requires stored contact email. Body: { content_type, consent, size }. Send the byte size: at or above 16 MB the response carries `multipart` (an upload_id, a part_size and a presigned PUT per part) instead of `upload`, and each part is retried on its own rather than restarting the whole video. Report each part's ETag to /upload-complete. Below the threshold, or if opening a multipart upload fails, the response is a single `upload`. Scope: jobs:write.

Input parameters:

- `consent` (boolean, required): Must be true: the customer agrees the video will be analysed and shared with the mover.
- `content_type` (string, required): A video/* MIME type
- `job_id` (string, required): The job id (ULID)
- `size` (integer): Byte size of the file. Decides single vs multipart.

### `complete_upload` (~88 tokens)

Assemble a chunked upload.

Assemble a chunked upload. Body: { upload_id, parts: [{ part_number, etag }] }. Only after every part has been PUT; then call /submit. Scope: jobs:write.

Input parameters:

- `job_id` (string, required): The job id (ULID)
- `parts` (array, required): Every part, in any order
- `upload_id` (string, required): From the multipart ticket

### `submit_job` (~45 tokens)

Queue the uploaded video for analysis.

Queue the uploaded video for analysis. Poll GET /jobs/{id} for status. Scope: jobs:write.

Input parameters:

- `job_id` (string, required): The job id (ULID)

### `hand_off_video` (~225 tokens)

Server-side handoff: give us a public https URL of the walkthrough instead of up

Server-side handoff: give us a public https URL of the walkthrough instead of uploading it from a browser. Secret key only. We fetch it (up to 500 MB, streamed) and the job runs exactly as an upload would — poll GET /jobs/{id}. Needs the stored contact email and consent, like /upload-url. Replaces /upload-url, /upload-complete and /submit for a caller that already holds the file. A job whose fetch failed (`error`) may be handed a new URL. Counts toward the mover's daily analysis cap (429). Scope: jobs:write.

Input parameters:

- `consent` (boolean, required): Must be true: the customer agrees the video will be analysed and shared with the mover.
- `content_type` (string): A video/* MIME type when you know it; otherwise the host's Content-Type must be video/*
- `job_id` (string, required): The job id (ULID)
- `url` (string, required): Public https URL that serves the video (a signed cloud-storage link is ideal). Private hosts and http are refused.

### `confirm_access` (~107 tokens)

Confirm floors / elevator / stairs / carry distance for both ends.

Confirm floors / elevator / stairs / carry distance for both ends. Scope: jobs:write.

Input parameters:

- `destination` (object): What a customer can actually answer about one end. Only these fields are writable; inferred values are kept.
- `job_id` (string, required): The job id (ULID)
- `move_date` (string|null): YYYY-MM-DD
- `origin` (object): What a customer can actually answer about one end. Only these fields are writable; inferred values are kept.

### `edit_items` (~68 tokens)

Edit inventory (quantity, exclude, add by item_key).

Edit inventory (quantity, exclude, add by item_key). Response carries the re-priced quote. Scope: jobs:write.

Input parameters:

- `items` (array, required): Non-empty. Any edit clears the customer's approval and the e-signature.
- `job_id` (string, required): The job id (ULID)

### `approve_inventory` (~73 tokens)

Customer sign-off on the inventory, plus free-text notes.

Customer sign-off on the inventory, plus free-text notes. Scope: jobs:write.

Input parameters:

- `approved` (boolean): Default true. false withdraws the sign-off.
- `job_id` (string, required): The job id (ULID)
- `notes` (string): Up to 2000 chars; absent leaves unchanged

### `acknowledge_gaps` (~100 tokens)

Record the customer's answer to the capture-gap prompts (inventory.gaps on GET /

Record the customer's answer to the capture-gap prompts (inventory.gaps on GET /jobs/{id}). Body: { acknowledged: true } stamps "nothing is missing"; false clears it. The prompts themselves are recomputed from the current inventory on every read, so fixing a gap removes its prompt without this call. Scope: jobs:write.

Input parameters:

- `acknowledged` (boolean): Default true
- `job_id` (string, required): The job id (ULID)

### `send_resume_link` (~65 tokens)

Email the customer their resume link.

Email the customer their resume link. Only on explicit request. Scope: jobs:write.

Input parameters:

- `consent` (boolean, required): Must be true
- `email` (string, required)
- `job_id` (string, required): The job id (ULID)
- `name` (string)

### `request_booking` (~151 tokens)

Request the booking.

Request the booking. Idempotent per job; requires approve:true (types-name-as-signature approval of the inventory + quote, stored with a quote snapshot) and accept_terms when the mover has terms. Scope: jobs:write.

Input parameters:

- `accept_terms` (boolean): Required (true) when the job's `terms.terms` is non-null
- `approve` (boolean, required): Must be true: approves the inventory as complete and this quote. Cleared if the inventory is edited afterwards.
- `email` (string, required)
- `job_id` (string, required): The job id (ULID)
- `name` (string, required): The submitted name is the signature on the approval.
- `phone` (string)

### `report_outcome` (~99 tokens)

Report actuals (hours, final cents, crew).

Report actuals (hours, final cents, crew). Secret key only. Scope: outcomes.

Input parameters:

- `actual_crew` (integer)
- `actual_hours` (number)
- `actual_total_cents` (integer): What was actually billed, in integer cents. Currency travels beside it — never assume USD.
- `job_id` (string, required): The job id (ULID)
- `notes` (string): Up to 1000 chars

### `get_cube_sheet_csv` (~52 tokens)

Itemized cube sheet as CSV (Excel-ready): rooms, volumes, weights, exclusions.

Itemized cube sheet as CSV (Excel-ready): rooms, volumes, weights, exclusions. Secret key only. Scope: jobs:read.

Input parameters:

- `job_id` (string, required): The job id (ULID)

### `get_date_prices` (~56 tokens)

This job's quote priced across a ~2-week window from the mover's date rules.

This job's quote priced across a ~2-week window from the mover's date rules. flat=true means every day prices the same. Scope: jobs:read.

Input parameters:

- `job_id` (string, required): The job id (ULID)

### `set_move_date` (~69 tokens)

Set or clear the move date; invalidates and recomputes the quote.

Set or clear the move date; invalidates and recomputes the quote. Refused after a booking is requested. Scope: jobs:write.

Input parameters:

- `date` (string|null): YYYY-MM-DD, or null to clear.
- `job_id` (string, required): The job id (ULID)

### `quote_inventory` (~155 tokens)

Direct pricing for agents: items or total_cuft in, firm quote out.

Direct pricing for agents: items or total_cuft in, firm quote out. Secret key only. Scope: quote.

Input parameters:

- `destination` (object): One end of the move, as the customer gives it.
- `distance_miles` (number)
- `items` (array): …or this, priced from the catalog
- `move_date` (string): YYYY-MM-DD
- `origin` (object): One end of the move, as the customer gives it.
- `rate_card_id` (string): A specific card of this mover's; default the active one
- `total_cuft` (number): Either this…
- `total_weight_lbs` (number): Optional with total_cuft; derived from items otherwise

### `get_availability` (~94 tokens)

Which days the mover has marked off, before a job exists.

Which days the mover has marked off, before a job exists. Soft: a marked day can still be requested — the mover confirms and calls first — so steer to an open day when the customer has a choice. Scope: quote.

Input parameters:

- `days` (integer): Window length; values above 90 are capped.
- `from` (string): First day, YYYY-MM-DD. Default tomorrow; earlier dates clamp to tomorrow.

### `list_keys` (~41 tokens)

List the account's API keys — live and test, active and revoked.

List the account's API keys — live and test, active and revoked. Never a raw secret. Secret key with the `keys` scope. Scope: keys.

### `create_key` (~111 tokens)

Mint a key.

Mint a key. The raw secret is in THIS response only. A key can never mint one broader than itself; a test key mints only test keys; a live secret key may mint the sandbox pair. Scope: keys.

Input parameters:

- `kind` (string)
- `label` (string): Up to 80 chars, e.g. 'CRM sync'
- `mode` (string): Default: the calling key's mode.
- `scopes` (array|null): null (default) = everything the kind allows

### `rotate_key` (~166 tokens)

Replace a key with its twin (same kind, mode, scopes, label).

Replace a key with its twin (same kind, mode, scopes, label). The old key keeps working until `replaced.expires_at` so a deploy can swap values without a gap. Needs the `keys` scope even to rotate itself — rotate a scoped key with a full key or from the dashboard. A key is rotated once: rotating it again is a 409 `key_already_rotated`, and during its grace the old key cannot mint, rotate, revoke or read deliveries (403 `key_rotated`). A test key cannot rotate a live key (403 `mode_mismatch`). Scope: keys.

Input parameters:

- `grace_hours` (integer): 0 revokes the old key immediately.
- `id` (string): Which key. Default: the key making this call.

### `revoke_key` (~56 tokens)

Revoke a key immediately.

Revoke a key immediately. The only live publishable key is refused (409) — rotate it instead. A test key cannot revoke a live key (403 `mode_mismatch`). Scope: keys.

Input parameters:

- `id` (string, required)

### `list_webhook_deliveries` (~115 tokens)

The delivery log: every webhook POST for 30 days, newest first, with its outcome

The delivery log: every webhook POST for 30 days, newest first, with its outcome and the exact body sent. Secret key with the `keys` scope. A key reads the deliveries of its own mode: live keys the live log, test keys the sandbox log. Scope: keys.

Input parameters:

- `before` (string): The previous page's next_before
- `job_id` (string): Everything sent about one job
- `limit` (integer)
- `webhook_id` (string): One endpoint only

### `replay_webhook_delivery` (~83 tokens)

Re-send one delivery to its endpoint: the same body byte for byte (same envelope

Re-send one delivery to its endpoint: the same body byte for byte (same envelope id, so your dedupe still works) under a fresh signature, with the usual retries. Returns the replay's own delivery record. Deliveries of the other mode are not found (404). Scope: keys.

Input parameters:

- `id` (string, required): A delivery id from the log

### `search_catalog` (~36 tokens)

Search the cube-sheet catalog (?q=sofa).

Search the cube-sheet catalog (?q=sofa). Scope: quote.

Input parameters:

- `q` (string, required): Name, synonym or key fragment

### `suggest_addresses` (~58 tokens)

Address autocomplete (proxied; send session_token).

Address autocomplete (proxied; send session_token). Scope: quote.

Input parameters:

- `input` (string): What the customer has typed so far
- `session_token` (string): Any opaque string, kept for the whole typing session and the resolve call

### `resolve_address` (~40 tokens)

Resolve a suggestion to a full address (same session_token).

Resolve a suggestion to a full address (same session_token). Scope: quote.

Input parameters:

- `place_id` (string)
- `session_token` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget#diagnostics

## Score history

- 2026-09-22: 83
- 2026-09-21: 82
- 2026-09-20: 82
- 2026-09-19: 81
- 2026-09-18: 81
- 2026-09-17: 80
- 2026-09-16: 80
- 2026-09-15: 79
- 2026-09-14: 79
- 2026-09-13: 78
- 2026-09-12: 78
- 2026-09-11: 77
- 2026-09-10: 77
- 2026-09-09: 77
- 2026-09-08: 76
- 2026-09-07: 76
- 2026-09-06: 75
- 2026-09-05: 75
- 2026-09-04: 74
- 2026-09-03: 74
- 2026-09-02: 73

## Common questions

### What is the ReelQuoteAI Survey Tool MCP server?

ReelQuoteAI Survey Tool is an MCP server listed in the public MCP registry as com.reelquoteai/survey-tool. Filmed moving surveys, itemized inventories, firm quotes and bookings for moving companies. This page covers its hosted endpoint (https://widget.reelquoteai.com/mcp).

### Is the ReelQuoteAI Survey Tool MCP server safe to use?

ReelQuoteAI Survey Tool scores 83 out of 100 on VerifyMCP. 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 ReelQuoteAI Survey Tool MCP server expose?

ReelQuoteAI Survey Tool exposes 32 tools: get_session, list_home_profiles, ballpark_estimate, create_job, list_jobs, and 27 more. Their descriptions and schemas cost roughly 3,240 tokens of context every time the server is loaded.

### Does the ReelQuoteAI Survey Tool MCP server require authentication?

No. We connected to ReelQuoteAI Survey Tool without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the ReelQuoteAI Survey Tool MCP server still maintained?

ReelQuoteAI Survey Tool is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://widget.reelquoteai.com/mcp
- Authorisation metadata: https://widget.reelquoteai.com/.well-known/oauth-protected-resource/mcp
- Website: https://www.reelquoteai.com/developers
- Changelog RSS feed: https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget.json
- HTML version of this page: https://verifymcp.io/servers/com-reelquoteai-survey-tool/widget
