Skip to main content
Glama
chrischall

homes-mcp

by chrischall

Bulk-resolve street addresses to homes.com property URLs

homes_resolve_addresses
Read-onlyIdempotent

Resolve up to 100 street addresses in one call to canonical homes.com property URLs and property IDs, with per-address resolved or error status.

Instructions

Resolve up to 100 street addresses to canonical homes.com property URLs + opaque property hashes in one call. Pass addresses: [{ address, city, state, zip? }, ...]. Fans out to the same rungs homes_get_by_address runs (structured smartsearch typeahead → slug → city/zip search fallback), verifying each candidate with the same whole-token street + unit match. Per-row outcomes parallel homes_get_by_address (with property_hash renamed to property_id here so the field name lines up with homes_bulk_get): { resolved: true, url, property_id, street_address, matched_via } on success — matched_via is 'typeahead', 'slug', or 'search_fallback' — { resolved: false, error } otherwise; one bad row won't fail the whole call. Each row's status is resolved, unresolved, pending (deadline reached — retry it) or blocked (homes.com returned a sign-in / AWS WAF challenge or HTTP 403/429 — not a miss; clear the challenge in the browser and retry). Results preserve input order. Use this instead of looping homes_get_by_address for any batch ≥ 3. Read-only; safe to call repeatedly.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressesYesArray of address records to resolve (1–100 per call). Each must include street `address`, `city`, and 2-letter `state`; `zip` is optional but improves precision. Optional per-row `price_min` / `price_max` (USD) bound that row's city/zip search-fallback rung — same semantics as `homes_get_by_address` (must be non-negative, min <= max; an invalid band fails only that row).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.0.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. First observedv1.1.1

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, and idempotent hints. The description goes far beyond, detailing fan-out rungs, per-row statuses (resolved/unresolved/pending/blocked), challenge handling for HTTP 403/429, preservation of input order, and that one bad row won't fail the whole call. 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?

The description is long but information-dense: every sentence covers a distinct concern (input format, fan-out behavior, output shape, statuses, retry guidance, ordering, usage threshold, safety). It front-loads the core purpose and keeps related details grouped.

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 fully carries the output contract: it specifies success/failure row shapes, matched_via enum values, status enum meanings, and error handling. It also covers input constraints, ordering, and when to use the tool, making it complete for a complex bulk operation.

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 already documents the addresses array shape, optional zip, and price_min/price_max semantics. The description repeats the shape briefly but adds no meaning beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Resolve'), resource ('street addresses to canonical homes.com property URLs'), and scale ('up to 100'). It clearly distinguishes itself from sibling homes_get_by_address by being the bulk counterpart and mentions the sibling by name.

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 directs when to use this tool: 'Use this instead of looping `homes_get_by_address` for any batch ≥ 3.' Also explains fallback behavior and per-row outcomes, so an agent knows when this tool is appropriate versus alternatives.

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