Server has 6 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (altos_*) and are READ_ONLY. Descriptions are clear and domain-specific (10 - 150 chars, within baseline). However, output schemas are completely undocumented, the code returns parsed CSV data or JSON but never specifies what fields agents should expect. Parameters lack enums for constrained values (e.g., res_type, quartile, type should be enums). No error handling guidance, no pagination documentation despite tools returning lists. API key exposure via _altosKey parameter violates secret-injection pattern. Missing per-parameter type constraints (e.g., weeks max 52 is stated in description but not enforced in schema).
Get active listing-level data for a region — individual property details including address, price, beds, baths, and square footage.
Get inventory trend over multiple weeks — tracks inventory, new listings, days on market, median price, and percent price decreased over time.
List available data files for a region — returns the catalog of downloadable data files from Altos Research.
Get aggregated market statistics for a region — inventory, new listings, median price, days on market, and market action index.
Get new listings (on market less than a week) for a region — freshly listed properties.
Get pending sales (under contract) for a region — properties that have accepted offers but have not yet closed.
Output schemas completely undocumented. Code returns parsed CSV rows or JSON objects, but tool definitions never specify what fields agents should expect. LLMs cannot plan downstream calls or extract data reliably.
API key exposed as _altosKey parameter. Credentials must never appear in tool parameters, they are logged in traces and prompt history. Use server-side secret injection via environment variables.
Constrained parameters lack enum declarations. res_type (single_family|multi_family), quartile (ALL|FIRST|SECOND|THIRD|FOURTH), and type (stats|listings|listings-new|pendings) should be enums, not free-form strings. Enums are self-documenting and prevent hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No pagination or result-limit documentation. Tools returning lists (active_listings, pending_sales, new_listings) accept a limit parameter but do not document max results, total count, or next_cursor. Large result sets risk context window exhaustion.
No error handling guidance. Code throws generic errors ('Altos API error (status): text') without recovery hints. LLMs cannot determine if errors are retryable, user-fixable, or fatal.