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 fetchproxy extension. 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.

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 up to 12 properties: address, price, beds/baths, sqft, $/sqft, year built, status, days on market. Aligned summary table.

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_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. One autocomplete round-trip.

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.

Related MCP server: Zillow MCP Server

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 fetchproxy 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 fetchproxy extension, which is shared across every fetchproxy-based MCP (zillow-mcp, opentable-mcp, resy-mcp, …). Install it once:

git clone https://github.com/chrischall/fetchproxy
cd fetchproxy
npm ci
npm --workspace=@fetchproxy/extension-chrome run build

Then in Chrome: chrome://extensions → toggle Developer mode → Load unpacked → pick packages/extension-chrome/dist/.

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  │◀──────▶│  fetchproxy      │◀────────────▶│ redfin.com  │
│ (Claude, etc.) │          │  (Redfin MCP)    │ :37149 │  extension       │   (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 fetchproxy 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

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

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

Beyond the readOnlyHint/openWorldHint/idempotentHint annotations, the description discloses substantial behavior: per-target error capture, ~6 in-flight server-side concurrency, retry-once-on-timeout, a hard deadline, and retryable pending status rows. This gives the agent accurate expectations about failure modes and partial results.

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 dense but every sentence earns its place: capability, target forms, output relation, error behavior, concurrency, timeout semantics, and usage guidance are all covered without filler. The most important facts are front-loaded.

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 readOnly annotations and rich schema, the description covers what an agent needs to select and invoke the tool: batch size, target formats, response relationship to redfin_get_property, error isolation, retry behavior, pending status semantics, and the comparison-tool alternative. No critical gap remains.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning to the targets parameter: it clarifies the three accepted target forms, explains internal redirect resolution for property_id, and notes that pairing with listing_id is fastest. This is practical routing information not present in the schema.

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: 'Fetch up to 200 Redfin property records in a single tool call.' It distinguishes itself from siblings by stating it returns the same per-property record shape as redfin_get_property but without a summary table, and explicitly names redfin_compare_properties for that alternative.

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 gives explicit when-to-use guidance: 'Use this when you have a list of saved homes / candidate properties and need the full structured data for every one of them.' It also names the alternative for summary comparison and implies the distinction from single-record fetching.

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/student loans), down payment, interest rate, optional property-tax rate / insurance / HOA / loan term. Output: max home price, binding constraint (front-end vs back-end), and the PITI breakdown at that price. Uses the canonical @chrischall/realty-core affordability engine shared across the realty MCP cohort. No network — pure local math.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoa_monthlyNo
back_end_dtiNo
down_paymentYes
front_end_dtiNo
interest_rateYes
monthly_debtsNo
monthly_incomeYes
loan_term_yearsNo
insurance_annualNo
property_tax_rateNo

TDQS

A4.6/5.0
Behavior5/5

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

Discloses it uses canonical 'realty-core' engine, is pure local math with no network, and outputs constraint breakdown. Adds behavioral context beyond annotations (idempotentHint, readOnlyHint) 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?

Four well-structured sentences front-load purpose, list inputs/outputs, and add engine/network context. No redundant or extraneous text.

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?

Given 10 params and no output schema, description provides solid coverage of inputs and expected outputs. Could detail output format more, but mentions price, constraint, and PITI breakdown sufficiently.

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 0% schema descriptions, description lists most inputs (income, debts, down payment, rate, tax, insurance, HOA, loan term). Omits front_end_dti/back_end_dti but references 28/36 rule, implying defaults. Adds meaning beyond raw property names.

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?

Description clearly states it solves for max affordable home price using 28/36 DTI rule. Distinguishes from sibling redfin_calculate_mortgage (monthly payment vs price) and search tools. Uses specific verb 'Solve for' and specifies resource 'max home price'.

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?

Describes use case for affordability based on income/debts, implying for given-price payment calculations use mortgage tool. No explicit when-not-to-use or alternatives list, but context is clear enough.

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
insurance_annualNo
property_tax_rateNoAnnual % of home price
property_tax_annualNo
down_payment_percentNo

TDQS

A4.6/5.0
Behavior5/5

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

Description adds value beyond annotations (readOnlyHint, idempotentHint) by explaining no network call, deterministic behavior, and PMI applicability. No 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?

Four focused sentences, each providing essential information. Front-loaded with purpose, no fluff.

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?

Covers all key behaviors and parameters despite 10 parameters and no output schema. Could mention default loan term, but schema already provides default.

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 40%, but description clarifies relationships (down_payment vs. percent, property tax options, PMI condition). Compensates well for missing 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?

Clearly states it is a local mortgage calculator returning a full PITI breakdown. Distinct from all sibling tools, which focus on property searches, market reports, etc.

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 notes it is deterministic and safe for scenario comparison without network calls. Does not state when to avoid use, but context is sufficient for selection as the only mortgage tool.

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. Calls are concurrent.

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

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

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds valuable behavioral context beyond them: individual property errors are captured per-row, calls are concurrent, the raw marketing description is omitted by default, and include_summary duplicates ~30% of response weight. There is no contradiction with annotations.

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?

Every sentence earns its place: core purpose and range are front-loaded, then selection guidance, then optional flags with their tradeoffs, then error/concurrency behavior. There is no filler, tautology, or redundant restating of 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 compensates thoroughly by enumerating key returned fields, explaining default response shape, describing per-row error handling, and noting concurrency. An agent has enough context to call the tool correctly and anticipate response size and failure behavior.

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 real semantics beyond the schema: targets may be a url OR a property_id+listing_id pair, include_summary has a quantified response-weight tradeoff, and include_description defaults off. Only the view parameter's behavior is left to the schema, which is acceptable given full 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 opens with a specific verb and resource: 'Fetch and compare 2 to 25 Redfin properties side-by-side.' It states the accepted target formats (url or property_id+listing_id), names the return fields, and clearly distinguishes itself from redfin_bulk_get and other siblings.

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 directs non-side-by-side or >25-property workflows to redfin_bulk_get. It also gives actionable guidance on when to set include_summary and include_description, including the context-cost tradeoff, so an agent can make a well-informed invocation decision.

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 (readOnlyHint, idempotentHint) cover safety; description adds context on aggregation and per-URL transparency. No contradictions. Slightly more detail on return format would push to 5.

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 purpose and usage. Every sentence adds value. No wasted words.

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?

Complete for a simple tool with one fully described parameter, no output schema, and clear annotations. Description explains return values and usage context adequately.

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 already fully describes the single parameter (sample_urls: array of 2-10 URLs). Description reinforces but adds no new details beyond what schema provides. Baseline 3.

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?

Description clearly states the tool fetches climate risk for representative URLs and returns averaged baseline values with cluster_id. Distinguishes from sibling tools like redfin_get_climate_risk (per-property) and redfin_get_climate_risk_bulk.

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 advises using this before fanning out per-property calls to avoid redundant fetches if cluster agrees. Also mentions limitations (no landslide coverage). Clear when-to-use and alternatives.

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

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

Annotations provide readOnlyHint, openWorldHint, idempotentHint. The description adds significant context: the 3-rung resolution ladder, matched_via values, graceful degradation with resolved: false, address discrepancy conflicts via address_alternates field, and that no auth is required. No contradictions.

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 a single well-structured paragraph that front-loads the main purpose, then details the algorithm, edge cases, and usage guidance. Every sentence adds essential information without redundancy. It is concise yet comprehensive.

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?

The description covers the resolution algorithm, return values (URL, home_id, matched_via, address_alternates), graceful degradation, and when to use. No output schema exists, so mentioning key return fields is helpful. It could be slightly stronger by fully specifying the output structure, but overall it is complete for the tool's complexity.

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 baseline 3. The description adds value by clarifying that city/state/zip are optional, explaining their role in the search fallback step, and calling the address 'free-text'. This helps the agent understand parameter optionality and fallback behavior beyond the schema.

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 specifies the verb 'Resolve' and the resource 'address', and explains the outcome: canonical URL and home_id. It distinguishes from siblings like redfin_resolve_addresses by focusing on a single address resolution with a detailed algorithm.

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 explicitly states when to use: 'Use this when you have a property address and need its Redfin home_id for follow-on calls.' It also mentions read-only nature and no auth. However, it does not explicitly contrast with alternatives like redfin_resolve_addresses for bulk, though the singular vs plural hints at it.

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

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

Discloses source (Redfin HTML, no API), response shape (including `available: false` reasons), and performance tips (cluster_id grouping). Annotations already indicate read-only and idempotent, and description adds valuable behavioral context beyond 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?

Well-organized with clear sections (covered risks, exclusions, response shape, source). Some redundancy (e.g., 'DOES NOT COVER' appears twice), but overall efficient and informative.

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, description fully explains response structure, error reasons, and data source. Covers all necessary context for an agent to invoke correctly and interpret results.

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 already describes the url parameter with 100% coverage. The description adds context about accepted formats (full URL or path) and examples, but the schema is already sufficient; slight extra value.

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 retrieves First Street Foundation climate risk scores for a property, listing covered risk types (flood, fire, heat) and explicitly excluding landslide, which distinguishes it from other 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?

Provides explicit guidance: use for climate risk, excludes landslide (referencing alternatives), and suggests leveraging cluster_id to avoid redundant fetches. Also explains how to construct the URL.

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). 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.2/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, openWorldHint, idempotentHint), description adds: server-side concurrency (~5 fetches), per-row error capture, output order preservation, and batch size limit. No contradictions with annotations.

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?

Six sentences, each serving a distinct purpose: purpose, output shape, error handling, concurrency, usage scenario, limitations. No redundancy, front-loaded with main action.

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?

Single parameter is fully explained; behavior (error handling, concurrency, order) and limitations are covered. Output shape is referenced to another tool, which is acceptable. No output schema, but sufficient for a bulk fetch tool.

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?

Input schema already covers parameter fully (with description). Description restates batch limit and adds error handling context but no new semantic constraints beyond schema. Baseline 3 as schema coverage is 100%.

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?

Description clearly states verb 'Fetch' and resource 'climate risk for up to 100 property URLs'. It differentiates from sibling `redfin_get_climate_risk` by specifying bulk nature and output shape consistency.

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?

Description explicitly says 'Use this when batching ~60-property workflows where climate risk is the dominant cost.' It also notes limitations from per-property tool apply, guiding when not to use. Could be more explicit about single-query alternatives but sufficient.

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.2/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds that it returns nearby active rental listings with specific fields, giving good transparency. No contradictions.

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 concise (3-4 sentences), front-loaded with purpose, and every sentence adds value. No fluff.

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 tool with 5 params and no output schema, the description explains inputs, outputs, and typical use. It could mention result limits or pagination, but overall sufficient.

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 40% with descriptions on two parameters. The description mentions the parameter group (rent estimate range, lat/lng, propertyId) but adds little beyond the schema. It does not compensate for undocumented parameters.

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 it finds nearby rental comparables, specifies the output fields, and distinguishes from sibling tools like redfin_get_property 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?

It provides context on when to use the tool (estimating rent, finding rentals) and mentions inputs are typically from redfin_get_property, but does not explicitly exclude alternative tools or scenarios.

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 (2 = city, 5 = zip code, 6 = neighborhood)
property_typeNoProperty type filter, default 1 (all)

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, openWorldHint), the description reveals the exact output structure for each metric, warns about empty data for neighborhoods, and confirms safety for repeated calls. This provides comprehensive behavioral insight.

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: first enumerates returned metrics, second explains parameter options, third details output format. No extraneous content, front-loaded with purpose, and logically ordered.

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 4 parameters (0 required), 100% schema coverage, no output schema, and straightforward return type, the description covers all necessary aspects: what the tool returns, how to invoke it with both region identification methods, and output format. No gaps identified.

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%, but the description adds practical guidance: location free-text with autocomplete, recommendation to use city names, warning about neighborhoods, and default for property_type. These enrich understanding beyond basic schema types.

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 returns a market report for a Redfin region with specific metrics: median prices, $/sqft, sale-to-list ratio, homes for sale/sold, and year-over-year/month-over-month changes. It distinguishes from sibling tools like redfin_search_properties or redfin_get_property by focusing on aggregated market data rather than individual 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 provides two ways to specify the region (location free-text or region_id+region_type), notes that neighborhoods often return empty data, and mentions the default property_type. It does not explicitly state when not to use this tool (e.g., for single property queries), but the context of being a market report heavily implies that.

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.4/5.0
Behavior4/5

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

Annotations already mark it as read-only, idempotent, open-world. The description reinforces this with 'safe to call repeatedly' and describes the output structure (date, event, price, days-on-market, source) plus tax history, adding useful behavioral context beyond annotations.

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

Conciseness5/5

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

Four sentences, front-loaded with purpose, no redundancy. Every sentence adds value: what data is returned, input options, read-only safety.

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?

No output schema, but description adequately explains return values (date, event, price, days, source, tax history). Missing details on conflict resolution (e.g., if both url and property_id supplied) but sufficient for a read-only tool.

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

Parameters4/5

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

Schema covers 3 parameters but only url has a description (33% coverage). The description compensates by explaining the logical grouping: 'Provide either url or property_id+listing_id,' which adds critical usage semantics not in the schema.

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 retrieves 'listing-price events for a property' and details the contents of each entry. It distinguishes from siblings by specifying the unique data (price history, tax history) and input methods (url or property_id+listing_id).

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 explicit input guidance: 'Provide either url or property_id+listing_id.' Also states 'Read-only; safe to call repeatedly.' While it doesn't compare to all alternatives, the context is clear enough for selecting this tool over siblings.

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

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent, and the description reinforces this with 'Read-only; safe to call repeatedly' without contradicting them. It goes well beyond annotations by disclosing non-obvious behaviors: lot_size is null (never 0) for condos, primary_photo_url is dropped on the default compact view, the marketing description is omitted by default, and the internal resolution chain (initialInfo endpoint, /home/<id> redirect) is laid out. No 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 core purpose and organized in a logical progression: purpose, input modes, return fields, edge cases, view behavior, opt-in flags, safety. It is dense and every sentence carries information, but at roughly 200 words it tests the upper bound of conciseness, and the closing 'Read-only; safe to call repeatedly' partially duplicates what the annotations already state.

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 document return values itself — and it does, listing core fields plus derived fields (lot_size_acres, price_drop_*, hoa_monthly_usd, last_sold_*, tax_annual, extracted_features). It also covers edge cases (null lot size, dropped photo URL, omitted description), the include_* opt-ins, and sibling alternatives, leaving almost nothing for an agent to guess. The only omission is error behavior for invalid inputs, which is minor for a read-only tool.

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

Parameters4/5

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

Schema coverage is 100% and the schema's own per-parameter descriptions are already rich (e.g., the view enum and property_id resolution notes), so the baseline is 3. The description adds genuine value on top by explaining the cross-parameter resolution modes — which combination is fastest and which endpoint each hits — and by tying the include_* flags to specific response fields and sibling round trips. This is above baseline but not a 5 because per-parameter semantics are largely carried by the schema.

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 — 'Fetch a property's full Redfin record' — and the body distinguishes this tool from siblings by naming redfin_get_property_photos for galleries and redfin_get_price_history for price-history follow-ups. The three input modes (url, property_id alone, property_id+listing_id) further pin down exactly what this tool does and how it resolves records.

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 enumerates when to use each of the three input modes and labels the trade-off: 'property_id + listing_id — fastest, skips resolution.' It names alternatives with their conditions — 'use redfin_get_property_photos for the whole gallery' and 'Saves a follow-up redfin_get_price_history round trip — use this when a workflow needs both' — giving an agent clear decision criteria.

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.5/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 'Read-only; safe to call repeatedly.' It adds behavioral context by explaining the URL resolve step and the possibility of count=0 for off-market listings, providing transparency 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.

Conciseness5/5

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

The description is extremely concise, using two efficient sentences to convey all essential information. It front-loads the purpose and then details parameters and return structure without unnecessary words, earning 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?

Despite the absence of an output schema, the description fully explains the return format ({ property_id, listing_id, count, photos }) and mentions the content of each photo entry (multiple sizes, thumbnail, caption). It also covers edge cases (count=0) and security (read-only). This is complete for the tool's complexity.

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?

Although schema coverage is 100%, the description adds meaningful context by explaining the logical grouping of parameters: 'Provide either url or property_id+listing_id' and clarifying the resolve step. This enhances understanding beyond the individual parameter 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 clearly states the tool retrieves the full photo gallery for a Redfin property, specifying the return values (CDN URLs at multiple sizes, thumbnail, caption) and distinguishing it from sibling tools like redfin_get_property that return property details. The verb 'get' and noun 'photo gallery' are specific 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 Guidelines4/5

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

The description explicitly directs how to specify the property (via url or property_id+listing_id) and notes that off-market listings may return count=0. It includes a read-only note indicating safe repeated calls. While alternatives are not explicitly listed, the context makes it clear when to use this tool.

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

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

Annotations already declare readOnlyHint and idempotentHint, which the description echoes. Beyond that, it adds the auth prerequisite ('Requires the user to be signed in') and summarizes the returned fields, which is useful behavioral context not present in 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.

Conciseness5/5

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

Three short sentences, each carrying distinct information: what the tool returns, what fields are included, and the auth/safety profile. No filler or redundant restatement; the most important scoping information comes first.

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 simple read-only list tool with one optional parameter and no output schema, the description is complete: it states the resource, return fields, authentication requirement, and safety. There are no obvious gaps that would prevent an agent from invoking it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the single 'view' parameter already has a detailed explanation of compact vs. full responses. The tool description adds no additional meaning about this parameter, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the resource (the signed-in user's favorited homes on redfin.com) and the action (returns them). The phrase 'favorited homes' distinguishes this from sibling tools like redfin_get_saved_searches, and the listed return fields make the tool's scope concrete.

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 own saved homes and requires authentication. It does not explicitly name alternatives or state when not to use it, but the scope is specific enough that an agent can route appropriately.

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

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

Beyond the annotations, the description discloses authentication requirements, the source of the data, the empty-array behavior, and explicitly confirms read-only/idempotent behavior. This is exactly the kind of contextual behavioral information an agent needs that the annotations do not fully express.

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 compact and front-loads the main purpose, then adds entry shape, auth requirement, empty behavior, and safety. The final 'Read-only; safe to call repeatedly' partially duplicates the readOnlyHint and idempotentHint annotations, but the redundancy is minor and the overall size is well calibrated.

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 simple one-optional-parameter read-only tool with no output schema, the description is complete: it defines the return entry shape, explains the empty result, flags authentication, and identifies the data source. Nothing critical to calling the tool correctly appears to be 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 view parameter is already thoroughly documented in the schema with compact/full semantics and caveats. The tool description adds no additional parameter-level meaning, which matches the baseline of 3 for high schema coverage.

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 states the exact resource: the signed-in user's saved searches on redfin.com, sourced from the saved-searches page HTML. This is a specific verb-plus-resource statement that makes the function's job unambiguous. It does not explicitly contrast with redfin_get_saved_homes, but the resource name itself is distinctive enough to avoid serious confusion.

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 call this tool: when you need the current signed-in user's saved searches, and it notes the signed-in prerequisite. It also says what happens when there are none, which is useful operational guidance. It does not mention alternatives or exclusions, 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_session_contextList all registered Redfin sessionsA
Read-onlyIdempotent

Return the full set of registered sessions plus the current active_session_id. When no sessions are registered, sessions is empty and active_session_id is null.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by specifying the return fields (sessions and active_session_id) and the null case for no sessions, providing behavioral edge-case info not covered by annotations.

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, zero wasted words. The main action is front-loaded, and key details (edge case) are provided concisely.

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?

Given no parameters and no output schema, the description covers the essential behavior and edge cases. Could briefly mention relationship to session registration/setting, but not required for completeness.

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?

No parameters exist, so schema coverage is 100%. Per guidelines, 0 params defaults to baseline 4. Description adds no parameter info (unnecessary) but is clear.

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 returns the full set of registered sessions and the current active_session_id, with explicit edge-case behavior (empty sessions and null active_session_id). It distinguishes itself from sibling tools like redfin_register_session and redfin_set_active_session by focusing on retrieval.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Does not mention prerequisites (e.g., requiring an active session) or scenarios where this is preferred over other session-related tools.

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

redfin_healthcheckVerify the fetchproxy bridge end-to-endA
Read-onlyIdempotent

Round-trips a small public www.redfin.com URL (/robots.txt) through the fetchproxy bridge 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 'real www.redfin.com-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only, no auth required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses much beyond annotations: it is read-only, requires no auth, performs a round-trip through the bridge, and returns specific diagnostic categories. It also explains the failure-mode hint, helping the agent interpret results. No contradiction with the readOnlyHint/idempotentHint annotations.

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 action and purpose, then lists the diagnostic outputs, then gives usage guidance. Every sentence adds value, and the length is appropriate for a healthcheck tool with no parameters and no output 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?

Given no output schema, the description enumerates the diagnostic fields returned: role, port, version, extension link state, elapsed time, and human-readable hint. It also explains how to interpret the failure categories, making the tool fully usable without external context.

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 has zero parameters, so there is no schema burden to compensate for. The description adds relevant input context by stating no auth is required and that the URL is fixed, making the no-input nature clear.

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: round-tripping a public /robots.txt URL through the fetchproxy bridge. It clearly differentiates this diagnostic tool from the surrounding Redfin property tools by focusing on bridge health rather than real estate data.

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 when to call the tool: 'Call this when a real tool fails and you want to know which hop broke.' It does not enumerate when not to use it or list alternative diagnostics, but the context is clear enough for an agent to make the right selection.

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

Register (or refresh) an authenticated Redfin session keyed by signed-in account identity. Re-registering the same account_identity updates the existing session rather than creating a duplicate. Returns the session_id to use when routing per-tool calls. The first registered session becomes the default active_session_id. Pass mark_active: true to make the newly-registered session active in the same call.

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.6/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it states that re-registering updates rather than duplicates, and explains the default active session behavior. Although annotations include 'idempotentHint: true', the description clarifies the update semantics. No contradictions with annotations.

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 four sentences, each serving a purpose: registration action, update behavior, return value, and active session handling. It is front-loaded with the key verb and resource, and no extraneous information.

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 simplicity of the tool and the absence of an output schema, the description covers all necessary aspects: registration/refresh mechanism, session identity, active session management, and return value. It is fully adequate for an AI agent to use correctly.

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 significantly adds meaning: it explains that 'account_identity' is the key for session identity, clarifies the effect of re-registration, and describes how 'mark_active' works. It also explains the return value 'session_id' which is not in the schema.

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 that the tool registers or refreshes an authenticated Redfin session, using specific verbs and resource identification. It distinguishes itself from sibling tools like 'set_active_session' and 'get_session_context' by focusing on session creation/update and identity keying.

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 context on when to use: for registering or refreshing sessions to route per-tool calls. It explains the behavior of re-registering and setting active session, but does not explicitly state when not to use or directly compare to the sibling 'set_active_session' tool.

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

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

Beyond the readOnly/idempotent/openWorld hints, the description adds substantial behavioral detail: output order preservation, `resolved: false` for no-match, distinct retryable statuses (timeout/bridge_down/pending), per-row retry-once-on-timeout, server-side concurrency ~6, a hard overall deadline, and a pending count for selective re-runs. This far exceeds what the annotations alone convey and matches the read-only/idempotent hints 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.

Conciseness4/5

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

The description is information-dense and front-loaded with the core action, but not maximally concise. Every sentence adds value, but details like 'server-side concurrency ~6 in flight' are non-essential for invocation and could be trimmed. Overall structure is strong and readable.

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?

Despite having no output schema, the description covers the essential invocation context: input format and limits, batch behavior, failure semantics, retry policy, deadlines, and the intended follow-on use case. It even tells the agent what to do with pending results ('re-run just those'). This is complete enough for correct selection and invocation.

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 `addresses` array and `view` enum are fully documented in the schema. The description only restates the input shape ('string or a structured {street, city, state, zip} object') without adding new parameter-level semantics. Baseline 3 applies.

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.' It clearly distinguishes this bulk resolver from sibling tools like redfin_search_properties and redfin_get_by_address by framing it as a bulk batch operation that collapses a multi-call flow into one trip.

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 explicitly states when to use it: '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 contrasts with the 'typical 6-search-call + 15-resolve flow,' providing clear context. It does not explicitly spell out when-not-to-use or name alternative sibling tools, so it misses the full 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 gis API returned its ~350 hard cap and more listings exist — 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. v0.1.0 supports for_sale status only. Read-only; safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax listings to return (default 40).
statusNoListing status. Only for_sale fully works in v0.1.0.
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?

Beyond annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses location resolution via autocomplete and gis API, the short-circuit behavior for addresses, the coverage field, result_cap_hit, ZIP error handling, and explicitly states 'Read-only; safe to call repeatedly.' No contradictions with 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?

The description is six sentences, each providing unique value. It front-loads the main purpose and progressively adds detail. Minor redundancy (e.g., 'Search Redfin listings' in title and description) could be trimmed, but overall well-structured.

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 8 parameters and no output schema, the description covers return fields, edge cases (cap hit, ZIP error, status limitation, coverage scenarios), and read-only safety. It is comprehensive for the tool's complexity.

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 50%; the description does not explicitly detail each parameter but mentions 'optional filters' and references price/beds filters for narrowing cap hits. It adds meaning by explaining the location parameter's resolution behavior and the status limitation. However, it could individually describe price_min/max, beds_min, baths_min to fully compensate for the missing 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?

The description clearly states the tool's purpose: 'Search Redfin listings by location... and optional filters.' It specifies the verb (Search), resource (Redfin listings), and provides differentiation from siblings by noting location resolution via autocomplete and gis API, and that full addresses short-circuit.

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 provides explicit usage guidance, including when to use a full street address (short-circuits, returns single home), when to narrow filters (result_cap_hit signals ~350 cap), and limitations (v0.1.0 supports for_sale only, ZIP fallback errors). It implicitly differentiates from alternatives like redfin_get_by_address for profile_only coverage.

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

Switch which registered session subsequent tool calls route through by default. Pass a session_id previously returned by redfin_register_session. Tools that accept an explicit session_id parameter override this default per-call.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession id to make active.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and readOnlyHint=false. The description adds that this tool sets the default routing for subsequent calls, providing useful behavioral 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.

Conciseness5/5

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

The description is two sentences with no wasted words. The main purpose is stated first, making it easy to parse.

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 simple tool with one parameter and no output schema, the description explains its purpose, how to use it, and its interaction with other tools. It is fully complete.

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 description adds the crucial context that session_id must be previously returned by redfin_register_session, which the schema's description does not provide.

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 verb 'Switch' and the resource 'active session'. It distinguishes itself from sibling tools like redfin_register_session (creates a session) and redfin_get_session_context (gets context).

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 specifies that the session_id must come from redfin_register_session and notes that explicit session_id parameters override the default. It provides clear context but does not explicitly 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 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"
        +}
  2. 21 tool updatesv0.10.1
    • First observedredfin_bulk_get
    • First observedredfin_calculate_affordability
    • First observedredfin_calculate_mortgage
    • First observedredfin_compare_properties
    • First observedredfin_get_area_climate_baseline
    • First observedredfin_get_by_address
    • First observedredfin_get_climate_risk
    • First observedredfin_get_climate_risk_bulk
    • First observedredfin_get_comparable_rentals
    • First observedredfin_get_market_report
    • First observedredfin_get_price_history
    • First observedredfin_get_property
    • First observedredfin_get_property_photos
    • First observedredfin_get_saved_homes
    • First observedredfin_get_saved_searches
    • First observedredfin_get_session_context
    • First observedredfin_healthcheck
    • First observedredfin_register_session
    • First observedredfin_resolve_addresses
    • First observedredfin_search_properties
    • First observedredfin_set_active_session

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose. For example, redfin_search_properties is for listing searches, redfin_get_property retrieves full records, and redfin_get_price_history focuses on price events. Even similar tools like redfin_bulk_get and redfin_compare_properties have different use cases (bulk fetch vs. side-by-side comparison). No ambiguity.

Naming Consistency5/5

All tools follow the 'redfin_' prefix and a consistent verb_noun pattern (e.g., redfin_search_properties, redfin_get_property, redfin_calculate_mortgage). There is no mixing of conventions like camelCase or inconsistent verb styles.

Tool Count5/5

With 21 tools, the server covers a broad domain including property search, details, comparisons, bulk operations, mortgage calculations, climate risk, and session management. Each tool earns its place, and the count is well-scoped without being excessive or insufficient.

Completeness5/5

The tool surface covers the full lifecycle of property interaction: search, retrieve details, price history, photos, comparisons, bulk operations, address resolution, market reports, mortgage and affordability calculators, climate risk, and authenticated sessions. There are no obvious gaps for the stated purpose of a Redfin MCP server.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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.
    11
    48
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates Zillow real estate data with AI assistants, enabling property search, neighborhood insights, and affordability calculations through natural language.
    11
    1
    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.
    5
    20
    612
    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
    563
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrischall/redfin-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server