Skip to main content
Glama
chrischall
by chrischall

redfin-mcp

CI npm license

Redfin real-estate access as an MCP server for Claude — search listings, fetch property details, market reports, and your saved homes/searches via natural language.

⚠️ Redfin does not publish a public consumer API. This server uses the same private /stingray/... endpoints the redfin.com web app uses, routed through your own signed-in browser tab via the ContextMint Bridge extension (driven by fetchproxy). Every request acts on behalf of your existing session — your cookies, your TLS, your JS context — exactly as if you'd clicked it in the browser yourself. Treat this as informal use of Redfin's website. Use at your own discretion.

Tools

Tool

Purpose

Auth-scoped

redfin_search_properties

Search listings by location, price band, beds/baths, home type. Resolves free-text via Redfin's autocomplete then queries the gis API. Optional bounds searches a drawn-map box instead.

redfin_sweep_area

Exhaustive enumeration of a lat/lng box: recursive polygon tiling until no tile hits the 350-home gis cap, deduped and filtered locally, with a completeness summary and drift warnings. zips mode sweeps a list of ZIP regions instead (for areas where Redfin ignores drawn-map polygons). Listings come back inline; the optional output_path writes them to a new .json file inside REDFIN_OUTPUT_DIR (default ~/Downloads/redfin-mcp; never overwrites)

redfin_get_property

Full record for a property by URL, property_id alone, or property_id+listing_id. Address, beds/baths, sqft, year built, price, status, days on market, primary photo.

redfin_get_property_photos

Full photo gallery for a property — every CDN image at fullscreen/large/medium sizes plus thumbnails and captions.

redfin_get_market_report

Median sale/list prices, ZHVI YoY, average days on market, inventory for a region.

redfin_get_price_history

Listing-history and tax-roll events for a property — Listed/Sold/Pending entries plus annual assessed values and taxes paid.

redfin_compare_properties

Side-by-side comparison of 2–25 properties: address, price, beds/baths, sqft, $/sqft, year built, status, days on market. Optional aligned summary table.

redfin_bulk_get

Structured fetch of up to 200 properties in one call — per-row errors, retry-once-on-timeout, and an overall deadline (unsettled rows come back pending).

redfin_get_climate_risk

First Street Foundation flood / fire / heat risk factors for a property — FEMA zones, 30-year flood-chance series, insurance bands, cumulative-heat projections.

redfin_get_climate_risk_bulk

Climate risk for up to 100 properties in one call, input order preserved, with a cluster_summary of properties that share scores.

redfin_get_area_climate_baseline

Averaged climate-risk baseline from 2–10 sample properties in an area, plus the shared cluster_id when they agree.

redfin_get_comparable_rentals

Comparable rentals near a property — monthly rent, beds/baths, sqft, distance. Used for rent estimation.

redfin_calculate_affordability

Local affordability calculator — back-of-envelope max purchase price from income + DTI + rates (no network).

redfin_get_saved_homes

Your favorited homes — flattened across all collections, with primary photo URLs constructed from each home's CDN handles.

✓

redfin_get_saved_searches

Your saved searches with region URLs and display text.

✓

redfin_calculate_mortgage

Local PITI calculator — principal+interest, taxes, insurance, HOA, PMI (no network).

redfin_get_by_address

Resolve a free-text address to its Redfin canonical URL + home_id. Degrades to resolved: false when no listing matches. Autocomplete, then suffix variants, then a bounded search fallback.

redfin_resolve_addresses

Batch-resolve up to 100 addresses to Redfin URLs + home_ids, one row per input.

redfin_healthcheck

End-to-end bridge check — round-trips /robots.txt and reports which hop failed (bridge down vs. extension not linked / pair code pending vs. Redfin-side issue), plus the extension link state (bridge.session_state, pending_pair_code, extension_connected). Call when other tools time out.

redfin_register_session / redfin_set_active_session / redfin_get_session_context

Shared session registry — record which Redfin account the bridged tab is signed into, switch between registered sessions, and show the active one (local; no network).

Related MCP server: zillow-mcp

Acknowledgement of Terms

By using this MCP server, you acknowledge and agree to the following:

1. This server accesses your own Redfin session. Every request is dispatched through your own browser tab via the ContextMint Bridge extension — your cookies, your TLS, your session. It does not — and cannot — access anyone else's account.

2. Redfin's Terms of Use govern your use of this server, just as they govern your direct use of redfin.com. The clauses most relevant here:

You may not automatedly crawl or query the Services for any purpose or by any means (including, without limitation, screen and database scraping, spiders, robots, crawlers and any other automated activity with the purpose of obtaining information from the Services) unless you have received prior express written permission from the applicable Redfin Company.

And: "You agree to keep your password confidential, not use others' accounts, nor permit others to use your account."

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server. Redfin's terms prohibit automated crawling without written permission, and IDX listing data is licensed for personal, non-commercial use only.

3. Personal, non-commercial use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Redfin Corporation. It is a personal automation tool that calls the same /stingray/... endpoints redfin.com calls when you click around. Do not use it to bulk-extract listings, redistribute IDX data, train AI models, populate a competing real-estate product, or for any commercial purpose.

4. Stability is not guaranteed. This server reads private internal endpoints (/stingray/api/gis, /stingray/api/home/details/*, /stingray/api/region/.../market-trends, /myredfin/*) that Redfin may change without notice. It may break. It may stop working. That's by design — the surface is not theirs to maintain on our behalf.

5. You accept full responsibility for any consequences of using this server in connection with your Redfin access — rate limiting, account suspension, IP blocks, AWS WAF challenges, or any enforcement action Redfin takes. If Redfin objects to your use, stop using this server.

This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Redfin's actual ToU.

Install

Option A — npx (after first publish)

Add to .mcp.json:

{
  "mcpServers": {
    "redfin": {
      "command": "npx",
      "args": ["-y", "redfin-mcp"]
    }
  }
}

Option B — from source

git clone https://github.com/chrischall/redfin-mcp
cd redfin-mcp
npm install
npm run build
{
  "mcpServers": {
    "redfin": {
      "command": "node",
      "args": ["/path/to/redfin-mcp/dist/bundle.js"]
    }
  }
}

One-time browser setup

redfin-mcp talks to your browser through the ContextMint Bridge extension, which is shared across every fetchproxy-based MCP (zillow-mcp, opentable-mcp, resy-mcp, …). Install it once from the ContextMint Bridge releases:

  • Chrome: download the Chrome zip, unzip it, then chrome://extensions → toggle Developer mode → Load unpacked → pick the unzipped folder.

  • Safari: not available yet — it will ship inside the ContextMint app, which has no public download. Use Chrome for now.

ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (fetchproxy#extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

Open redfin.com and sign in. That's all the auth this server needs.

How it works

┌────────────────┐  stdio   ┌──────────────────┐   WS   ┌──────────────────┐    fetch()    ┌─────────────┐
│ MCP client     │◀────────▶│  dist/bundle.js  │◀──────▶│  ContextMint     │◀────────────▶│ redfin.com  │
│ (Claude, etc.) │          │  (Redfin MCP)    │ :37149 │  Bridge          │   (real TLS, │ (your tab)  │
└────────────────┘          └──────────────────┘        │  (separate)      │   cookies)    └─────────────┘

The MCP server runs in Node, but every HTTP call to redfin.com is dispatched into your live browser tab through the ContextMint Bridge extension. Each request rides your existing session — TLS fingerprint, cookies, and JS execution context all match the page that's already on screen. No headless browser stand-in, no separate identity, no third-party proxy: just your real browser, acting on its own behalf, with the MCP server picking what to ask for.

Redfin's /stingray/... JSON endpoints respond with a {}&& anti-CSRF prefix before the JSON body; the client strips it transparently.

Commands

npm test               # vitest, mocked transport, no network
npm run test:watch
npm run test:coverage
npm run build          # tsc --noEmit + esbuild bundle → dist/bundle.js
npm run dev            # node dist/bundle.js (after build)

License

MIT

Available Tools

22 tools
redfin_bulk_getBulk fetch Redfin property recordsA
Read-onlyIdempotent

Fetch up to 200 Redfin property records in a single tool call. Provide an array of targets, each one of: a url (full Redfin homedetails URL or path with the /home/ segment), a property_id alone (resolved internally by following Redfin's /home/ redirect to the canonical listing), or a property_id+listing_id pair (fastest — skips resolution). Returns the same per-property record shape as redfin_get_property, but without a summary table — use redfin_compare_properties for that. Per-target errors are captured per-row; a single bad ID does not fail the batch. Server-side concurrency, ~6 in flight at a time, with retry-once-on-timeout per row to absorb transient bridge hiccups. The whole call is bounded by an overall hard deadline: a single slow/hung row never wedges the server — when the deadline is reached any unsettled row is returned with status: "pending" (retryable) and a pending count so you can re-run just those targets. Use this when you have a list of saved homes / candidate properties and need the full structured data for every one of them.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.
targetsYesArray of 1–200 properties to fetch
include_descriptionNoInclude each property's raw marketing/public-remarks description. Default false to save context — `extracted_features` always carries the structured signal.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the read-only/idempotent annotations by disclosing per-target error capture, retry-once-on-timeout behavior, ~6 concurrent requests, a hard overall deadline, and the pending-status fallback for slow or hung rows. This gives the agent an accurate model of batch failure and retry semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence contributes behavioral or routing information, and the core purpose is front-loaded. It is dense and somewhat run-on, but not bloated or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex bulk tool with no output schema, the description covers the essential runtime contract: input shapes, per-record output parity with redfin_get_property, error isolation, concurrency, timeout handling, and retry semantics. The summary-table distinction and explicit use case complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics around the targets array by explaining the three accepted target forms, the internal resolution path for property_id, and that pairing property_id with listing_id skips resolution for speed. It does not need to repeat the schema's detailed view and include_description docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Fetch up to 200 Redfin property records') and immediately differentiates itself from siblings like redfin_get_property and redfin_compare_properties by noting the same per-property record shape but no summary table. The batch aspect is explicit and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool: 'when you have a list of saved homes / candidate properties and need the full structured data for every one.' It also routes the agent away from the tool for summary tables by pointing to redfin_compare_properties, and implies single-record use belongs to redfin_get_property.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_calculate_affordabilityCalculate max affordable home priceA
Read-onlyIdempotent

Solve for the maximum home price you can afford under the standard 28/36 DTI rule. Inputs: monthly income, recurring monthly debts (car loans, student loans, etc.), down payment, interest rate, and optional property-tax rate / insurance / HOA / loan term. Output: max home price, the binding constraint (front-end vs back-end), and the full PITI breakdown at that price. Same math across the realty MCP cohort (@chrischall/realty-core). No network — pure local math.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoa_monthlyNo
back_end_dtiNoBack-end DTI cap as decimal, default 0.36
down_paymentYes
front_end_dtiNoFront-end DTI cap as decimal, default 0.28
interest_rateYesAnnual %, e.g. 6.5
monthly_debtsNoSum of monthly debt payments (car, student loans, etc.)
monthly_incomeYes
loan_term_yearsNoDefault 30, max 50
insurance_annualNo
property_tax_rateNoAnnual % of home price, default 1.1

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld=false), and the description reinforces this with 'No network — pure local math' and, importantly, describes the return structure (max price, binding constraint, PITI breakdown) that has no output schema. Adds real value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then inputs, outputs, and a local-math note; every sentence is informative. The 'Same math across the realty MCP cohort' line is marginal filler but does not derail structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description adequately covers inputs, the deterministic local behavior, and the return shape. It is complete enough to invoke correctly, missing only explicit alternative-selection guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 60% schema coverage, the description compensates by enumerating the undocumented parameters (down payment, HOA, insurance) and framing the DTI caps via the 28/36 rule. It adds meaning beyond the raw schema without fully documenting every field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Solve for the maximum home price you can afford') scoped by the 28/36 DTI rule, so the agent immediately knows what computation it performs. However, it never differentiates from the close sibling redfin_calculate_mortgage, leaving the agent to infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the input/output enumeration; there is no explicit 'use this when...' guidance nor any mention of when to prefer redfin_calculate_mortgage instead. Adequate context but no routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_calculate_mortgageCalculate mortgage payment (local)A
Read-onlyIdempotent

Local-only mortgage payment calculator. Returns a full PITI breakdown (principal + interest, property tax, insurance, HOA, PMI) and total interest over the life of the loan. No network call — fully deterministic, safe to use for scenario comparison without burning a fetch. Provide either down_payment OR down_payment_percent; defaults to 20%. Property tax can be given as property_tax_annual or property_tax_rate (% of home price). PMI applies automatically when LTV > 80% and pmi_rate is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmi_rateNoAnnual %, applied when LTV > 80%
home_priceYes
hoa_monthlyNo
down_paymentNo
interest_rateYesAnnual %, e.g. 6.5
loan_term_yearsNoDefault 30, max 50
insurance_annualNo
property_tax_rateNoAnnual % of home price
property_tax_annualNo
down_payment_percentNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description's added value is the operational detail: no network call, fully deterministic, and the conditional PMI logic (auto-applies when LTV > 80% and pmi_rate is provided). It does not describe error behavior or loan-term edge cases, but it goes meaningfully beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: what it is, what it returns, why it is safe, then the parameter rules. Every sentence carries information, though the parameter-rules block is a little packed and could be broken up for scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema and 40% schema coverage, the description covers the return structure (PITI components + total interest) and the key parameter ambiguities. Gaps are minor — permissions/edge-case behavior are irrelevant for a pure local computation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description has to compensate, and it does: it declares the down_payment/down_payment_percent mutual exclusivity, the down_payment 20% default, and the property_tax_annual vs property_tax_rate duality. It leaves hoa_monthly, insurance_annual, and loan_term_years semantics to the schema, but the ambiguous pairs are resolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('mortgage payment calculator') and immediately qualifies it as local-only and deterministic, which separates it from the network-backed siblings like redfin_calculate_affordability and redfin_get_property. The return contents (PITI + total interest) are named, so an agent knows exactly what it gets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear context for use ('safe to use for scenario comparison without burning a fetch'), which tells the agent when this tool is preferable to a network fetch. It stops short of explicitly naming the nearest alternative (redfin_calculate_affordability) or stating exclusions, so it is strong but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_compare_propertiesCompare multiple Redfin properties side-by-sideA
Read-onlyIdempotent

Fetch and compare 2 to 25 Redfin properties side-by-side. Provide an array of targets, each either a url or a property_id+listing_id pair. Returns the full per-property record (price, beds/baths, sqft, year built, HOA monthly, last sold, derived price-drop, etc.). For >25 properties or workflows that don't need side-by-side analysis use redfin_bulk_get. Pass include_summary: true for an aligned-by-field summary table (default false to save context — the per-row records carry the same data, so emitting both duplicates ~30% of the response weight). Each record's extracted_features (lake_front, hot_tub, basement, furnished, dock, community) is always included. The raw marketing description is omitted by default — opt in with include_description: true. Errors for individual properties are captured per-row with a status (ok / timeout / bridge_down / protocol / pending / other) and retryable. Server-side concurrency (~6 in flight) with retry-once-on-timeout per row; the whole call is bounded by an overall deadline, and any row still unsettled then comes back as status: "pending" (retryable) with a pending count.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.
targetsYesArray of 2–25 properties to compare. Use `redfin_bulk_get` for larger batches that don't need side-by-side analysis.
include_summaryNoInclude the aligned-by-field `summary` table. Default false — the per-row records carry the same data, so emitting both duplicates ~30% of the response weight. (#37)
include_descriptionNoInclude each property's raw marketing/public-remarks description. Default false to save context — `extracted_features` always carries the structured signal.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral context beyond that: per-row error statuses (ok/timeout/bridge_down/protocol/pending/other), retryability, server-side concurrency, overall deadline, and the pending fallback. It also discloses response-size tradeoffs (summary duplication) and default omissions. This is exemplary transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than minimal, but every sentence carries operational information: purpose, target forms, response fields, sibling routing, parameter trade-offs, error handling, and concurrency behavior. It is dense and front-loaded, though it could be tightened with structural formatting. Appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, varied target forms, per-row error handling, no output schema), the description covers everything an agent needs: accepted inputs, response contents, error semantics, scaling behavior, and alternatives. There are no obvious gaps that would cause incorrect invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds genuine semantic value by clarifying that each target is either a url or a property_id+listing_id pair, and by noting that extracted_features is always included regardless of other parameters. This goes beyond the schema's field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb-resource-scope statement ('Fetch and compare 2 to 25 Redfin properties side-by-side') that clearly distinguishes it from redfin_bulk_get and other Redfin tools. It conveys the exact operation and constraints without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when NOT to use the tool ('For >25 properties or workflows that don't need side-by-side analysis use redfin_bulk_get') and gives parameter-level usage advice (include_summary default false to save context, include_description opt-in). This leaves no doubt about selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_area_climate_baselineSample climate baseline for an area by pulling a few addressesA
Read-onlyIdempotent

Fetch climate risk for a small set of representative URLs in an area, then return their averaged baseline values plus the shared cluster_id when present. Use this as a cheap area-level read BEFORE fanning out a per-property call: if all sample properties agree (same cluster_id, same fire/flood/heat factors), the baseline applies to the whole cluster and N redundant fetches are avoidable. Pass 2–10 URLs you believe represent the area; returns the aggregate plus the per-URL responses for transparency. Server-side concurrency (~5 fetches in flight) with retry-once-on-timeout per URL; the whole call is bounded by an overall deadline, and any sample still unsettled then comes back as status: "pending" (retryable) with a pending count and is left out of the averages. Limitations of the per-property tool apply (no landslide coverage — note documented in the per-property tool description).

ParametersJSON Schema
NameRequiredDescriptionDefault
sample_urlsYesArray of 2–10 sample Redfin URLs representative of the area.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent/openWorld annotations: server-side concurrency (~5 fetches in flight), retry-once-on-timeout per URL, an overall deadline after which unsettled samples return status "pending" with a pending count and are excluded from averages, and inherited per-property limitations (no landslide coverage). This is exactly the operational context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and the routing rationale, and packs retry/deadline/pending semantics tightly. It is a dense single paragraph, and the closing limitations pointer to another tool's description is slightly indirect, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description enumerates the return shape (aggregate baseline values, shared cluster_id, per-URL responses for transparency, pending status/count) and the failure mode, so nothing needed to call or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already documented, so the baseline is 3. The description adds genuine meaning beyond the schema: the URLs must be representative of the area, and the count rationale (enough samples to establish cluster agreement).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource (fetch climate risk for a set of representative URLs, return averaged baseline plus cluster_id) and immediately frames it as an area-level read distinct from per-property calls. An agent can tell it apart from redfin_get_climate_risk, redfin_get_climate_risk_bulk, and redfin_get_property from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (a cheap area-level read BEFORE fanning out per-property calls), the decisive condition (if all sample properties share cluster_id and fire/flood/heat factors, the baseline applies to the whole cluster and redundant fetches are avoidable), and the input guidance (pass 2–10 URLs you believe represent the area). No alternatives are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_by_addressResolve an address to its Redfin canonical URL + home_idA
Read-onlyIdempotent

Resolve a free-text address (with optional city/state/zip) to its Redfin canonical home URL and home_id. Walks a 3-rung ladder: (1) autocomplete as-typed, (2) autocomplete with suffix expansion (Rd ↔ Road, Ln ↔ Lane, etc.), (3) search fallback (#75) — when autocomplete misses entirely and city/state are provided, resolves the locality to a region, fires a bounded gis search, and fuzzy-matches the input street tokens against returned homes. matched_via is 'autocomplete' or 'search_fallback'. A miss on every rung returns resolved: false (with the attempts tried) rather than an error; a signed-out session, bridge failure or region mismatch is still reported as an error. Address discrepancies across MLS feeds are common (the 109 vs 169 Overlook Point Ln cross-MLS case is a regular occurrence) — redfin_get_property on the resolved URL surfaces them as address_alternates[] (#42). Use this when you have a property address and need its Redfin home_id for follow-on calls (e.g. redfin_get_property). Read-only, no auth required.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNoZIP code (e.g. "28746").
cityNoCity name (e.g. "Lake Lure").
stateNoTwo-letter state code (e.g. "NC").
addressYesStreet address (e.g. "158 Raven Blvd").

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnlyHint/idempotentHint/openWorldHint annotations: it discloses the 3-rung resolution ladder, the matched_via discriminator, that a total miss returns resolved:false with attempts rather than throwing, and that signed-out sessions, bridge failure or region mismatch DO surface as errors. That error-vs-empty-result boundary is the most decision-relevant behavior for an agent and is not in any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the ladder, and most clauses carry real information. Some internal issue references (#75, #42) and the parenthetical cross-MLS anecdote add length without much selection value, costing a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still names the returned fields (matched_via, resolved, attempts) and the error conditions, and it ties the result to the next call in the chain. Nothing needed to invoke or interpret this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds genuine meaning: address is free-text and city/state/zip are optional, plus the non-obvious dependency that city/state are what enable rung 3's locality-to-region search fallback. That conditional relevance is beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (free-text address → Redfin canonical URL + home_id), and goes further by naming the exact follow-on sibling (redfin_get_property) and the cross-MLS discrepancy case it feeds. An agent can distinguish it from redfin_resolve_addresses / redfin_bulk_get by the single-address scope stated in the name and text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger: 'Use this when you have a property address and need its Redfin home_id for follow-on calls (e.g. redfin_get_property).' It also implies when the fallback rung applies (city/state provided). It never states when NOT to use it, notably against the very similar sibling redfin_resolve_addresses, which is the one real routing gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_climate_riskGet Redfin climate risk for a propertyA
Read-onlyIdempotent

First Street Foundation climate risk scores for a property. COVERS: flood (factor 1–10, FEMA zones, 30-year annual chance series), fire (factor 1–10, relative risk, insurance price band, provider count), heat (factor 1–10, cumulative-risk projections at 0/5/10/15/20-year horizons). DOES NOT COVER: landslide. This is the Helene-relevant risk vector in the NC mountains market and many parts of California / the Pacific Northwest. First Street has no landslide product — for that vector check the NC Geological Survey landslide hazard maps (NC-specific) or USGS landslide hazard data (national). Surfaced on every response as not_covered: ['landslide']. Response shape: when First Street data is available, available: true with the risk blocks; when not, { available: false, reason } where reason is one of no_first_street_data, new_construction, address_outside_coverage. Sourced from Redfin's server-rendered homedetails HTML (no clean stingray endpoint exists). Pass a homedetails URL (full or path) — it must end in a /home/<propertyId> segment; any other page is rejected without being fetched. When a cluster_id is surfaced, properties with the same value typically share identical climate scores — use that to group N properties and skip redundant fetches.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesRedfin homedetails URL or path (e.g. /NY/Brooklyn/42-Monroe-St-11238/home/40732555)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, but the description adds substantial behavior beyond them: the data source (server-rendered homedetails HTML, no clean endpoint), URL validation that rejects non-/home/<id> pages without fetching, the surfaced not_covered field, and the available:true/false response branches with enumerated reason values (no_first_street_data, new_construction, address_outside_coverage).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with the core purpose, and the COVERS/DOES NOT COVER and 'Response shape' labels make it scannable. It is dense and the NCGS/USGS landslide detour plus cluster_id note push length for a one-parameter tool, though both still serve routing/dedup decisions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden and does so: it documents the response shape, success and failure branches with reason enums, the not_covered field, and the sourcing. An agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), and the description adds real value beyond the schema's example: the URL must end in a /home/<propertyId> segment, accepts full or path form, and other pages are rejected without being fetched. That constraint meaningfully clarifies how to construct the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('First Street Foundation climate risk scores for a property') and then enumerates exactly which vectors are returned (flood, fire, heat) with their scoring scales. The COVERS/DOES NOT COVER framing makes the scope of the tool unambiguous, including the explicit landslide exclusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear applicability context (property-level, Helene-relevant NC mountains/California/Pacific Northwest markets) and practical dedup guidance via cluster_id. It does not, however, explicitly route the agent to the natural alternatives redfin_get_climate_risk_bulk or redfin_get_area_climate_baseline, so the when-to-use-vs-sibling condition is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_climate_risk_bulkBulk-fetch Redfin climate risk for many propertiesA
Read-onlyIdempotent

Fetch climate risk for up to 100 property URLs in a single call. Same per-property shape as redfin_get_climate_risk; output preserves input order. Per-row error capture — properties without First Street data return { available: false, reason } without aborting the batch. Server-side concurrency (~5 fetches in flight) with retry-once-on-timeout per URL. The whole call is bounded by an overall deadline: any URL still unsettled then comes back as status: "pending" (retryable) with a pending count, so re-run just those. Use this when batching ~60-property workflows where climate risk is the dominant cost. Limitations from the per-property tool apply (no landslide coverage).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesArray of 1–100 Redfin homedetails URLs or paths.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly/idempotent/open-world; the description goes well beyond that by disclosing per-row error capture with `available:false`, server-side concurrency (~5) and retry-once-on-timeout, and the overall deadline with `pending` rows returned retryably. This is exactly the operational behavior an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense but every sentence contributes: scope, output shape, error handling, concurrency/retry, deadline/pending behavior, use-case, and inherited limitations. It front-loads the core action and then layers operational detail logically.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description substitutes by describing the per-property shape, failure representation, timeout/pending behavior, and counting information. Combined with annotations and the single parameter schema, an agent has what it needs to invoke and interpret the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description mainly reinforces 'property URLs' and the 100-item ceiling but adds no new parameter format detail beyond the schema; however it does explain that output preserves input order, which is behavior rather than parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete action ('Fetch climate risk'), a limit ('up to 100 property URLs'), and explicitly ties the output shape to `redfin_get_climate_risk`, distinguishing it from the single-property sibling. It also promises input-order preservation and per-row error handling, which clarify what the bulk variant does differently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the intended workload directly: 'Use this when batching ~60-property workflows where climate risk is the dominant cost.' It references the per-property sibling and notes shared limitations, giving clear context. It doesn't spell out an explicit 'don't use for a single property' exclusion, so slightly below the top bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_comparable_rentalsGet comparable rentals near a Redfin propertyA
Read-onlyIdempotent

Find nearby rental comparables for a given property: nearby active rental listings with similar bed/bath/sqft, including monthly rent, distance, and the Redfin URL. Useful for estimating what a property could rent for, or for finding rentals near a home you're considering. Inputs are the rent estimate range + lat/lng + propertyId. redfin_get_property supplies property_id, latitude and longitude, but it does not return a rent estimate — take the range from the Redfin property page's rental estimate or another source (e.g. a Zillow rent Zestimate), or pass a deliberately wide range around a known rent. The range is sent to Redfin as a filter, so a wrong or invented range narrows the comps; low must not exceed high.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYesProperty latitude (from redfin_get_property).
longitudeYesProperty longitude (from redfin_get_property).
property_idYes
rent_estimate_lowYesLower bound of the rent estimate. Use the same value for low+high if you only have one estimate.
rent_estimate_highYesUpper bound of the rent estimate.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description nonetheless adds a genuine behavioral gotcha: the rent range is transmitted to Redfin as a server-side filter, so a wrong or invented range silently narrows the comps, and low must not exceed high. It stops short of describing pagination, result limits, or rate limits, so it falls one step short of full.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by use cases and then input requirements. Roughly five sentences, nearly all load-bearing; the alternatives list (property page / Zillow / wide range) is slightly dense but still earns its place by preventing a failed lookup.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description steps in and specifies the return payload (monthly rent, distance, Redfin URL). Combined with the input-sourcing guidance and the filter caveat, an agent has everything needed to call this correctly on the first attempt. Nothing material is missing for a read-only lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, which sets a baseline of 3, but the description adds real value: it groups the inputs (rent estimate range + lat/lng + propertyId) and, crucially, documents property_id's provenance since the schema leaves that property undescribed. The low<=high validation rule is also repeated here as intent rather than just a constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find nearby rental comparables') and immediately differentiates the result from generic property lookups by listing the returned fields: active rental listings with similar bed/bath/sqft, monthly rent, distance, and Redfin URL. An agent can distinguish this from redfin_get_property and redfin_search_properties without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete use cases (estimating achievable rent, finding rentals near a home under consideration) and explicitly routes the agent when it lacks an input: it names redfin_get_property as the source of property_id/latitude/longitude but warns it does NOT return a rent estimate, then offers alternatives (property page rental estimate, Zillow Zestimate, or a deliberately wide range). This is explicit when-to-use and how-to-source guidance, not inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_market_reportGet Redfin market report for a regionA
Read-onlyIdempotent

Market report for a Redfin region: median list/sold prices, $/sqft, sale-to-list ratio, total homes for sale + sold, all with year-over-year and month-over-month change. Provide either (a) location — free-text we resolve via autocomplete (best with city names; "New York", "Seattle"; neighborhoods typically return empty data), or (b) region_id + region_type directly. property_type defaults to 1 (all). Each metric returns { label, value, unit, yoy_change_fraction, yoy_direction, mom_change_fraction, mom_direction }. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationNoFree-text location to autocomplete (alternative to region_id+region_type)
region_idNoRedfin region id (e.g. 30749 for New York City)
region_typeNoRedfin region type code (6 = city, 2 = ZIP code, 1 = neighborhood, 5 = county)
property_typeNoProperty type filter, default 1 (all)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so 'Read-only; safe to call repeatedly' largely restates them. What adds real value is the disclosure of the autocomplete resolution behavior, the neighborhood-empty-data edge case, and the per-metric return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the report contains, then input modes, then return shape, then safety. Dense but organized; a couple of long compound sentences carry several ideas but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the return-value burden by specifying the per-metric `{ label, value, unit, yoy_change_fraction, ... }` structure. Combined with the input-mode guidance and edge-case warning, an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description adds genuine meaning: the location-vs-region_id/region_type choice, the autocomplete resolution path, the neighborhood caveat, and the property_type default. This goes beyond the terse schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('market report for a Redfin region') and enumerates the exact metrics returned (median list/sold prices, $/sqft, sale-to-list ratio, homes for sale/sold) with yoy/mom framing. This clearly sets it apart from siblings like redfin_get_price_history or redfin_search_properties.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit invocation guidance: provide either `location` (free-text via autocomplete) or `region_id`+`region_type`, and warns that neighborhoods typically return empty data. However, it never names alternative sibling tools or when NOT to use this one, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_price_historyGet Redfin price history for a propertyA
Read-onlyIdempotent

Listing-price events for a property — listings, price changes, pending, sold, etc. Each entry has a date, event description, price, days-on-market at that point, and the data-source attribution (MLS, county records, etc.). Also returns the tax-history series from public records. Provide either url or property_id+listing_id. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRedfin homedetails URL or path
listing_idNo
property_idNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and open-world hints. The description adds valuable behavioral context by detailing the returned entry fields, data-source attribution, tax-history inclusion, and the either-or identifier requirement. Restating 'read-only; safe to call repeatedly' is redundant but harmless.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is mostly efficient and front-loaded with the core purpose and returned contents. The final 'Read-only; safe to call repeatedly' repeats annotation hints, adding slight redundancy, but the overall length is reasonable and each other sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, 3-parameter tool with no output schema, the description explains both the main return contents and the valid input modes. Minor gaps remain around what happens if both url and IDs are supplied, and how to obtain the identifiers, but the agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, with just the url parameter described. The description compensates by specifying the critical relationship: provide either url or the property_id+listing_id pair. It does not deeply define each ID's origin or format, but the names are self-explanatory and the grouping rule is materially useful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as listing-price events for a single property and enumerates event types (listings, price changes, pending, sold). It also mentions the tax-history series, distinguishing this tool from property-details, market-report, and climate-risk siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool — when you need listing-level price events or tax history for one property. However, it does not explicitly contrast it with siblings like redfin_get_property or redfin_get_market_report, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_propertyGet Redfin property detailsA
Read-onlyIdempotent

Fetch a property's full Redfin record. Provide one of: (a) url — full Redfin homedetails URL or path, resolved via the initialInfo endpoint; (b) property_id alone — resolved internally by following Redfin's /home/ redirect to the canonical listing, then initialInfo; or (c) property_id + listing_id — fastest, skips resolution and goes straight to aboveTheFold. Returns address, beds/baths, sqft, lot_size (sq ft), year built, price, status, days on market, plus derived fields (lot_size_acres, price_drop_*, hoa_monthly_usd, last_sold_*, tax_annual, extracted_features). lot_size / lot_size_acres are null (never 0) for condos and listings with no public-records lot. primary_photo_url is a raw Redfin CDN URL and is dropped on the default compact view — pass view: "full" for it, or use redfin_get_property_photos for the whole gallery. The raw marketing description is OMITTED by default — opt in with include_description: true. Set include_price_history: true to bundle the full price history (and the cross-MCP-normalized events_normalized view) inline; set include_tax_history: true for tax_history. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRedfin homedetails URL or path (e.g. /NY/Brooklyn/42-Monroe-St-11238/home/40732555)
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.
listing_idNoNumeric Redfin listing ID. Optional; pairs with property_id to skip resolution.
property_idNoNumeric Redfin property ID. Sufficient on its own — when no listing_id/url is given it is resolved internally via the /home/<id> redirect. Pair with listing_id to skip that resolve step entirely.
include_descriptionNoInclude the raw marketing/public-remarks description string in the response. Default false to save context — `extracted_features` always carries the structured signal callers actually need.
include_tax_historyNoBundle the full tax history inline as `tax_history`. Default false. (#49)
include_price_historyNoBundle the full price history inline as `price_history` + `events_normalized`. Default false. Saves a follow-up redfin_get_price_history round trip — use this when a workflow needs both. (#49)

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses concrete data-shape behavior: lot_size null for condos never 0, primary_photo_url dropped on compact view, raw marketing description omitted by default, and derived-field additions (events_normalized for price history). It also explicitly confirms read-only safety, reinforcing the annotations without contradicting them. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though the description is long, every sentence carries actionable detail — resolution mechanics, output fields, edge cases, and opt-in flags. It is front-loaded with the core purpose and input routes, and the subsequent clauses each add a distinct behavioral fact. No filler, no restatement of the title, and no redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must specify the return shape itself, and it does: it enumerates address, beds/baths, sqft, lot_size, year built, price, status, days on market, and a set of derived fields, plus the exact null behavior for condos. It also covers conditional output (photo drop, description omission) and how to enable them. Given the 7 optional parameters and multiple resolution modes, this is as complete as needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description goes well beyond the schema by explaining each parameter's behavioral purpose: url resolution via initialInfo, property_id's internal redirect, pairing listing_id to skip resolution, and the context-saving rationale for include_description. This adds operational meaning the schema's enum/value descriptions do not convey, such as 'fastest' and 'skips resolution'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair — 'Fetch a property's full Redfin record' — and immediately enumerates the three possible input routes (url, property_id alone, property_id+listing_id), each with a distinct resolution path. It clearly delineates this tool from siblings like redfin_get_property_photos and redfin_get_price_history by pointing to those as alternatives for photo galleries and price history, so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: the three call patterns are contrasted by speed ('fastest, skips resolution'), and each optional flag (include_description, include_tax_history, include_price_history) names the exact scenario that warrants it ('use this when a workflow needs both'). It also points to redfin_get_property_photos as the alternative when a photo gallery is required, making the routing decision fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_property_photosGet Redfin property photo galleryA
Read-onlyIdempotent

The full photo gallery for a Redfin property — every image in mediaBrowserInfo. Each entry returns CDN URLs at multiple sizes (fullscreen, large, medium, lightbox) plus a thumbnail and the photo's caption when set. Provide either url (full Redfin homedetails URL or path; we resolve to IDs via initialInfo) or property_id + listing_id (skip the resolve step). Returns { property_id, listing_id, count, photos }. Off-market or stub listings may return count=0. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRedfin homedetails URL or path (e.g. /NY/Brooklyn/42-Monroe-St-11238/home/40732555)
listing_idNoNumeric Redfin listing ID. Required when property_id is provided.
property_idNoNumeric Redfin property ID. Pair with listing_id to skip the URL resolve step.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description reinforces these with 'Read-only; safe to call repeatedly.' It also adds behavioral details beyond annotations, such as the URL resolution via initialInfo, the return structure, and the edge case of count=0 for off-market listings. This provides a clear picture of what happens during the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant words. It front-loads the core purpose ('The full photo gallery') and then provides necessary details about output format, input options, and edge cases. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only photo retrieval tool with no output schema, the description covers everything an agent needs: the exact return shape ({ property_id, listing_id, count, photos }), the contents of each photo entry, the two input methods, and a potential edge case (count=0). No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already documents each parameter (100% coverage), the description adds significant semantic value by explaining the two mutually exclusive input groups (url OR property_id+listing_id) and that the latter skips the resolve step. This clarifies the relationship between parameters and helps the agent choose the correct combination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: it retrieves the full photo gallery for a Redfin property, including every image in mediaBrowserInfo, with CDN URLs at multiple sizes, a thumbnail, and captions. This is a specific verb+resource that clearly distinguishes it from sibling tools like redfin_get_price_history or redfin_get_climate_risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on the two invocation modes (url vs property_id+listing_id) and includes a caveat about off-market or stub listings returning count=0. It does not explicitly name alternatives or state when not to use this tool, but the purpose is unambiguous enough that an agent knows to use it for photo retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_saved_homesGet my saved (favorited) Redfin homesA
Read-onlyIdempotent

The signed-in user's favorited homes on redfin.com. Returns { count, homes } — each home has address, price, beds/baths, status — plus a note when none were found (no favorites vs. a page-scrape miss). Requires the user to be signed in. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the bar is lower. The description still adds real value: the sign-in requirement, the return envelope `{ count, homes }`, and an honest caveat that a missing `note` can mean either no favorites or a page-scrape miss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the resource and return shape, then the auth prerequisite, then the safety profile. Nothing is redundant with the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the return envelope and its edge-case `note`. Auth requirement, safety, and return shape are all covered, so an agent has what it needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enum's compact/full tradeoff is fully documented in the schema itself. The description never mentions the `view` parameter, so it adds nothing beyond structured data; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (the signed-in user's favorited homes on redfin.com), which is clearly distinct from the sibling redfin_get_saved_searches. It is not framed as a verb+resource action and names no sibling explicitly, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the key prerequisite ("Requires the user to be signed in") and a safety note ("safe to call repeatedly"), but never says when to prefer this over redfin_get_saved_searches or redfin_search_properties, nor any when-not condition. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_saved_searchesGet my saved Redfin searchesA
Read-onlyIdempotent

The signed-in user's saved searches on redfin.com, derived from the saved-searches page HTML. Returns { count, searches }; each entry is { url, region_segment, display_text }. Requires the user to be signed in. When none are found, searches is empty and a note explains it may be no saved searches or a page-scrape miss. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint, idempotentHint and openWorldHint, the description adds genuinely non-derivable context: the data comes from scraping page HTML, so an empty `searches` plus a `note` may mean a scrape miss rather than truly no saved searches. It also states the sign-in requirement and the return contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with what the tool returns and the auth prerequisite. Every sentence carries information; only the trailing "Read-only; safe to call repeatedly" is partly redundant with the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return contract itself (`{ count, searches }` with per-entry `{ url, region_segment, display_text }`) plus the empty-result caveat and auth requirement. An agent has everything needed to call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single `view` enum is documented in exhaustive detail in the schema itself. The description adds nothing about parameter behavior, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and scope: "The signed-in user's saved searches on redfin.com". The qualifier "saved searches" cleanly distinguishes it from the sibling redfin_get_saved_homes, and the note that data is derived from the saved-searches page HTML pins down exactly what is being fetched.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the description tells the agent it "Requires the user to be signed in" and is idempotent, which frames when it is callable, but it never names an alternative (e.g. redfin_get_saved_homes) or explicitly contrasts the two. No when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_get_session_contextList all registered Redfin sessionsA
Read-onlyIdempotent

List every registered account label plus the current active_session_id. When none are registered, sessions is empty and active_session_id is null. The registry is a label only: it does not change which Redfin account requests use. Every redfin tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/openWorld, and the description adds substantial non-obvious behavior: the registry is label-only and does not change which account requests use, and every call routes through whichever browser tab the extension is signed into. This is exactly the kind of gotcha an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then adds the empty/null edge case and the label-only caveat. Four sentences all carry information, though the browser-tab explanation is slightly wordy for what it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description steps in to document return fields (sessions empty, active_session_id null) and the key semantic caveat about what the registry does not control. Nothing needed to call or interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric this is a baseline 4. The description correctly presents it as a parameterless list operation with nothing extra to specify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List every registered account label plus the current active_session_id'. It also distinguishes itself from the write-oriented siblings (register/set_active_session) by clarifying the registry is 'a label only'. An agent can identify the tool's scope without opening anything else.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context that this reads labels and does not affect which account requests use, plus the corrective action ('sign that tab into it'). It effectively routes away from assuming this tool changes account, but never names the sibling tools (e.g. redfin_set_active_session) that actually change state, so the alternative selection is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_healthcheckVerify the ContextMint Bridge connection end-to-endA
Read-onlyIdempotent

Round-trips a small public www.redfin.com URL (/robots.txt) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real www.redfin.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover readOnly/openWorld/idempotent, and the description adds substantial context beyond them: it discloses the probe target, the exact diagnostic fields returned, the failure-mode classes it distinguishes, and that no auth is required. This is rich disclosure for a tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the action and probe target lead, the returned fields and failure-mode hints follow, and the invocation condition closes. Every clause carries diagnostic information, though the long enumeration of returned fields is slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so by enumerating the fields (role, port, version, extension link, elapsed time, hint) and the distinctions between failure modes. Nothing an agent needs to interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing to disambiguate; the description correctly implies no inputs are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (round-trips a URL through ContextMint Bridge) plus the exact resource (/robots.txt) and the diagnostic nature of the result. It is unmistakably distinct from every sibling, which are all real Redfin data/session tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this when a real tool fails and you want to know which hop broke,' giving the agent a concrete trigger condition relative to the real tools. No alternatives needed because its role as a fallback diagnostic is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_register_sessionRegister a signed-in Redfin sessionA
Idempotent

Record (or refresh) which Redfin account the signed-in session belongs to, keyed by account_identity. Re-registering the same identity updates the existing entry. Returns a session_id; pass mark_active: true to mark it as the current account in the same call. The registry is a label only: it does not change which Redfin account requests use. Every redfin tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

ParametersJSON Schema
NameRequiredDescriptionDefault
mark_activeNoWhen true, immediately make the newly-registered session the active one.
auth_expires_atNoOptional ISO timestamp at which the session expires.
account_identityYesCaller-supplied identifier for the signed-in account (typically the saved-account email).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/idempotent/non-destructive. The description adds substantial, non-obvious behavior: re-registration updates rather than duplicates, it returns a session_id, mark_active acts in the same call, and critically the registry is inert — it does not redirect which account requests use because calls follow whichever tab the ContextMint Bridge extension is signed into. That is exactly the kind of context an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then layered with the two clarifications that actually matter (label-only semantics, tab-based auth). It is dense but every sentence earns its place; only the closing sentence is slightly sprawling relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description still names the return value (session_id). For a mutation tool whose safety profile is covered by annotations, it covers the behavioral and authentication model fully enough for an agent to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so account_identity, mark_active, and auth_expires_at are already fully documented in the schema. The description restates mark_active ('mark it as the current account in the same call') and mentions the session_id return, adding only marginal meaning over the structured fields. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Record (or refresh) which Redfin account the signed-in session belongs to, keyed by account_identity.' It further distinguishes itself from the sibling redfin_set_active_session by explaining that the registry is 'a label only' and does not change which account requests use, so an agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: re-registering the same identity updates the existing entry, mark_active marks it current in the same call, and it explicitly warns that to read a different account you must sign the browser tab in. This is strong when-to-use guidance, but it never names the obvious alternative (redfin_set_active_session) or states when-not to use this tool, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_resolve_addressesBulk-resolve street addresses to Redfin URLs + home_idsA
Read-onlyIdempotent

Resolve up to 100 free-text street addresses to Redfin canonical home URLs + home_ids in a single tool call. Each input is either a string (full address) or a structured {street, city, state, zip} object. Output preserves input order. Unresolved entries return resolved: false without aborting the batch; a transient bridge failure surfaces a distinct retryable status (timeout/bridge_down/pending) so it is never mistaken for a genuine no-match. Per-row retry-once-on-timeout, server-side concurrency ~6 in flight. The whole call is bounded by an overall hard deadline: a single slow/hung row never wedges the server — unsettled rows come back with status: "pending" and a pending count so you can re-run just those. Use this when you have a list of properties from another system (Compass, MLS, spreadsheet) and need their Redfin handles for follow-on calls — collapses the typical 6-search-call + 15-resolve flow into one trip.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.
addressesYesArray of 1–100 addresses to resolve, each a string or a {street, city, state, zip} object.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the bar is lower — yet the description still adds substantial behavioral context: input-order preservation, per-row no-match (`resolved: false`) vs. distinct retryable statuses (timeout/bridge_down/pending), retry-once-on-timeout, ~6 in-flight concurrency, and a hard overall deadline with re-runnable `pending` rows. This is exactly the kind of failure/semantics disclosure agents need and no annotation covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though long, every sentence earns its place: purpose → input forms → ordering → no-match vs. retryable failure → retry/concurrency → deadline behavior → usage scenario. It is front-loaded with the core action and flows logically with zero filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description carries full burden for return semantics — and it delivers: input-order preservation, resolved vs. unresolved vs. transient statuses, pending re-run guidance, batch limits, retry behavior, and the motivating use case. For a complex batch tool this is remarkably complete; nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both `addresses` and `view` carry rich descriptions (including the compact/full distinction and the anyOf string/object shape). The tool description restates the input forms but adds little beyond the schema; the error-semantics detail it provides is output behavior, not parameter meaning. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Resolve up to 100 free-text street addresses to Redfin canonical home URLs + home_ids in a single tool call.' The batch scope (up to 100) and the URL+home_id output clearly distinguish this from single-address siblings like redfin_get_by_address, and the title reinforces the same purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Ends with an explicit when-to-use clause: 'Use this when you have a list of properties from another system (Compass, MLS, spreadsheet) and need their Redfin handles for follow-on calls.' It also frames the value proposition by contrasting with the 'typical 6-search-call + 15-resolve flow.' However, it does not name a specific alternative sibling for the single-address case or state any when-not-to-use conditions, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_search_propertiesSearch Redfin listingsA
Read-onlyIdempotent

Search Redfin listings by location (city, ZIP, neighborhood, or full street address) and optional filters. Resolves the location via Redfin's autocomplete then queries the gis API; full street addresses short-circuit to the single matched home (no gis call). Returns matching properties with price, beds/baths, sqft, year built, address, and the Redfin home URL. resolved_as is 'region' / 'address'. coverage is 'full' (gis indexed this region), 'profile_only' (Redfin has profiles for individual addresses here but search isn't indexed — use redfin_get_by_address per property), or 'none'. result_cap_hit: true signals the result page is full — gis returned as many rows as requested (limit, default 40, max 350) — so more listings likely exist; raise limit or narrow with price/beds filters. ZIP queries that fall into Redfin's cross-continent fallback (e.g. ZIP 28746 returning Seattle results) now error loudly. Only for_sale status is supported; sold / for_rent return an error (use redfin_get_comparable_rentals for rentals, redfin_get_market_report for sold-price trends). Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax listings to return (default 40; values above 350, the gis hard cap, are clamped to 350).
boundsNoOptional lat/lng box: search this drawn-map area instead of the resolved region (works inside big cities where ZIP/neighborhood regions fall back). `location` is then only a label.
statusNoListing status. Only for_sale is supported; sold and for_rent return an error rather than for-sale results.
beds_minNo
locationYesFree-text location: city, ZIP, neighborhood, or address (e.g. "Brooklyn, NY", "94110", "Park Slope")
baths_minNo
price_maxNo
price_minNo
home_typesNoRestrict to one or more property types.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly, idempotent, openWorld), and the description adds substantial behavior beyond them: coverage codes and their meaning, result_cap_hit semantics, limit clamping, and the loud error on ZIP cross-continent fallback. This is rich operational context not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and each sentence carries operational value (coverage, cap, fallback, status). It is dense and long, but the density is justified; only mild trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, yet the description enumerates returned fields (price, beds/baths, sqft, year built, address, URL) and decodes resolved_as/coverage/result_cap_hit. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 56%, and the description compensates for the key params — limit default/max behavior, bounds overriding the resolved region, status enum restriction, and accepted location formats. Beds/baths/price/home_types are left as 'optional filters' without added meaning, a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Search Redfin listings by location...and optional filters') with explicit scope, and it distinguishes itself from siblings by naming redfin_get_by_address, redfin_get_comparable_rentals, and redfin_get_market_report. The agent knows exactly what this does versus the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use for bounds (drawn-map area in big cities), for address short-circuit, for profile_only coverage (use per-property lookup), and for status restrictions (rentals/sold routed to named siblings). Conditions that select alternatives are stated directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_set_active_sessionSet the active Redfin sessionA
Idempotent

Mark a previously registered session_id as the current account label, for your own bookkeeping across a conversation. The registry is a label only: it does not change which Redfin account requests use. Every redfin tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession id to make active.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses a genuinely non-obvious behavioral fact that annotations cannot convey: the registry is a label only and does not change which Redfin account requests use, with the real switch being the signed-in browser tab. This prevents a costly misconception about auth state. It is consistent with readOnlyHint=false and idempotentHint=true, and adds context beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, the label-only caveat second, the account-switching workaround last. Every sentence carries information an agent needs; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state setter with no output schema and simple annotations, the description covers purpose, the important no-op caveat about account routing, and the alternative path. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning by qualifying the session_id as 'previously registered', telling the agent the id must originate from the registration flow. No format or syntax detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mark a previously registered session_id as the current account label') and immediately scopes it as bookkeeping-only. An agent can distinguish this from the sibling redfin_register_session, which creates the session this tool merely marks active.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear condition for use ('previously registered session_id', 'across a conversation') and a corrective path for the adjacent need ('to read a different account, sign that tab into it'). It does not explicitly name redfin_get_session_context or redfin_register_session as alternatives, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redfin_sweep_areaExhaustively sweep a Redfin map areaA
Idempotent

Enumerate EVERY for-sale Redfin listing inside a bounding box without silent truncation. Redfin's gis API returns at most 350 homes per call and ignores server-side filters, so this tool searches drawn-map polygons, recursively quarters any tile that hits the cap, dedupes by property_id and re-applies the caller's filters locally. Homes outside the box and tiles where Redfin drifted to another region are left out. Alternatively pass zips (ZIP mode) to sweep a list of ZIP regions instead of map tiles, when Redfin ignores drawn-map polygons. Returns a completeness summary (requests, tiles or ZIPs, unique listings, tiles/ZIPs still at the cap, drift warnings) plus the listings inline by default; pass the optional output_path to write them to a new JSON file instead, for large areas (inside the output directory: REDFIN_OUTPUT_DIR, default ~/Downloads/redfin-mcp). Sequential requests with a delay. Read-only against Redfin; the only write is the optional local output file.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipsNoZIP mode: sweep these ZIP regions instead of map tiles (fallback when Redfin ignores drawn-map polygons). Each ZIP is checked by the homes' own ZIPs; a ZIP that returns the 350-home cap is reported as capped.
boundsNoBox to sweep (lat/lng). Required unless `zips` is given.
beds_minNo
delay_msNoPause between requests (default 1200).
locationNoOptional city (e.g. "San Jose, CA") whose region lets the polygon probe try region-pinned request shapes.
baths_minNo
max_depthNoMax quarterings per tile (default 6).
price_maxNo
price_minNo
home_typesNo
output_pathNoOptional NEW .json file to write the full results (and per-tile counts) to: a file name (e.g. "san-jose.json") written into the output directory (REDFIN_OUTPUT_DIR, default ~/Downloads/redfin-mcp), or an absolute path inside it. Paths outside that directory are refused, and an existing file is never overwritten. Omit to get the results inline; use a file for large areas so the listings stay out of the conversation.
max_requestsNoHard request budget (default 120).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the coarse safety profile; the description adds substantial behavioral context beyond them: the 350-home server cap, recursive quartering, property_id dedup, local filter re-application, drift exclusion, sequential requests with a delay, and the completeness summary returned. Crucially it explains why readOnlyHint=false despite being read-only against Redfin (the only write is the local output file), which reconciles the annotation rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence front-loads the core purpose and scope, and the following sentences each add distinct operational detail (cap, recursion, dedup, drift, output handling, request pacing). It is dense but nearly every clause earns its place for a tool this complex; only mild tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, nested-object tool with no output schema, the description covers the essentials: what is returned (completeness summary plus listings, inline or to a file), the safety/write profile, rate-limit pacing, and path-sandboxing rules. An agent has enough to invoke it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 58%, so the schema does part of the work. The description adds real meaning for `zips` (ZIP mode alternative to bounds) and `output_path` (directory constraint, no-overwrite), but says nothing about beds_min, baths_min, price_min/max, or home_types, leaving those filters undocumented in both places. The baseline of 3 for partial coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (enumerate/sweep) and resource (every for-sale Redfin listing in a bounding box), plus the defining constraint: exhaustive, no silent truncation. This clearly distinguishes it from sibling tools like redfin_search_properties (a normal search) or redfin_get_property (single home), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit internal guidance: use `zips` (ZIP mode) when Redfin ignores drawn-map polygons, and use `output_path` for large areas to keep listings out of the conversation. It does not, however, explicitly compare against sibling tools such as redfin_search_properties for lighter queries, so routing across the toolset still requires some inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.2.5
    • Changedredfin_get_comparable_rentals6 fields changed
      • addedInput schema / properties / latitude / description
        Added value: +"Property latitude (from redfin_get_property)."
      • addedInput schema / properties / latitude / maximum
        Added value: +90
      • addedInput schema / properties / latitude / minimum
        Added value: +-90
      • addedInput schema / properties / longitude / description
        Added value: +"Property longitude (from redfin_get_property)."
      • addedInput schema / properties / longitude / maximum
        Added value: +180
      • addedInput schema / properties / longitude / minimum
        Added value: +-180
    • Changedredfin_sweep_area1 field changed
      • changedInput schema / properties / output_path / description
        Previous value: -"Optional absolute path of a NEW JSON file to write the full results (and per-tile counts) to; a relative path or an existing file is refused rather than overwritten. Omit to get the results inline; use a file for large areas so the listings stay out of the conversation."New value: +"Optional NEW .json file to write the full results (and per-tile counts) to: a file name (e.g. \"san-jose.json\") written into the output directory (REDFIN_OUTPUT_DIR, default ~/Downloads/redfin-mcp), or an absolute path inside it. Paths outside that directory are refused, and an existing file is never overwritten. Omit to get the results inline; use a file for large areas so the listings stay out of the conversation."
  2. 3 tool updatesv1.2.1
    • Changedredfin_get_market_report1 field changed
      • changedInput schema / properties / region_type / description
        Previous value: -"Redfin region type code (2 = city, 5 = zip code, 6 = neighborhood)"New value: +"Redfin region type code (6 = city, 2 = ZIP code, 1 = neighborhood, 5 = county)"
    • Changedredfin_search_properties1 field changed
      • addedInput schema / properties / bounds
        Added value: +{
        +  "description": "Optional lat/lng box: search this drawn-map area instead of the resolved region (works inside big cities where ZIP/neighborhood regions fall back). `location` is then only a label.",
        +  "properties": {
        +    "east": {
        +      "type": "number"
        +    },
        +    "north": {
        +      "type": "number"
        +    },
        +    "south": {
        +      "type": "number"
        +    },
        +    "west": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "north",
        +    "south",
        +    "east",
        +    "west"
        +  ],
        +  "type": "object"
        +}
    • Addedredfin_sweep_area
  3. 2 tool updatesv1.1.5
    • Changedredfin_calculate_affordability7 fields changed
      • addedInput schema / properties / back_end_dti / description
        Added value: +"Back-end DTI cap as decimal, default 0.36"
      • addedInput schema / properties / front_end_dti / description
        Added value: +"Front-end DTI cap as decimal, default 0.28"
      • addedInput schema / properties / interest_rate / description
        Added value: +"Annual %, e.g. 6.5"
      • addedInput schema / properties / loan_term_years / description
        Added value: +"Default 30, max 50"
      • changedInput schema / properties / loan_term_years / maximum
        Previous value: -9007199254740991New value: +50
      • addedInput schema / properties / monthly_debts / description
        Added value: +"Sum of monthly debt payments (car, student loans, etc.)"
      • addedInput schema / properties / property_tax_rate / description
        Added value: +"Annual % of home price, default 1.1"
    • Changedredfin_calculate_mortgage2 fields changed
      • changedInput schema / properties / loan_term_years / description
        Previous value: -"Default 30"New value: +"Default 30, max 50"
      • changedInput schema / properties / loan_term_years / maximum
        Previous value: -9007199254740991New value: +50
  4. 1 tool updatev1.1.2
    • Changedredfin_search_properties2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max listings to return (default 40)."New value: +"Max listings to return (default 40; values above 350, the gis hard cap, are clamped to 350)."
      • changedInput schema / properties / status / description
        Previous value: -"Listing status. Only for_sale fully works in v0.1.0."New value: +"Listing status. Only for_sale is supported; sold and for_rent return an error rather than for-sale results."
  5. 21 tool updatesv1.0.0
    • Changedredfin_bulk_get1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_calculate_affordability1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_calculate_mortgage1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_compare_properties1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_area_climate_baseline1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_by_address1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_climate_risk1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_climate_risk_bulk1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_comparable_rentals1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_market_report1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_price_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_property1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_property_photos1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_saved_homes1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_saved_searches1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_get_session_context1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_register_session1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_resolve_addresses1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_search_properties1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedredfin_set_active_session1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  6. 6 tool updatesv0.13.1
    • Changedredfin_bulk_get1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedredfin_compare_properties1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedredfin_get_property1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedredfin_get_saved_homes1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedredfin_get_saved_searches1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedredfin_resolve_addresses1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Redfin's payload untouched. No field projection: this server has no verified record of which Redfin fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  7. 21 tool updatesv0.10.1
    • First observedredfin_bulk_get
    • First observedredfin_calculate_affordability
    • First observedredfin_calculate_mortgage
    • First observedredfin_compare_properties
    • First observedredfin_get_area_climate_baseline
    • First observedredfin_get_by_address
    • First observedredfin_get_climate_risk
    • First observedredfin_get_climate_risk_bulk
    • First observedredfin_get_comparable_rentals
    • First observedredfin_get_market_report
    • First observedredfin_get_price_history
    • First observedredfin_get_property
    • First observedredfin_get_property_photos
    • First observedredfin_get_saved_homes
    • First observedredfin_get_saved_searches
    • First observedredfin_get_session_context
    • First observedredfin_healthcheck
    • First observedredfin_register_session
    • First observedredfin_resolve_addresses
    • First observedredfin_search_properties
    • First observedredfin_set_active_session

TDQS

A4/5.0

Scored across 22 tools

Disambiguation3/5

Several tools overlap in purpose: redfin_get_property, redfin_bulk_get, and redfin_compare_properties all fetch property records; redfin_get_by_address and redfin_resolve_addresses both resolve addresses; and climate risk is split across single, bulk, and area-baseline tools. Descriptions clarify batch/limit differences, but an agent must read carefully to pick correctly. Session label tools are distinct but add conceptual noise.

Naming Consistency4/5

All tools use a consistent redfin_ prefix and snake_case, with most following a verb_noun pattern (get_property, calculate_mortgage, search_properties). Minor deviations exist: redfin_bulk_get reverses the order and redfin_healthcheck lacks a clear verb, but the set remains highly readable.

Tool Count3/5

22 tools is on the heavy side for a single-domain client, and several batch variants plus session-label tools may not each earn an independent place. The count is borderline but still within a plausible range given the breadth of Redfin features covered.

Completeness4/5

The surface covers core property retrieval, search, market reports, climate risk, mortgage/affordability calculators, saved homes/searches, and session diagnostics. Gaps are minor: no official sold-listing search and no transactional write operations, but workarounds exist and the domain is largely addressed.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides real-time access to Zillow real estate data, enabling property search, details, Zestimates, market trends, and mortgage calculations via natural language.
    7 npm
    55
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables natural-language access to Zillow real-estate data, including property search, details, Zestimate history, saved searches/homes, and market reports, by routing requests through the user's authenticated browser session.
    21
    612 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides real estate data from homes.com via a browser session, enabling property search, details, history, and affordability calculations through natural language.
    21
    390 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables searching curated OneHome property listings, fetching property details and photos, comparing homes, and running mortgage calculations from within Claude.
    21
    589 npm
    1
    MIT