A collection of Python and Bash scripts for managing real estate listing videos, realtor data scraping, and listing database operations. Includes video rendering, listing import/export, and Supabase synchronization tools.
This server has 8 tools with mixed quality. Tool names are action-oriented (build_reel, import_listings, pull_listings, render_queue, sync, update_tracker, export_csv, scrape_rentcast), which is good. However, descriptions vary widely in quality and completeness. Most tools have descriptions (7/8), but several are vague or lack critical operational details. Input schemas are present for all tools with proper JSON Schema structure and type definitions. The major weakness is inconsistent parameter descriptions, some parameters lack clarity on constraints, formats, and dependencies. Error handling is largely absent from visible code. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present. Output schemas are not documented. The server appears to be a collection of domain-specific skills for real estate video processing and realtor list management, but lacks the polish and defensive design expected of production tools.
Turn a finished 16:9 listing flythrough into a posting-ready 9:16 IG reel with blurred-bg vertical, bold ALL-CAPS hook (first ~2.4s), premium grade, SILENT. Uses ffmpeg to apply grading, blur, text overlay, and format conversion.
Dump the deduped realtor list (v_realtors) to a CSV in the TDS Lead Lists folder. Supports filtering by state, phone presence, and email presence. Outputs columns: agent_name, brokerage, agent_phone, agent_email, agent_license, agent_instagram, state, active_listing_count, sample_address, sample_listing_url, sample_price_cents, has_phone, has_email, last_seen_at.
Bulk-load a batch of for-sale listings into the tds-ops `listing_videos` funnel as prospects. Reads from CSV (Redfin export) or plain text URL list. Supports filtering by minimum price and source inference. Deduplicates by listing_url or address.
Mirror the tds-ops `listing_videos` funnel DOWN to local folders under ~/Desktop/Listing Videos. Creates address-folders with photos/, clips/, and listing.json for each active listing. Refreshes listing.json with latest URL and agent info without deleting existing folders.
List listings the ops portal has queued for a FULL preview. Returns listings where build_requested_at IS NOT NULL AND preview_url IS NULL AND archived_at IS NULL. Output includes id, address, folder, listing_url, source, photos_needed.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Tools like import_listings, sync, and scrape_rentcast perform destructive writes but lack explicit marking. LLMs cannot distinguish safe reads from irreversible mutations without annotations.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. E.g., render_queue returns 'listings' but field names, types, and required fields are not specified.
Parameter descriptions lack constraint details. E.g., sync's 'status' enum is documented but no description explains what each status means or when to use each. import_listings' 'min_price' lacks units (dollars? cents?) and range bounds.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Primary engine for realtor list builder. Pulls ACTIVE for-sale listings from the RentCast API for a given state/market, maps each to a realtor_listings row (listing + listing agent contact), and bulk-upserts into tds-ops Supabase. Re-runs are idempotent (upsert on source+listing id).
Push a listing's state and rendered videos from local Mac up to tds-ops Supabase. Uploads teaser, preview, and 15s videos (FULL master intentionally excluded). Matches by address or listing_url. Updates or inserts row as needed.
Sync the ops `listing_videos` funnel into the local TDS_Listing_Video_Tracker.xlsx spreadsheet. Upserts every active (non-archived) ops listing by address (case-insensitive). Rows existing only in tracker are left untouched. Nothing is deleted.
Error handling absent from visible code. No recovery guidance, no actionable error messages. E.g., if import_listings fails to connect to Supabase, the LLM receives a raw HTTP error with no guidance on retry strategy or fallback.
Credentials loaded from ~/.config/tds-listing-video/.env but no validation that secrets are never exposed in tool parameters or responses. import_listings and sync both handle Supabase keys, verify they are never logged or returned to LLM context.