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 instead (absolute path, 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. 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.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context: it returns both aggregate and per-URL responses for transparency, it avoids N redundant fetches when samples agree, and it notes that limitations of the per-property tool apply (e.g., no landslide coverage). This goes beyond the annotations without contradicting them.

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 a single dense paragraph that front-loads the core behavior and then explains the use case and limitations. It is efficient and every sentence earns its place, though it could be slightly more scannable with a break between the behavior and usage guidance.

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 sampling tool with one parameter and no output schema, the description covers the key context: what it returns, when to use it, and a known limitation. It doesn't describe the exact response shape, but the absence of an output schema and the tool's simple aggregate-return nature make this a minor gap. The mention of the per-property tool's limitations is a good completeness touch.

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 sample_urls is well-described in the schema. The description adds value by explaining the purpose of the parameter (representative URLs for the area) and the expected count (2–10), which reinforces the schema's min/max constraints. It doesn't add syntax details, but with one fully documented parameter, the baseline is high.

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 states the tool fetches climate risk for a small set of representative URLs, averages their baseline values, and returns a shared cluster_id when present. It distinguishes itself from per-property climate tools by emphasizing the area-level sampling approach and explicitly naming the alternative (per-property call).

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?

The description explicitly says to use this as a cheap area-level read BEFORE fanning out per-property calls, and explains the condition under which it applies (all sample properties agree on cluster_id and factors). It also gives a concrete usage pattern: pass 2–10 representative URLs. This is strong when-to-use guidance with a clear alternative.

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'. Degrades to resolved: false when every rung misses — does not throw. Address discrepancies across MLS feeds are common (the 109 vs 169 Overlook Point Ln cross-MLS case is a regular occurrence) — companion address_alternates[] field (#42) surfaces conflicts when present. 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.4/5.0
Behavior5/5

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

Even with readOnlyHint, openWorldHint, and idempotentHint annotations, the description reveals the 3-rung resolution ladder, the matched_via values, non-throwing resolved: false degradation, and the address_alternates conflict field. This is substantial behavior beyond what annotations encode.

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 front-loaded with the core purpose, and every subsequent sentence adds a distinct detail: algorithm, result markers, failure mode, real-world caveat, and use case. The length is justified by the tool's complexity; there is no fluff.

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?

Even without an output schema, the description discloses the key result fields (matched_via, resolved, address_alternates), the non-throwing error behavior, and the intended follow-on usage. It covers the tool's complexity well.

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 has 100% coverage, so the baseline is 3. The description adds meaning by characterizing address as free-text, clarifying that city/state are optional but needed for the search fallback, and mentioning fuzzy street-token matching. That justifies a 4.

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?

The description opens with a specific verb ('Resolve') and resource ('free-text address ... to its Redfin canonical home URL and home_id'), and details the resolution ladder, making the tool's purpose unmistakable. However, it does not explicitly contrast with the similarly named sibling redfin_resolve_addresses, so sibling differentiation is left to the tool name rather than the description.

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 explicitly states 'Use this when you have a property address and need its Redfin home_id for follow-on calls', and adds that city/state are needed for the search fallback. It does not state when not to use it or point to alternatives such as the bulk resolver.

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). 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?

Goes well beyond the readOnly/openWorld/idempotent annotations by disclosing the full failure envelope: `{ available: false, reason }` with the three specific reasons, the `not_covered: ['landslide']` field surfaced on every response, and the implementation fragility ('Sourced from Redfin's server-rendered homedetails HTML (no clean stingray endpoint exists)'). It also discloses the clustering behavior (same cluster_id typically shares identical scores). Annotations are consistent — a read-only, idempotent fetch — and the description adds substantial behavioral context on top.

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 it is rigorously structured — COVERS block, DOES NOT COVER block, response-shape block, source note, input note, optimization note — and every sentence carries non-redundant information. Front-loaded with purpose and coverage before implementation details. Slightly dense, but the complexity of three risk vectors plus failure modes justifies the length.

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 explain return values, and it does: the `available: true` shape, the `available: false` reason enum, and the `not_covered` field. Input format, geographic context, alternatives, and performance optimization are all covered. No critical gap for an agent to call this 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% — the url parameter already has a clear description with an example path. The description adds only marginal reinforcement ('Pass a homedetails URL (full or path)'), mostly restating what the schema already conveys. Baseline 3 is appropriate since the schema carries the semantic load.

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?

Opens with a specific verb+resource statement ('First Street Foundation climate risk scores for a property') and then enumerates the exact coverage — flood, fire, heat with per-vector detail (factors 1–10, FEMA zones, horizons, insurance bands). It explicitly carves out what it does NOT cover (landslide), which distinguishes it from a generic 'climate risk' tool and from siblings like redfin_get_area_climate_baseline.

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?

Names concrete conditions for use ('Helene-relevant risk vector in the NC mountains market and many parts of California / the Pacific Northwest') and explicit alternatives for what it does not cover (NC Geological Survey and USGS for landslide). It also gives an efficiency directive — using cluster_id to group properties and skip redundant fetches — so an agent knows when to reuse results rather than call again.

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 — typically taken from the upstream redfin_get_property (or read from the property page directly).

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
longitudeYes
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.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and variability. The description adds value by specifying the output content (similar active rentals with rent, distance, URL) and the source of inputs (upstream property data). This exceeds annotation coverage without 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?

Two sentences with zero waste. The first sentence states the core function and output; the second covers use case and input provenance. Information is front-loaded and every clause 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 tool with robust annotations and no output schema, the description covers the essential aspects: what it returns, how it's useful, and where inputs come from. It doesn't mention pagination or distance limits, but these are not critical for a comparables tool and the description is otherwise sufficient.

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 must compensate. It does by naming the parameter groups: 'rent estimate range + lat/lng + propertyId', which maps directly to the five parameters. It also clarifies the rent estimate low/high as a range and notes they can be equal. However, it does not explain the meaning of property_id beyond 'from upstream', which is 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?

The description clearly states a specific verb ('Find') and resource ('nearby rental comparables for a given property'), details the criteria (similar bed/bath/sqft) and outputs (monthly rent, distance, Redfin URL). It also conveys the use case (estimating rent, finding nearby rentals), which distinguishes it from siblings like redfin_get_property 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?

The description gives clear context for when to use the tool: when you have a property and need rental comparables, and it specifies that inputs typically come from upstream redfin_get_property or the property page. It does not explicitly state exclusions or alternatives, but the context is sufficient for an agent to decide when to invoke it.

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 address, price, beds/baths, status. 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

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this while adding the requirement that the user be signed in. It does not disclose failure modes, but the auth requirement is meaningful context 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?

Three short sentences are front-loaded with the resource and return fields. The read-only and safe-to-repeat statement is somewhat redundant with the annotations, but the overall text is compact and well organized.

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 simple read-only list with one optional parameter, the description plus schema covers purpose, authentication, and return fields. There is no output schema, but the listed fields give an agent enough expectation for the response shape; the main gap is unspecified pagination or limit behavior.

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?

The single optional parameter `view` is fully documented in the schema with enum values and a detailed description, so the schema carries the parameter-semantics load. The tool description adds no input-parameter meaning beyond that, matching the baseline for 100% schema coverage.

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 specific verb and resource: returns the signed-in user's favorited homes on redfin.com, and enumerates key returned fields (address, price, beds/baths, status). This clearly distinguishes it from siblings like redfin_get_saved_searches and 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?

The description gives clear context: this is for the signed-in user's saved/favorited homes and requires authentication. It does not explicitly name alternatives or say when not to use it, 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_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. Each entry is { url, region_segment, display_text }. Requires the user to be signed in. Returns an empty array if the user has none. 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.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces these by stating it is read-only and safe to call repeatedly. It adds genuinely new behavioral context: the data is derived from the saved-searches page HTML, requires authentication, and returns an empty array when no searches exist. This goes beyond what the annotations alone provide.

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 short sentences deliver the core functionality, return shape, authentication requirement, empty-result behavior, and safety profile with no filler. The most important information is front-loaded, and 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?

With no output schema, the description correctly fills the gap by documenting the entry structure, auth requirement, empty-array behavior, and read-only semantics. The single optional parameter is fully covered by the schema, and the tool is simple enough that nothing needed for correct invocation 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%, and the schema thoroughly explains the `view` parameter, including compact/full semantics and the rationale for not doing field projection. The tool description itself adds no parameter-specific guidance, so the baseline of 3 applies since the schema carries the full burden.

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 and resource: retrieving the signed-in user's saved searches from redfin.com. It also states the exact shape of each entry (`{ url, region_segment, display_text }`), making the purpose unambiguous. This clearly distinguishes it from siblings like redfin_get_saved_homes without needing 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?

The description gives clear context for when this tool works: the user must be signed in, and it returns an empty array when there are no saved searches. It does not explicitly contrast it with an alternative tool or say 'use X instead,' but the context is sufficient for an agent to know when it applies.

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.3/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true) by disclosing that re-registration is an update not a duplicate, that the registry is purely a label and does NOT redirect which account requests use, and that account selection actually happens via the ContextMint Bridge browser tab. This is exactly the kind of non-obvious behavioral context that prevents misuse.

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?

Front-loads the core action, then layers the idempotency note, the return value, and the critical label-only caveat in four tight sentences. Every sentence earns its place, and the most important warning is stated explicitly rather than buried.

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 3-param mutation tool with no output schema, the description covers the mutation semantics, idempotency behavior, the returned `session_id`, and the label-only limitation, while annotations carry the safety profile. Nothing an agent needs 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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in the schema (including `mark_active` and `auth_expires_at`). The description reinforces the identity-keying and the effect of `mark_active`, but adds no syntax or format details beyond what the schema provides, so the baseline 3 is appropriate.

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 (record/refresh) and resource (the Redfin account a signed-in session belongs to), and explains the keying by `account_identity` plus the returned `session_id`. It implicitly distinguishes itself from `redfin_set_active_session` by noting that `mark_active: true` folds that action into the same call, but no sibling is named explicitly.

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?

Provides clear context for when this is the right call: re-registering the same identity updates the existing entry, and the registry is a label only that does not change which account requests use. However, it never names an alternative tool or states an explicit when-not condition, 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_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.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=true, and the description adds genuinely non-obvious context beyond them: the registry is a label only and does not change which account requests use, plus the bridge-extension tab behavior. This is valuable disclosure, though it omits return/error behavior and any auth prerequisites.

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 sentences, front-loaded with the action, then the clarifying caveat and the alternative. Every sentence earns its place; the caveat prevents a costly misconception and is not padding.

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 single-parameter bookkeeping tool with no output schema, the description is nearly complete: purpose, the important label-only nuance, and the alternative are all covered. Only minor gaps remain (what a successful call returns or errors on an unknown id), which are low-stakes here.

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% for the single parameter, so baseline is 3. The description adds meaning beyond the schema by specifying the id must be 'previously registered', tying it to the registration workflow, which is a useful constraint not present in the schema text 'Session id to make active.'

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 specific verb and resource: 'Mark a previously registered `session_id` as the current account label.' It goes further by clarifying the scope ('for your own bookkeeping across a conversation'), which cleanly separates it from siblings like redfin_register_session and redfin_get_session_context without needing to open their schemas.

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 clear context for use ('for your own bookkeeping across a conversation') and an alternative path for a related goal ('to read a different account, sign that tab into it'). It does not, however, explicitly state when to prefer this over redfin_register_session or redfin_get_session_context, so it falls just 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_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. 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 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.
max_requestsNoHard request budget (default 120).

TDQS

A4.6/5.0
Behavior5/5

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

Discloses a lot beyond the annotations: the 350-home API cap, recursive quartering, local dedupe by property_id, local re-application of filters, sequential requests with a delay, region-drift omissions, and refusal to overwrite an existing output file. It also resolves the readOnlyHint=false annotation by stating the only write is the optional local file, so there is 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.

Conciseness4/5

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

Front-loaded with the purpose and the cap/recursion rationale, then mode selection, then output handling. It is a long paragraph, but nearly every clause carries operational information; a bit of it repeats (ZIP-as-capped restates cap logic already given).

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?

Covers the full calling picture for a 12-parameter, no-output-schema tool: how the sweep behaves, what it returns (completeness summary plus inline listings), and how to divert results to a file. Nothing essential is left to the schema.

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 58%, but the description compensates for the key gaps: zips vs bounds as alternative sweep modes, what the completeness summary counts, and the semantics of output_path (new file only, inline by default). Filters like beds_min/price_min and home_types get no direct explanation, though 're-applies the caller's filters locally' hints at their behavior.

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 precise verb+resource ('Enumerate EVERY for-sale Redfin listing inside a bounding box') plus the defining quality (no silent truncation) that separates it from a normal search tool. The mechanism sentences make the tool's identity unambiguous even against the large sibling list.

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?

Explicitly says when to use ZIP mode vs map polygons ('when Redfin ignores drawn-map polygons') and when to pass output_path ('for large areas'). It does not directly name redfin_search_properties as the non-exhaustive alternative, which is the one routing decision an agent still has to infer.

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. 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
  2. 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
  3. 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."
  4. 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"
  5. 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"
        +}
  6. 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.1/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target clearly distinct purposes (search vs. sweep, single get vs. bulk vs. compare, climate per-property vs. bulk vs. area baseline), but there is some overlap between redfin_search_properties and redfin_sweep_area, between redfin_get_by_address and redfin_resolve_addresses, and among the three property-fetch variants (get/bulk/compare). The detailed descriptions largely resolve confusion.

Naming Consistency4/5

Nearly all tools follow a predictable redfin_verb_noun snake_case pattern (e.g., redfin_search_properties, redfin_get_property, redfin_calculate_mortgage). A few minor deviations exist: redfin_bulk_get uses noun_verb order, and redfin_healthcheck is a bare noun rather than verb_noun.

Tool Count4/5

22 tools is on the high side but justified by the broad domain (search, property details, market data, climate risk, rentals, calculators, sessions, diagnostics). Some redundancy exists (three climate tools, two calculators, two address resolvers, two session bookkeeping tools), but each covers a distinguishable capability.

Completeness4/5

The read-only surface is thorough: search, exhaustive sweep, get/bulk/compare records, price and tax history, market reports, photos, climate risk (flood/fire/heat), rental comparables, address resolution, saved homes/searches, mortgage/affordability calculators, sessions, and healthcheck. Minor gaps include no standalone rental search and no neighborhood/school data, but core workflows are covered.

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.
    9 npm
    53
    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
    1,255 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
    603 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