Taco Street Locating
Server Details
Free human-backed apartment locating for Austin, Dallas & Houston, TX. A free locator books tours.
- Status
- Healthy
- Uptime
- 100.0% over 58 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 9 tools
Most tools are clearly distinct (search_apartments vs get_apartment_details vs create_shortlist), and the research flow (request_apartment_research → get_research_request → request_research_tours) is well delineated. However, ask_a_locator and request_locator_help both route the renter to a human (Alexander), and create_shortlist vs request_apartment_research both center on a saved shortlist, creating mild overlap that descriptions mostly, but not entirely, resolve.
All names are snake_case with a consistent verb_noun structure: ask_a_locator, check_answer, create_shortlist, get_apartment_details, get_research_request, request_apartment_research, request_locator_help, request_research_tours, search_apartments. The pattern is predictable across the whole set.
Nine tools is well-scoped for an apartment locating service. Each tool covers a distinct step in the search → detail → shortlist → research → tour workflow, and the ask/check pair is justified by its polling design.
The surface covers the core lifecycle: search inventory, inspect a building, build a shortlist, request human research/help, poll results, and coordinate tours. Minor gaps exist—no tool to view or modify an existing saved shortlist, and no explicit comparison operation—but agents can work around these via the returned links and details.
Available Tools
9 toolsask_a_locatorAsk a human locatorAInspect
Ask a question only a human can answer — current specials, real availability, lease flexibility, 'is the pool actually open'. A human locator replies during Central Time business hours, usually within a few hours. STRONGLY include the renter's contact with consent so the locator can follow up directly (agent sessions end; polling alone can strand an answer). Returns a question_id for check_answer as a bonus channel. Rate limited; batch related questions into one. Answers are point-in-time facts.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Metro the question concerns. | |
| agent | No | Name of the referring assistant/product. | |
| contact | No | The renter's phone/email, supplied with their consent. Strongly recommended; otherwise immediately share contact_capture_url returned by this tool. | |
| question | Yes | The question for the human locator — specifics beat generalities. | |
| apartments | No | Buildings the question is about. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| guidance | No | |
| next_step | No | |
| question_id | Yes | |
| contact_status | No | |
| contact_capture_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: reply timing (Central Time business hours, usually within a few hours), rate limiting, the point-in-time nature of answers, and the warning that agent sessions end so polling alone can strand an answer. This is exactly the operational context annotations can't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then escalates to the critical contact/consent guidance and rate-limit note. Dense but every clause carries information; the parenthetical about sessions ending is slightly verbose but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still flags the question_id channel. Combined with timing, rate limits, and consent guidance, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description reinforces the consent requirement for contact and that specifics beat generalities for question, but adds no syntax or format detail beyond the schema — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (ask a question to a human locator) and sharply scopes it with 'only a human can answer', plus concrete example questions. It also implicitly distinguishes itself from the polling sibling by noting it returns a question_id for check_answer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it (real-time, human-only facts like current specials and availability) and operational guidance (batch related questions, rate limited, contact strongly recommended). It does not explicitly state when NOT to use it or name request_locator_help as an alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_answerCheck for a locator's answerARead-onlyIdempotentInspect
Poll the answer to an ask_a_locator question by question_id.
| Name | Required | Description | Default |
|---|---|---|---|
| question_id | Yes | The id returned by ask_a_locator. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| answer | No | |
| status | Yes | |
| guidance | No | |
| question | No | |
| answered_at | No | |
| question_id | Yes | |
| contact_note | No | |
| contact_capture_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that this is a polling operation (implying the answer may not be immediately available), which is useful context, but it does not disclose pending/failed states or retry expectations — the key behavioral detail for a poll tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action, resource, and keying parameter all appear immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the one parameter is covered. However, for a polling tool the description omits the behavior an agent most needs — what to do while the answer is unavailable — leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema as the id returned by ask_a_locator. The description's 'by question_id' adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (poll/check) and resource (the answer to an ask_a_locator question) keyed by question_id, and explicitly ties itself to the ask_a_locator sibling as the source of the id. Clear enough to distinguish from the sibling, though it doesn't contrast against other polling-style siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use of the word 'Poll' implies this is called after ask_a_locator and may need repeating until an answer exists, but the description never states when to call it, how often, or when to stop. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_shortlistCreate a shareable shortlistAInspect
Turn finalist apartments into a Taco Street link (/my-list?s=...) that opens the renter's saved list with those buildings added — compare, AI Read, and free tour requests live there. Use the EXACT names returned by search_apartments.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Metro, to disambiguate same-named buildings. | |
| agent | No | Name of the referring assistant/product. | |
| apartment_names | Yes | Exact building names from search_apartments to save to the renter's list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| note | No | |
| unmatched | No | |
| apartments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (write, non-idempotent, non-destructive, closed-world), so the bar is lower. The description adds real value beyond them: it discloses that buildings are appended to the renter's persistent saved list and that the return is a shareable /my-list?s=... URL with compare/AI Read/tour features. It doesn't warn about duplicate entries on repeat calls despite idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and output, followed by the critical naming constraint. Slightly padded by the feature list ('compare, AI Read, and free tour requests'), which is marketing color rather than calling guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return value needn't be explained, and the description still usefully characterizes the returned link. It covers the write effect (buildings added to a saved list) and input sourcing; only edge cases like duplicate handling or the 10-item cap (already in schema) are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all three parameters, making 3 the baseline. The description's 'Use the EXACT names returned by search_apartments' reinforces the apartment_names semantics but largely restates the schema's own wording, adding no new syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (turn finalist apartments into a shareable link) and a specific resource (Taco Street shortlist at /my-list), and explicitly ties it to the sibling search_apartments as its input source. An agent can distinguish this from search_apartments and get_apartment_details without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Turn finalist apartments into...' clearly implies this is the post-search step, used once a renter has narrowed candidates, and tells the agent to pull names from search_apartments. It gives a clear usage context but states no exclusions, no limit/duplication caveats, and no explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apartment_detailsGet apartment detailsARead-onlyIdempotentInspect
Full fact sheet for one building: floorplan-level pricing with as-of dates, move-in costs (admin/application/parking/pet fees), last-known specials (dated — treat as last-known, not current), amenities, walkability, virtual tour. Use the EXACT name from search_apartments. Compute totals yourself from components; a free human locator confirms live numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Metro, to disambiguate same-named buildings. | |
| name | Yes | Exact building name from search_apartments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| name | Yes | |
| pets | No | |
| address | No | |
| pricing | Yes | |
| building | No | |
| guidance | Yes | |
| specials | No | |
| neighborhood | No | |
| move_in_costs | No | |
| lifestyle_tags | No | |
| taco_street_take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), but the description adds freshness semantics neither the annotations nor schema carry: specials are 'last-known (dated — treat as last-known, not current)' and totals must be computed by the caller. That staleness caveat is exactly the kind of beyond-structured-fields disclosure that prevents an agent from misreporting data as live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense block with the payload front-loaded, then the input rule, then the computation/verification caveat. No filler sentences; every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description still supplies the data-freshness framing the schema omits. It is complete for a two-parameter read tool, only omitting any note on what happens when a building name is ambiguous or unmatched.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (name, city enum) are already documented in the schema, and the enum for city is self-explanatory. The description's 'EXACT name' instruction largely restates the schema's own 'Exact building name from search_apartments', so it adds little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Full fact sheet for one building') and enumerates the payload: floorplan pricing with as-of dates, move-in cost components, dated specials, amenities, walkability, virtual tour. It explicitly distinguishes itself from the sibling search_apartments by naming it as the source of the required name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use the EXACT name from search_apartments' tells the agent both the prerequisite and which sibling produces the input. 'Compute totals yourself from components; a free human locator confirms live numbers' routes the agent away from expecting live pricing here and toward ask_a_locator for confirmation, though it never states a when-not-to-use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_research_requestContinue apartment researchARead-onlyIdempotentInspect
Use the private request key to retrieve progress and, after Alexander approves, the reviewed report snapshot. No draft, contact details or internal notes are returned. Do not share the key or continuation link publicly.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ID returned by request_apartment_research. | |
| request_key | Yes | The original private request key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | |
| status | Yes | |
| criteria | No | |
| guidance | Yes | |
| duplicate | No | |
| apartments | No | |
| request_id | Yes | |
| continuation_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds value by stating that no draft, contact details, or internal notes are returned, and includes a security instruction about not sharing the key publicly. This goes beyond the annotations and provides useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary purpose is stated first, followed by exclusions and a security note. It is front-loaded and highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, output schema present, annotations cover safety), the description provides all necessary context: what it does, when to use it, what it excludes, and a security warning. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (request_id and request_key) are fully described in the schema. The description only restates the purpose of the key ('private request key') without adding new semantic meaning. Baseline 3 is appropriate when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves progress and, after approval, a reviewed report snapshot using a private key. It explicitly lists what is not returned, distinguishing it from other research-related tools. This is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use when you have a private request key and after Alexander approves. It implies the tool is for continuing an existing research request, but it does not explicitly contrast with sibling tools like request_apartment_research. The condition 'after Alexander approves' gives a usage hint, though no exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_apartment_researchRequest an apartment research reportAIdempotentInspect
Submit a saved shortlist and renter brief to Taco Street with consent. Staff accepts the request before paid research starts; VAs verify gaps, then Alexander adds his judgment. Returns a private continuation link. No immediate report, guaranteed completion time, or tour booking. No email is sent by this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Supported search market for this shortlist. | |
| agent | No | Self-reported referring assistant or product; not a verified partner identity. | |
| notes | No | Renter requirements and questions, not assistant-generated promises. | |
| consent | Yes | True only after the renter agrees to share this brief and contact for research and follow-up. | |
| contact | Yes | Renter's email or phone shared with consent for research follow-up. | |
| move_in | Yes | Move-in month YYYY-MM or exact date YYYY-MM-DD. Never invent a day; confirm the year. | |
| bedrooms | Yes | Bedroom count, 0 for a studio, 1–4 otherwise. | |
| budget_max | Yes | Monthly USD budget; specify its basis and flexibility separately. | |
| client_name | Yes | Renter's name shared with consent. | |
| request_key | Yes | Generate a fresh cryptographically random URL-safe key (at least 32 random bytes, 43 encoded characters). Keep it private. Reuse it only to retry this identical request and retrieve its status; a different brief needs a new key. | |
| budget_basis | No | base_rent, total_monthly, or unknown when the renter has not specified. | unknown |
| shortlist_token | Yes | The s parameter from the create_shortlist URL. | |
| lease_term_months | No | Requested lease length if known; omit when unknown. | |
| budget_flexibility | No | Defaults to target. Use hard_max only for an explicitly strict ceiling. | target |
| move_in_flexibility | No | Whether the move-in date is fixed or flexible. | flexible |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | |
| status | Yes | |
| criteria | No | |
| guidance | Yes | |
| duplicate | No | |
| apartments | No | |
| request_id | Yes | |
| continuation_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, destructive=false, idempotent=true, openWorld=false; the description adds genuinely new context: asynchronous human-in-the-loop flow (staff acceptance, VA gap verification, Alexander's judgment), no email being sent, no guaranteed completion time, and a private continuation link. It is consistent with the annotations and does not contradict them, though it does not discuss rate limits or permission/consent failure modes beyond mentioning consent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, with the core action front-loaded and the workflow/return/exclusions following in a logical order. The trailing negative-sentence ('No immediate report, guaranteed completion time, or tour booking') is dense but earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema description coverage, the description need not explain return payloads, and it still flags the continuation link. Combined with the annotations, an agent has enough to call this 15-parameter tool correctly, though the explicit sibling routing and retry semantics remain implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and 15 parameters are each documented in-schema (including the request_key idempotency rule and shortlist_token origin), so the schema carries the load. The description adds essentially no parameter-level detail beyond the 'with consent' framing, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource — 'Submit a saved shortlist and renter brief' — so the agent knows exactly what is being created. It also differentiates from the tour sibling by declaring 'No ... tour booking', and it names the concrete outcome ('private continuation link'). This is well beyond a restatement of the name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this applies (a paid-research request that requires staff acceptance, with no immediate report) and rules out tour booking, but it never explicitly says 'use request_research_tours instead for tours' or states prerequisites like needing a prior create_shortlist. Usage is inferable but not spelled out against the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_locator_helpRequest a free human locatorAIdempotentInspect
Hand the renter to Alexander, Taco Street's human locator, who confirms live pricing/availability and books tours — free to renters (properties pay locators). Follow-up arrives by TEXT or EMAIL, never a cold call. Requires the renter's real phone or email, shared with their consent. One request per renter — duplicates within 24h return the existing lead.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Metro the renter is searching (Austin, Dallas, Houston or San Antonio). | |
| name | No | The renter's name, if shared. | |
| note | No | Anything the locator should know. | |
| agent | No | Name of the referring assistant/product. | |
| contact | Yes | The renter's phone number or email (with their consent). | |
| move_in | No | Move-in timeline, e.g. 'November'. | |
| bedrooms | No | Bedroom count the renter needs, e.g. 1BR. | |
| budget_max | No | The renter's max monthly rent in USD. | |
| neighborhoods | No | Neighborhoods the renter prefers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lead_id | Yes | |
| message | Yes | |
| success | Yes | |
| duplicate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-read-only, idempotent, non-destructive, closed-world write; the description adds real context beyond that — it's free (properties pay locators), follow-up arrives by text/email rather than a cold call, and duplicate submissions within 24h return the existing lead, which directly explains the idempotentHint. Consent and real-contact requirements are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and actor, then funding model, contact channel, and dedup rule. Every sentence carries information the agent needs; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return-value detail isn't required, and the description still covers the one non-obvious return behavior (duplicate returns the existing lead). Consent requirements, cost, follow-up channel, and the actor are all addressed, leaving no gap for an agent deciding whether to call this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-field descriptions for all nine parameters, so the baseline is 3. The description reinforces the critical 'contact' requirement (real phone or email, with consent) but adds no format or syntax detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb and resource — handing a renter to a named human locator who confirms live pricing/availability and books tours — so the agent knows exactly what the call accomplishes. It does not explicitly distinguish itself from the sibling ask_a_locator, which is the main thing keeping this from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage conditions: requires the renter's real phone/email shared with consent, one request per renter, and duplicates within 24h return the existing lead. What's missing is an explicit when-not or a named alternative (e.g. ask_a_locator) for cases where a request has already been made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_research_toursRequest tours from your reviewed researchAIdempotentInspect
After report approval and explicit renter consent, request human tour coordination for selected apartments. Include preferred dates, times and timezone in preferred_times. Uses the existing private research key and contact. One handoff per research report; identical retries return the existing request, changed preferences require staff follow-up. No appointment is booked or message sent.
| Name | Required | Description | Default |
|---|---|---|---|
| consent | Yes | True only after the renter explicitly agrees to tour coordination using their saved contact. | |
| request_id | Yes | ID of the approved research request. | |
| request_key | Yes | Original private research access key. Never share publicly. | |
| apartment_names | Yes | Exact apartment names from this report to discuss touring. | |
| preferred_times | Yes | Renter-provided preferred dates, times and timezone; preferences are not confirmed appointments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | |
| status | Yes | |
| criteria | No | |
| guidance | Yes | |
| duplicate | No | |
| apartments | No | |
| request_id | Yes | |
| continuation_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true but the description adds concrete behavioral detail: 'identical retries return the existing request, changed preferences require staff follow-up.' It also clarifies side effects with 'No appointment is booked or message sent' and notes the private key/contact usage. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and precondition, then packs behavioral constraints into compact sentences. The line about preferred_times is mildly redundant with the schema, but every other sentence adds distinct value and the overall length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four required parameters, an output schema, and annotations, the description covers preconditions, idempotency, side effects, contact/key usage, and the handoff limit. Nothing an agent needs to avoid misinvocation is missing; the only omitted details are already covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description's 'Include preferred dates, times and timezone in preferred_times' largely echoes the schema's parameter description. No additional semantic meaning is added beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'request human tour coordination for selected apartments.' Adds scoping conditions 'After report approval and explicit renter consent' and 'Uses the existing private research key and contact,' which clearly separates this from sibling request_apartment_research without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: 'After report approval and explicit renter consent' states when this tool is valid, and 'One handoff per research report' sets an important boundary. It does not explicitly name alternatives or exclusions, but the prerequisites are strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apartmentsSearch apartmentsARead-onlyIdempotentInspect
Search Taco Street's curated apartment inventory in Austin, Dallas, Houston or San Antonio, TX. Returns scored matches with starting prices and a short 'why' per building. Use for long-term rentals only.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Metro to search. | |
| limit | No | How many scored matches to return (1-10). | |
| query | No | What the renter wants, in plain language (e.g. 'walkable, dog-friendly, near downtown'). | |
| bedrooms | No | Bedroom count the renter needs. | |
| budget_max | No | Max monthly rent in USD. | |
| neighborhoods | No | Preferred neighborhoods, if the renter named any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| note | No | |
| count | Yes | |
| apartments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so the safety profile is fully covered structurally. The description adds a light behavioral detail (scored matches with starting prices and a 'why' per building) and the long-term-rental restriction, but nothing about pagination, ranking logic, or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the scope (cities) front-loaded and the use restriction trailing as a qualifier. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return shape, and it still summarizes what comes back. It covers scope, output flavor, and the rental-type restriction, but stops short of any guidance on when to escalate to detail or research siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the city enum, limit bounds, and a plain-language query example all documented in the schema itself. The description adds no syntax or format guidance beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (Taco Street's curated apartment inventory), and pins the scope to four named metros. It clearly reads as a discovery/search tool, though it never names a sibling like get_apartment_details to draw the boundary explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for long-term rentals only' gives a real inclusion constraint, narrowing the tool to a rental use case. However, it does not name alternatives (e.g., get_apartment_details, request_apartment_research) or say when this tool is the wrong choice for a given intent.
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.
4 tool updates
- Changed
create_shortlist1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "Austin", - "Dallas", - "Houston" -]New value: +[ + "Austin", + "Dallas", + "Houston", + "San Antonio" +]
- Changed
get_apartment_details1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "Austin", - "Dallas", - "Houston" -]New value: +[ + "Austin", + "Dallas", + "Houston", + "San Antonio" +]
- Changed
request_locator_help1 field changed- changed
Input schema / properties / city / descriptionPrevious value: -"Metro the renter is searching (Austin, Dallas or Houston)."New value: +"Metro the renter is searching (Austin, Dallas, Houston or San Antonio)."
- Changed
search_apartments1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "Austin", - "Dallas", - "Houston" -]New value: +[ + "Austin", + "Dallas", + "Houston", + "San Antonio" +]
1 tool update
- Changed
request_apartment_research3 fields changed- removed
Input schema / properties / city / enumRemoved value: -[ - "Austin", - "Dallas", - "Houston" -] - added
Input schema / properties / city / maxLengthAdded value: +40 - added
Input schema / properties / city / minLengthAdded value: +1
2 tool updates
- Changed
ask_a_locator4 fields changed- changed
Input schema / properties / contact / descriptionPrevious value: -"The renter's phone/email — strongly recommended: the answer is texted/emailed to them directly, and polling alone can strand it."New value: +"The renter's phone/email, supplied with their consent. Strongly recommended; otherwise immediately share contact_capture_url returned by this tool." - added
Output schema / properties / contact_capture_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / contact_statusAdded value: +{ + "enum": [ + "contactable", + "anonymous" + ], + "type": "string" +} - added
Output schema / properties / next_stepAdded value: +{ + "type": "string" +}
- Changed
check_answer2 fields changed- added
Output schema / properties / contact_capture_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / contact_noteAdded value: +{ + "type": "string" +}
3 tool updates
- Added
get_research_request - Added
request_apartment_research - Added
request_research_tours
6 tool updates
- Changed
ask_a_locator3 fields changed- added
Input schema / properties / city / descriptionAdded value: +"Metro the question concerns." - added
Input schema / properties / question / descriptionAdded value: +"The question for the human locator — specifics beat generalities." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "guidance": { + "type": "string" + }, + "question_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "question_id", + "status" + ], + "type": "object" +}
- Changed
check_answer2 fields changed- added
Input schema / properties / question_id / descriptionAdded value: +"The id returned by ask_a_locator." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "answer": { + "type": [ + "string", + "null" + ] + }, + "answered_at": { + "type": [ + "string", + "null" + ] + }, + "guidance": { + "type": "string" + }, + "note": { + "type": "string" + }, + "question": { + "type": "string" + }, + "question_id": { + "type": "string" + }, + "status": { + "enum": [ + "open", + "answered" + ], + "type": "string" + } + }, + "required": [ + "question_id", + "status" + ], + "type": "object" +}
- Changed
create_shortlist3 fields changed- added
Input schema / properties / apartment_names / descriptionAdded value: +"Exact building names from search_apartments to save to the renter's list." - added
Input schema / properties / city / descriptionAdded value: +"Metro, to disambiguate same-named buildings." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "apartments": { + "items": { + "type": "string" + }, + "type": "array" + }, + "note": { + "type": "string" + }, + "unmatched": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url", + "apartments" + ], + "type": "object" +}
- Changed
get_apartment_details2 fields changed- added
Input schema / properties / city / descriptionAdded value: +"Metro, to disambiguate same-named buildings." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "address": { + "type": "string" + }, + "building": { + "additionalProperties": true, + "type": "object" + }, + "city": { + "type": "string" + }, + "guidance": { + "type": "string" + }, + "lifestyle_tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "move_in_costs": { + "additionalProperties": true, + "type": "object" + }, + "name": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "pets": { + "type": "string" + }, + "pricing": { + "additionalProperties": true, + "type": "object" + }, + "specials": { + "additionalProperties": true, + "type": "object" + }, + "taco_street_take": { + "type": "string" + } + }, + "required": [ + "name", + "city", + "pricing", + "guidance" + ], + "type": "object" +}
- Changed
request_locator_help6 fields changed- added
Input schema / properties / bedrooms / descriptionAdded value: +"Bedroom count the renter needs, e.g. 1BR." - added
Input schema / properties / budget_max / descriptionAdded value: +"The renter's max monthly rent in USD." - added
Input schema / properties / city / descriptionAdded value: +"Metro the renter is searching (Austin, Dallas or Houston)." - added
Input schema / properties / name / descriptionAdded value: +"The renter's name, if shared." - added
Input schema / properties / neighborhoods / descriptionAdded value: +"Neighborhoods the renter prefers." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "duplicate": { + "type": "boolean" + }, + "lead_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "lead_id", + "message" + ], + "type": "object" +}
- Changed
search_apartments4 fields changed- added
Input schema / properties / bedrooms / descriptionAdded value: +"Bedroom count the renter needs." - added
Input schema / properties / limit / descriptionAdded value: +"How many scored matches to return (1-10)." - added
Input schema / properties / neighborhoods / descriptionAdded value: +"Preferred neighborhoods, if the renter named any." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "apartments": { + "items": { + "additionalProperties": true, + "properties": { + "city": { + "type": "string" + }, + "estimated_price": { + "type": [ + "string", + "number" + ] + }, + "is_pet_friendly": { + "type": "boolean" + }, + "matchScore": { + "type": "number" + }, + "name": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "pricing_as_of": { + "type": "string" + }, + "specials_last_known": { + "type": "string" + }, + "starting_prices": { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + "website": { + "type": "string" + }, + "whyChosen": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "city": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "note": { + "type": "string" + } + }, + "required": [ + "city", + "count", + "apartments" + ], + "type": "object" +}
1 tool update
- Added
get_apartment_details
1 tool update
- Changed
ask_a_locator1 field changed- changed
Input schema / properties / contact / descriptionPrevious value: -"Optional: the renter's phone/email so the answer reaches them directly too."New value: +"The renter's phone/email — strongly recommended: the answer is texted/emailed to them directly, and polling alone can strand it."
5 tool updates
- First observed
ask_a_locator - First observed
check_answer - First observed
create_shortlist - First observed
request_locator_help - First observed
search_apartments
Related MCP Connectors
Agent-first Austin events concierge — fresh, sourced answers to what's happening in Austin.
Zoning, homes per lot, short-term rentals, tax and flood for any property in Austin and Nashville.
Search Austin-area MLS listings. Free with signup; comps and market stats are paid.
Apartment hunting across 13 US states: rents, briefs, hunt links.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search, compare, and interact with Apartments.com rental listings, including scheduling tours and contacting property managers.6 npmMIT

Buzzedin MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables searching active NYC rental apartments and lease takeovers with filters for price, bedrooms, commute, amenities, and more, plus creating links to set up alerts for new matches.MIT- AlicenseAqualityDmaintenanceProvides US real estate data including housing stats, demographics, nearby amenities, area comparisons, cost-of-living analysis, and neighborhood search via free public APIs without any API keys.6MIT
- FlicenseNot gradedqualityDmaintenanceProvides free property and parcel intelligence using official US government data APIs, county assessor records, and live listings, with tools for hazard risk checks, affordability calculations, and parcel ranking.-
Glama MCP Gateway
Add one secure layer between your agents and this server.