FastAPI-based apartment search agent pipeline using Google ADK with multi-agent orchestration (Manager, Analyst, Reviewer, Summarizer) for finding and analyzing apartments with commute and amenity analysis
5 tools with mixed quality. All have descriptions (10-200 chars, mostly adequate) and input schemas with typed parameters. However, schemas lack output documentation entirely, LLMs cannot plan downstream calls without knowing return structure. Parameter descriptions are present but often generic (e.g., 'List of lat,lng coordinate strings' without format validation). No error handling guidance, no recovery hints. Tool naming is clear (verb_noun pattern), but composition shows tight coupling: store_requirements writes session state that other tools implicitly depend on, violating single-responsibility. Baseline: 549 production tools average 194 chars description, 100% have param descriptions, this server meets that bar but lacks output schemas (0% documented) and error recovery patterns.
Calculates commute times and distances from apartment locations to a landmark using Google Maps Directions API
Fetches apartment listings matching user criteria (city, state, budget, bedrooms, bathrooms) from RentCast or Apify provider with monthly guardrails
Finds nearby amenities (transit stations, categories, named places) within a radius of apartment locations using Google Places API
Performs web search for neighborhood safety information using Google Search API (via google-adk)
Stores user apartment search requirements (city, state, budget, landmark, optional bedrooms/bathrooms/roommates) to session state for the research pipeline
No output schemas documented for any tool. LLMs cannot infer return structure, field names, or types. Downstream tool chaining requires explicit knowledge of what each tool returns (e.g., does fetch_apartments return lat/lng for check_commutes to consume?). This forces agents to guess or make discovery calls.
store_requirements writes session state that other tools depend on implicitly. This violates single-responsibility and creates hidden coupling. Agents cannot reason about whether to call store_requirements before fetch_apartments without trial-and-error.
Parameter descriptions lack format constraints. 'List of lat,lng coordinate strings' does not specify: are they comma-separated? Space-separated? What precision? Regex pattern? LLMs will guess and pass malformed coordinates.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No error handling guidance. Tools call external APIs (RentCast, Google Maps, Google Places) but descriptions do not explain what happens on rate limits, API failures, or invalid input. Agents have no recovery path.
fetch_apartments accepts 'max_budget' but store_requirements accepts 'budget' and 'budget_is_per_person'. Inconsistent naming and semantics force agents to reason about field mappings. Should unify parameter names across tools.