AVnester — Indian Real Estate Intelligence
Server Details
Indian real estate: property search, locality insights, affordability & pan-India stamp-duty tools.
- Status
- Healthy
- Uptime
- 99.9% over 49 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
The set is mostly distinct: search→details→compare_properties, locality insights vs. compare_localities, and the loan/tax calculators each have clear scopes. Minor overlap remains between calculate_home_affordability and get_property_decision_intelligence, since both address affordability/EMI, and between get_locality_insights and compare_localities, though descriptions help separate them.
Every tool uses a consistent snake_case, verb-first pattern: calculate_, compare_, estimate_, get_, optimize_, search_, simulate_. The naming is predictable and readable throughout.
11 tools is well within the ideal 3–15 range for a real estate intelligence server. Each tool maps to a recognizable job: search, inspect, compare, calculate affordability, taxes, refinance, and prepayment.
Core buy-side workflows are covered: property search/details, locality comparison, affordability/decision intelligence, stamp duty, tax regime, refinancing, and prepayment. Some adjacent operations are absent, such as rental yield/rent-vs-buy or a standalone property valuation, but agents can largely work around them with existing tools.
Available Tools
11 toolscalculate_home_affordabilityEstimate home-loan EMI (calculator)ARead-onlyIdempotentInspect
Estimate the monthly home-loan EMI / monthly payment in India — a home-loan calculator. Deterministic math; not advice or a loan-approval claim. Two modes: pass propertyValue (80% LTV assumed) OR loanAmount for a specific loan (e.g. "₹50 lakh loan"). Use for "what would my EMI be" / "monthly payment on …". The response assumptionNote states the basis in plain words. Always surface the disclaimer field.
| Name | Required | Description | Default |
|---|---|---|---|
| loanAmount | No | Loan amount in INR. Pass this when the user states a specific loan (e.g. "₹50 lakh loan") rather than a property price. Defaults to 80% of propertyValue if omitted. | |
| tenureYears | No | Loan tenure in years. Defaults to 20. | |
| propertyValue | Yes | Property value (price) in INR. When the user states a property/home price, put it here — an 80% loan is assumed unless loanAmount is also given. | |
| interestRatePercent | No | Annual interest rate (percent). Defaults to current market estimate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| emi | Yes | |
| cards | Yes | |
| disclaimer | Yes | |
| loanAmount | Yes | |
| assumptions | Yes | |
| attribution | Yes | |
| tenureYears | Yes | |
| totalPayment | Yes | |
| totalInterest | Yes | |
| assumptionNote | Yes | |
| inputPropertyValue | Yes | |
| interestRatePercent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and not destructive. The description adds value by clarifying it is 'deterministic math; not advice or a loan-approval claim' and mentions the response includes assumptionNote and disclaimer, which goes beyond what annotations provide.
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 concise with 5 sentences, each serving a purpose (purpose, nature, usage modes, output hint). It is front-loaded with the main action and free of unnecessary words.
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 complexity (4 parameters, output schema present), the description covers the two modes, mentions response fields (assumptionNote, disclaimer), and specifies geographic context (India). It is complete for an agent to correctly invoke this tool.
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 baseline is 3. The description reiterates the mode distinction (propertyValue vs loanAmount) but adds no substantial new meaning beyond what the schema already explains about each parameter.
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 it estimates monthly home-loan EMI for India, using specific verbs like 'estimate' and defining resource as 'home-loan calculator'. It distinguishes from sibling tools by specifying it's for EMI calculation, not comparisons or other fees.
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 explicitly states when to use it ('what would my EMI be' / 'monthly payment on …') and explains the two modes (propertyValue or loanAmount). While it doesn't list when not to use or directly compare to siblings, the context is clear given the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_balance_transferCompare home-loan balance transfer (calculator)ARead-onlyIdempotentInspect
Compare staying on your current home loan vs. transferring (refinancing) to a lower rate. Pure deterministic math — no advice, no loan-approval claim. Use when the user asks "should I switch lenders / transfer my loan / refinance". Returns new EMI, interest saved over the remaining tenure, switching cost, net saving, and the breakeven month. Always surface the disclaimer field.
| Name | Required | Description | Default |
|---|---|---|---|
| flatCosts | No | Flat legal + valuation charges in INR. Defaults to ₹12,500. | |
| newRatePercent | Yes | New lender annual interest rate (percent). | |
| processingFeePct | No | New-lender processing fee on the balance (percent). Defaults to 0.5%. | |
| currentRatePercent | Yes | Current annual interest rate (percent). | |
| outstandingPrincipal | Yes | Current outstanding home-loan principal in INR. | |
| remainingTenureYears | Yes | Years left on the loan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| newEmi | Yes | |
| worthIt | Yes | |
| netSaving | Yes | |
| currentEmi | Yes | |
| disclaimer | Yes | |
| assumptions | Yes | |
| attribution | Yes | |
| switchingCost | Yes | |
| newRatePercent | Yes | |
| breakevenMonths | Yes | |
| monthlyEmiSaving | Yes | |
| newTotalInterest | Yes | |
| currentRatePercent | Yes | |
| grossInterestSaved | Yes | |
| currentTotalInterest | Yes | |
| outstandingPrincipal | Yes | |
| remainingTenureYears | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral context beyond annotations: 'Pure deterministic math — no advice, no loan-approval claim' and 'Always surface the disclaimer field.' Annotations already indicate readOnly/idempotent/non-destructive; description enriches with operational constraints.
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 sentences, front-loaded with purpose, no unnecessary words. Each sentence earns its place: purpose, usage guidance, and output summary with disclaimer note.
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?
Despite 6 parameters and required outputs, the description covers all key aspects: what it compares, when to use, what it returns (including disclaimer). Output schema exists so return values are further detailed; description provides sufficient high-level completeness.
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 each parameter is described in the schema. Description does not add further parameter details but summarizes outputs. Baseline score of 3 applies as description adds no extra parameter meaning.
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?
Description clearly states it compares staying vs. transferring a home loan, lists what it returns, and explicitly says when to use it (user asks about switching/refinancing). Distinguishes from siblings like simulate_loan_prepayment.
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 explicit usage context: 'Use when the user asks...' and clarifies it is pure math with no advice/approval. Lacks explicit when-not-to-use or alternative tools, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_localitiesCompare Indian localities head-to-headARead-onlyIdempotentInspect
Compare 2–3 localities in one city side-by-side: price trends, livability, investment grade, strengths, and watchouts. Use when the user asks "X vs Y" or "which is better for buying/renting" about neighborhoods. Covers cities AVnester publishes locality guides for; others return supported=false — surface the scopeMessage. For specific LISTINGS by ID, use compare_properties instead.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Indian city covering all compared localities. | |
| localities | Yes | 2–3 localities to compare (array, not comma-separated string). | |
| propertyType | No | Property type for comparison. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| cards | Yes | |
| supported | Yes | |
| comparison | Yes | |
| disclaimer | Yes | |
| handoffUrl | Yes | |
| localities | Yes | |
| attribution | Yes | |
| scopeMessage | No | |
| supportedCities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so safety is covered. The description adds genuinely new behavior: unsupported cities return supported=false and a scopeMessage the agent should surface. It does not describe result shape, but an output schema exists to cover that.
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 dense sentences, fully front-loaded: capability first, then trigger, then scope caveat and sibling routing. No filler and nothing that could be dropped without losing routing signal.
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?
For a read-only comparison tool with an output schema and full annotation coverage, the description supplies the remaining gaps an agent needs: input cardinality, trigger phrasing, scope failure mode, and sibling disambiguation.
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 three parameters. The description adds the same-city constraint ('2–3 localities in one city') and the supported-city scope, but nothing about propertyType or value formats beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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 ('Compare 2–3 localities in one city side-by-side') and enumerates what is compared: price trends, livability, investment grade, strengths, watchouts. It explicitly distinguishes itself from compare_properties, which handles listings by ID.
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 an explicit trigger ('X vs Y', 'which is better for buying/renting'), names the alternative tool with the condition that selects it, and states scope limits for unsupported cities with the supported=false/scopeMessage fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_propertiesCompare AVnester properties (trade-offs)ARead-onlyIdempotentInspect
Compare 2–5 AVnester listings by listingId, side-by-side. Get IDs from search_properties first (not guessable). If the user has more than 5 candidates ("compare all"), pick the most relevant 5 (cheapest / largest / best ₹/sqft) and say so. Returns each listing plus pricePerSqft, vsCheapestPercent (0 = cheapest), vsLargestAreaPercent (0 = largest). Unknown IDs return not_found_or_unpublished. Does NOT recommend a purchase. Show verification.caveats with verified. Always surface the disclaimer.
| Name | Required | Description | Default |
|---|---|---|---|
| listingIds | Yes | 2–5 AVnester listingIds (from search_properties results) to compare. IDs are not guessable — call search_properties first. Order is preserved in the output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| framing | Yes | |
| message | No | |
| comparison | Yes | |
| disclaimer | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only/idempotent safety, and the description adds behavioral context the annotations cannot: unknown IDs return not_found_or_unpublished, output includes derived fields (pricePerSqft, vsCheapestPercent, vsLargestAreaPercent), it does NOT recommend a purchase, and verification.caveats/disclaimer must be surfaced. This goes well beyond the annotation baseline.
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 action and cardinality, then prerequisites, overload handling, output fields, error behavior, and required surfacing. Every sentence carries a distinct operational instruction; 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?
Despite high schema/annotation richness and an output schema, the description covers edge cases an agent would otherwise guess wrong: unknown-ID error string, no-recommendation constraint, and mandatory caveat/disclaimer surfacing. Nothing needed to invoke it correctly is missing.
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 3-baseline applies, but the description adds meaning beyond the schema: derivations of returned fields (0 = cheapest, 0 = largest) and order preservation, plus the ID provenance constraint. These are useful but some are output semantics rather than input semantics.
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 and resource ('Compare 2–5 AVnester listings by listingId, side-by-side') and names a distinguishing sibling (search_properties) that produces the required IDs. An agent can separate this from search_properties, get_property_details, and compare_localities without opening any 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?
Explicitly states both when to use it and the prerequisite ('Get IDs from search_properties first (not guessable)'). It also handles the overload case ('compare all' with >5 candidates) by instructing the agent to pick the most relevant 5 and disclose that choice, an unusual and useful routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_stamp_duty_and_registrationEstimate stamp duty + registration (calculator)ARead-onlyIdempotentInspect
Estimate Indian state stamp duty + registration charges on a property purchase. Supports all 28 states + 8 UTs with buyer-gender concessions, urban/rural overrides, and commercial/agricultural multipliers. Pass constructionStatus to also itemize GST (under-construction 1%/5%, ready/resale 0%) for an all-in statutory quote. Returns supported=false for states outside India (supported set named in rateBasis). Not legal/tax advice. Always surface the disclaimer.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City or town, e.g. "Pune". Decides the rate where the state prices by location (MH, KA, WB, MP, HR): Pune 7%, Mumbai 6%. Send the place as the buyer names it ("Kharghar"), not the wider city it is listed under. | |
| state | Yes | Indian state — ISO code ("MH"), slug ("maharashtra") or name ("Maharashtra"). Required. | |
| isUrban | No | Urban (default) or rural. Used for the location when city and localBody are absent. | |
| firstSale | No | True for the FIRST sale of a flat, from the builder (not the buyer's first home); false for a resale. Changes the duty only where a state has a first-sale rate (KA). Omit when unknown: a resale is priced, and said where it matters. Absent: constructionStatus under_construction ⇒ true, resale ⇒ false, ready_to_move decides nothing (may be a resale). | |
| localBody | No | Where the property is, in a state that prices by it (MH, KA, WB, MP, HR): gram_panchayat (village), municipal_council (town) or municipal_corporation (city); overrides city. Omit when unknown (a corporation is priced, and said). | |
| buyerGender | No | "female" (a woman), "joint" (a man and a woman together) or "male" (default; two women: female). Changes the price only where a state gives women a concession. Overrides isWomanBuyer. | |
| isWomanBuyer | No | Backward-compatibility shim — prefer buyerGender. When true, internally treated as buyerGender="female". | |
| propertyType | No | residential (default), plot (bare land; a residential-only concession does not reach it), commercial or agricultural. | |
| propertyValue | Yes | Sale value in INR for stamp-duty calculation. | |
| carpetAreaSqft | No | Carpet area (sqft) — with value, decides the affordable-housing 1% GST slab. | |
| constructionStatus | No | When set, also itemizes GST: under-construction = 1% (affordable) / 5%; ready/resale = 0%. Omit → GST not computed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gst | No | |
| cards | Yes | |
| state | Yes | |
| total | Yes | |
| location | Yes | |
| rateBasis | Yes | |
| stampDuty | Yes | |
| stateCode | Yes | |
| stateName | Yes | |
| supported | Yes | |
| disclaimer | Yes | |
| surcharges | Yes | |
| assumptions | Yes | |
| attribution | Yes | |
| rulesVersion | Yes | |
| totalWithGst | No | |
| propertyValue | Yes | |
| stampDutyBase | Yes | |
| registrationFee | Yes | |
| rateVerification | Yes | |
| rateEffectiveDate | Yes | |
| registrationCapApplied | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds meaningful behavior: unsupported-state returns (supported=false, supported set named in rateBasis), GST itemization triggered by constructionStatus, and the mandatory disclaimer plus 'not legal/tax advice'. It does not discuss precision or estimation caveats, so not a 5.
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 sentences, front-loaded with the core purpose before optional features and caveats. Each sentence carries distinct information: scope, geographic/parameter support, GST behavior, and the unsupported/disclaimer caveats. 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?
For an 11-parameter calculator with an output schema present, the description covers what the schema does not: unsupported-input behavior, GST expansion, disclaimer obligation, and the legal-advice boundary. Nothing an agent needs to invoke it correctly is missing.
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 baseline is 3, but the description adds cross-parameter semantics the schema does not: constructionStatus driving GST rates, buyer-gender concessions, urban/rural overrides, and commercial/agricultural multipliers. This meaningfully complements the per-parameter schema text.
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 and resource ('Estimate Indian state stamp duty + registration charges on a property purchase') and immediately delimits scope: all 28 states + 8 UTs, with gender concessions and urban/rural and property-type multipliers. This is clearly distinguishable from the loan- and search-oriented siblings like calculate_home_affordability or compare_properties.
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 real conditional guidance: 'Pass constructionStatus to also itemize GST', and the supported=false behavior for states outside India tells the agent when the tool will not answer. It also flags that the disclaimer must be surfaced. It stops short of naming an explicit alternative or a 'do not use this for X' exclusion, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locality_insightsGet locality market insightsARead-onlyIdempotentInspect
Get aggregated insights for one locality: ₹/sqft, supply count, demand pulse, livability/investment grade, highlights, watchouts, monthly priceTrends, and strengthTags. Use when the user asks "what is X locality like". Covers cities AVnester publishes locality guides for; others return supported=false — surface the scopeMessage. Always surface the disclaimer field when returning livability or investment grade.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Indian city (required). | |
| locality | Yes | Locality name within an Indian city. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| cards | Yes | |
| message | No | |
| insights | Yes | |
| locality | Yes | |
| freshness | Yes | |
| supported | Yes | |
| disclaimer | Yes | |
| handoffUrl | Yes | |
| attribution | Yes | |
| scopeMessage | No | |
| supportedCities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds two genuinely useful behavioral contracts beyond that: unsupported cities return supported=false with a scopeMessage to surface, and the disclaimer field must always be surfaced with livability/investment grades.
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?
Compact and front-loaded: the field inventory comes first, then the trigger, then scope and disclaimer obligations. The field list is slightly dense, but no sentence is wasted.
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, yet the description adds the coverage boundary (supported=false/scopeMessage) and the mandatory disclaimer behavior an agent must honor. Combined with the fully documented two-parameter schema, it is nearly complete for this tool's complexity.
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 both required parameters (city, locality) carry their own schema descriptions, so the description adds no syntax, format, or matching nuance beyond the structured data. Baseline 3 is appropriate when the schema does the heavy lifting.
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 and resource ('get aggregated insights for one locality') and enumerates the returned attributes (₹/sqft, supply count, demand pulse, grades, priceTrends, strengthTags). This clearly separates it from the plural sibling compare_localities without opening either 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?
Gives an explicit trigger ('Use when the user asks "what is X locality like"') plus scope guidance (only cities AVnester publishes guides for) and the fallback behavior for unsupported cities. It does not name compare_localities as the alternative for multi-locality questions, so routing between the two is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_decision_intelligenceHome purchase decision intelligenceARead-onlyIdempotentInspect
Assess whether a buyer can afford a specific Indian home — ONE verdict (AFFORDABLE / STRETCH / NOT_YET / INELIGIBLE) combining indicative eligibility (FOIR/LTV/CIBIL), EMI, true cash-to-close (down payment + stamp duty + registration + itemized GST), regime-aware tax, and an indicative lender-fit triage. Mode A: an AVnester listingId. Mode B: propertyValue + state (any Indian state). NOT a loan approval, offer, or advice. Always surface the disclaimer.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City (manual mode), e.g. "Pune" — decides Maharashtra stamp duty and the GST metro cap. Listing mode reads the listing. | |
| state | No | Indian state (ISO "MH"/slug/name) for stamp duty. Required in manual mode; ignored in listing mode. | |
| isUrban | No | Urban (default) or rural, where the state prices by location (MH, KA, WB, MP, HR); localBody or a known city decides instead. | |
| assetType | No | "home" (flat/villa/house) or "plot" (bare land); manual mode only. Plot → shorter tenure, no home-loan tax benefit. | |
| firstSale | No | True for the FIRST sale of a flat, from the builder (not the buyer's first home); false for a resale. Changes the duty only where a state has a first-sale rate (KA). Omit when unknown: a resale is priced, and said where it matters. If absent, isUnderConstruction true means true. | |
| jointLoan | No | Joint home loan — doubles 80C/24b caps (equal split). | |
| listingId | No | An AVnester listingId. Listing mode — propertyValue, state and city are then ignored, with a warning. | |
| localBody | No | Where the property is, in a state that prices by it (MH, KA, WB, MP, HR): gram_panchayat (village), municipal_council (town) or municipal_corporation (city); overrides city. Omit when unknown (a corporation is priced, and said). Manual mode only. | |
| annualRent | No | Annual rent received (let-out). | |
| cibilScore | No | Numeric CIBIL score. Omit → eligibility stays indicative. | |
| buyerGender | No | "female" (a woman), "joint" (a man and a woman together) or "male" (default; two women: female). Changes the price only where a state gives women a concession. | |
| tenureYears | No | Loan tenure in years. Defaults to 20. | |
| propertyValue | No | Property price in INR (manual mode). Pass with state (and city where it matters). | |
| carpetAreaSqft | No | Carpet area (sqft) — sharpens the affordable-housing GST test (with the ₹45L value cap). | |
| employmentType | No | Employment type (affects tax standard deduction). | |
| occupancyIntent | No | Self-occupied vs let-out — changes §24(b) interest treatment. Omitted → self-occupied. | |
| residencyStatus | No | Residency status. | |
| monthlyNetIncome | Yes | Buyer monthly take-home income in INR. | |
| savingsAvailable | No | Liquid cash for down payment + charges — enables the cash-gap calc. | |
| annualIncomeForTax | No | Annual income for tax. Defaults to monthlyNetIncome × 12. | |
| existingMonthlyEmis | No | Existing monthly loan EMIs in ₹ (car/personal/cards). Omitted → assumed ₹0, which can inflate eligibility and flip the verdict — ask the buyer. | |
| interestRatePercent | No | Override annual interest rate. Defaults to indicative market rate. | |
| isUnderConstruction | No | Under-construction → GST applies; ready-to-move → no GST. Omitted → ready-to-move (no GST). | |
| coApplicantMonthlyIncome | No | Co-applicant monthly income (joint affordability). |
Output Schema
| Name | Required | Description |
|---|---|---|
| emi | No | |
| tax | No | |
| mode | No | |
| cards | Yes | |
| trust | No | |
| verdict | No | |
| notFound | No | |
| warnings | No | |
| assetType | No | |
| lenderFit | No | |
| disclaimer | Yes | |
| assumptions | No | |
| attribution | Yes | |
| eligibility | No | |
| affordability | No | |
| stampDutySupported | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world. The description adds meaningful context beyond that: the tool is advisory only (not an approval/offer/advice), the disclaimer must be surfaced, listing mode ignores propertyValue/state/city 'with a warning', and several omitted inputs have disclosed defaults that can change the verdict (e.g. existingMonthlyEmis assumed ₹0 'which can inflate eligibility and flip the verdict — ask the buyer').
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 verdict definition is front-loaded, and the text is organized as a component list followed by Mode A / Mode B and the disclaimer caveat. It is dense but nearly every clause carries information; only minor tightening would be possible.
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?
For a 24-parameter tool with an output schema present, the description need not explain return values, and it covers the essential decision context: modes, verdict semantics, scope limits, and the disclaimer obligation. It does not detail what warnings accompany listing mode or how the triage behaves without CIBIL, but the annotations and output schema carry that load.
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 schema already documents every parameter, including defaults, enums, and mode-specific applicability. The description adds only a high-level restatement of the two modes and the component list rather than new per-parameter syntax or constraints, so the baseline 3 is appropriate.
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 verb (assess affordability) and resource (a specific Indian home), and enumerates the concrete outputs — a single verdict with FOIR/LTV/CIBIL, EMI, cash-to-close, tax, and lender-fit. It clearly distinguishes this umbrella assessment from narrower siblings like estimate_stamp_duty_and_registration or calculate_home_affordability by folding those components in, though it never names a sibling 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?
It defines two explicit invocation paths — Mode A (listingId) and Mode B (propertyValue + state) — so an agent knows exactly what to supply in each case. It also states the compliance requirement ('Always surface the disclaimer') and the scope limit ('NOT a loan approval, offer, or advice'). It stops short of saying when to prefer this over the sibling calculators, but the mode framing is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_detailsGet one AVnester property by IDARead-onlyIdempotentInspect
Fetch full public details for one AVnester listing by its listingId (from search_properties results — IDs are not guessable). Listings cover Tamil Nadu; unknown or unpublished IDs return { listing: null, notFound: true } (never throws, to avoid leaking existence). Use when the user references a specific listing. State verification.caveats beside the verified flag: an approval is not a title, ownership or encumbrance check. Read-only, no side effects.
| Name | Required | Description | Default |
|---|---|---|---|
| listingId | Yes | AVnester listingId, as returned in search_properties results (the `listingId` field). IDs are not guessable — call search_properties first. Also the trailing segment of a listing sourceUrl. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| trust | No | |
| listing | Yes | |
| message | No | |
| notFound | Yes | |
| disclaimer | Yes | |
| handoffUrl | No | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, openWorld, non-destructive), the description discloses non-obvious behavior: unknown IDs return { listing: null, notFound: true } and never throw specifically to avoid leaking listing existence. It also instructs the agent to surface verification.caveats and warns that an approval is not a title/ownership/encumbrance check — behavioral nuance an annotation cannot express.
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?
It is front-loaded with purpose and provenance before moving to edge-case behavior and caveats, and every sentence carries information. It is somewhat dense — four clauses in the opening sentence — but no sentence 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?
For a single-record read tool with an output schema and full annotation coverage, the description supplies everything an agent needs: the ID provenance requirement, the not-found contract, the region scope, and the caveat-handling instruction. Return-value structure is left to the output schema as expected.
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 listingId field, its length bounds, and the 'not guessable / from search_properties' provenance are already documented in the schema. The description largely repeats that provenance without adding format or syntax detail, 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?
The description uses a specific verb+resource+scope: 'Fetch full public details for one AVnester listing by its listingId.' It also scopes the coverage ('Listings cover Tamil Nadu') and clearly delineates itself from sibling search_properties, which is a multi-result search rather than a single-record fetch.
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 states the triggering condition ('Use when the user references a specific listing') and an explicit prerequisite chain ('call search_properties first — IDs are not guessable'). It does not state when-not to use it or name alternatives beyond the prerequisite, so it falls just short of the highest tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_home_loan_tax_regimeOptimize home-loan tax regime (calculator)ARead-onlyIdempotentInspect
Compare a home-loan borrower's income tax under the OLD vs NEW regime (FY2026-27) and recommend which regime saves more income tax. Pure deterministic slab math — not tax advice. Use when the user asks "old or new tax regime", "home-loan tax benefit", or "section 80C / 24(b) deduction". Models §24(b) interest + §80C principal (+ joint-loan doubling); the response lists benefits it does NOT model (capital gains, HRA, etc.). Always surface the disclaimer field.
| Name | Required | Description | Default |
|---|---|---|---|
| ageBand | No | Taxpayer age band — raises the OLD-regime basic exemption (senior 60–80 → ₹3L, super-senior 80+ → ₹5L). New regime unaffected. Defaults to below60. | |
| other80C | No | Other 80C investments in INR (PF, ELSS, insurance, etc.). | |
| jointLoan | No | Joint loan with a co-borrower — doubles the 80C/24b caps (equal-split assumption). | |
| saleValue | No | NRI only — sale consideration in INR for §195 TDS computation. | |
| annualRent | No | Annual rent received in INR — required for let_out. | |
| isSalaried | No | Whether the taxpayer is salaried (gets the standard deduction). | |
| hasForm15CB | No | NRI only — whether Form 15CB CA-attestation is already in hand. | |
| indexedCost | No | NRI only — indexed cost of acquisition (LTCG). When omitted, TDS computed on full sale value. | |
| annualIncome | Yes | Annual gross income in INR EXCLUDING house property (salary + other income). | |
| propertyType | No | Whether the property is self-occupied or let out. | self_occupied |
| holdingMonths | No | NRI only — holding period in months. ≤24 is STCG; >24 is LTCG. | |
| nroBalanceUsd | No | NRI only — NRO account balance in USD equivalent for the repatriation cap math. | |
| ytdRemittedUsd | No | NRI only — FY-to-date USD already remitted under the $1M cap. | |
| residencyStatus | No | Default resident. Pass nri to get §195 TDS + LRS-cap math in the response. | |
| homeLoanInterest | Yes | Annual home-loan interest paid (INR). | |
| homeLoanPrincipal | Yes | Annual home-loan principal repaid (INR) — counts toward 80C. | |
| countryOfResidence | No | NRI only — DTAA article lookup hint. Free-form country name. | |
| otherOldRegimeDeductions | No | Other OLD-regime-only deductions as a lump (HRA exemption, 80D, NPS 80CCD(1B), etc.). |
Output Schema
| Name | Required | Description |
|---|---|---|
| new | Yes | |
| nri | No | |
| old | Yes | |
| cards | Yes | |
| jointLoan | Yes | |
| disclaimer | Yes | |
| notModeled | Yes | |
| assumptions | Yes | |
| attribution | Yes | |
| recommended | Yes | |
| annualIncome | Yes | |
| annualSaving | Yes | |
| propertyType | Yes | |
| residencyStatus | No | |
| homeLoanTaxBenefitOld | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, openWorldHint, non-destructive. Description adds that it is pure deterministic math, not tax advice, and lists modelled sections and exclusions. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no extraneous information. Front-loaded with core purpose, followed by usage guidance and behavioral notes. Every sentence serves a purpose.
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 18 parameters, output schema exists, and annotations provide safety signals, the description covers the essential behavioral aspects: what is modelled, what is excluded, disclaimer requirement, and usage triggers. Complete for the complexity.
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 full descriptions for all 18 parameters. The description does not add meaning beyond the schema for individual parameters, but it provides high-level context of what the tool computes. Baseline 3 is appropriate.
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?
Description clearly states the tool compares OLD vs NEW tax regime for home-loan borrowers to recommend the cheaper one, using deterministic slab math. It distinguishes from sibling tools (none of which are tax calculators) by naming specific user queries and tax sections.
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?
Explicitly tells when to use: when user asks 'old or new tax regime', 'home-loan tax benefit', or 'section 80C / 24(b) deduction'. Lists what it does and does not model (capital gains, HRA, etc.), and reminds to surface disclaimer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_propertiesSearch India property listingsARead-onlyIdempotentInspect
Search residential property listings anywhere in Tamil Nadu, India — any city or town. Use when the user names a place, locality, price band, BHK, or transaction type. Returns sanitized listing cards with handoff URLs and a per-listing verification summary (verified + caveats); never returns seller contact details. Places outside Tamil Nadu return supported=false + scopeMessage — surface it.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City or town in Tamil Nadu (e.g., "Coimbatore", "Madurai"). Omit to search every Tamil Nadu city. | |
| limit | No | Maximum number of listings to return (cap: 20). v1 abuse defense. | |
| bedrooms | No | Number of bedrooms (BHK). | |
| locality | No | Locality/neighborhood within the city (e.g., "Saravanampatti"). | |
| maxPrice | No | Maximum price in INR. | |
| minPrice | No | Minimum price in INR. | |
| furnishing | No | Furnishing status (rental queries). | |
| propertyType | No | Property type. | |
| rentalStructure | No | Rental money structure: monthly rent, or a lump-sum lease (one refundable amount for a fixed tenure, no monthly rent). Only meaningful with transactionType=rent. Omit to include both. | |
| transactionType | No | Whether to search for sale or rent. Omit to include both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| sortBy | No | |
| message | No | |
| listings | Yes | |
| supported | Yes | |
| disclaimer | Yes | |
| handoffUrl | Yes | |
| attribution | Yes | |
| scopeMessage | No | |
| supportedCities | No | Suggested retries: the cities with AVnester's deepest coverage (guides + market data). NOT the listing scope, which is any city or town in Tamil Nadu (see scopeMessage). Present only when supported=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly/idempotent/openWorld, and the description adds substantive behavior beyond them: returns sanitized cards with handoff URLs and a per-listing verification summary (verified + caveats), explicitly never returns seller contact details, and out-of-scope places return supported=false + scopeMessage which the agent is told to surface. These are exactly the traits structured fields cannot 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?
Three sentences, front-loaded with purpose and scope, then usage trigger, then return contract and edge-case behavior. No filler; the important constraint (Tamil Nadu only) appears before the invocation 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?
For a 10-parameter, zero-required, read-only search tool with an output schema and rich annotations, the description covers scope limits, trigger conditions, return shape, and the out-of-scope sentinel. An agent has everything needed to call and interpret 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% and all 10 parameters are documented in-schema, so the baseline is 3. The description reinforces the filter dimensions (place, locality, price band, BHK, transaction type) and the Tamil Nadu scope, but adds no syntax, unit, or format detail beyond what the schema already provides.
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), resource (residential property listings), and an explicit geographic boundary (Tamil Nadu, India — any city or town). It is readily distinguishable from siblings like get_property_details, compare_properties, and compare_localities, which operate on already-found properties.
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 concrete invocation triggers — 'Use when the user names a place, locality, price band, BHK, or transaction type' — mapping directly onto the schema's filter parameters. It does not name sibling alternatives or state when NOT to use this tool, so it falls 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.
simulate_loan_prepaymentSimulate home-loan prepayment (calculator)ARead-onlyIdempotentInspect
Simulate prepaying / repaying an Indian home loan early. Deterministic math — no advice, no loan-approval claim. Use for "should I prepay", "early/part/lump-sum repayment", "pay extra each month", "reduce EMI or tenure", "interest saved", or foreclosure. Modes: one-time, recurring yearly, or a fixed extra every month. Compares reduce_tenure (keep EMI, finish early) vs reduce_emi (keep tenure, lower EMI). emi = next EMI; finalEmi = after the last prepayment. Always surface the disclaimer field.
| Name | Required | Description | Default |
|---|---|---|---|
| strategy | No | reduce_tenure keeps the EMI and finishes early (bigger saving); reduce_emi keeps the tenure and lowers the EMI; compare_both returns both. | compare_both |
| prepaymentMode | No | How the prepayment is made (annual anniversary vs every month). | one_time |
| prepaymentAmount | No | One-time lump-sum prepayment in INR (one_time / one_time_plus_recurring* modes). | |
| annualRatePercent | No | Current annual interest rate (percent). Defaults to the indicative market rate when omitted. | |
| outstandingPrincipal | Yes | Current outstanding home-loan principal in INR. | |
| remainingTenureYears | Yes | Years left on the loan at the current EMI. | |
| recurringAnnualAmount | No | Recurring yearly prepayment in INR (recurring_annual / one_time_plus_recurring modes). | |
| recurringMonthlyAmount | No | Fixed extra paid toward principal EVERY month on top of the EMI (recurring_monthly / one_time_plus_recurring_monthly modes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| applied | Yes | |
| baseline | Yes | |
| strategy | Yes | |
| reduceEmi | No | |
| disclaimer | Yes | |
| assumptions | Yes | |
| attribution | Yes | |
| reduceTenure | No | |
| prepaymentMode | Yes | |
| annualRatePercent | Yes | |
| outstandingPrincipal | Yes | |
| remainingTenureYears | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context: deterministic math, no advisory/approval claim, and the operational instruction to always surface the disclaimer. It also clarifies return-field semantics (emi = next EMI, finalEmi = after last prepayment), though an output schema exists, so it isn't a 5.
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-loads purpose and the no-advice caveat, then packs modes, strategy comparison, and return-field notes into tight sentences. The quoted trigger-phrase list is slightly listy but every clause carries routing value.
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 restate return values, and it still covers scope, modes, strategy semantics, and the disclaimer obligation. An agent has enough to call it correctly; only explicit sibling routing is missing.
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 both enums are documented inline, so the schema carries the parameter burden. The description reinforces the strategy trade-off (reduce_tenure vs reduce_emi) but adds little beyond what the enum descriptions already say; baseline 3 is appropriate.
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 and resource ('simulate prepaying an Indian home loan early') and immediately scopes it as a deterministic calculator with no advice or approval claim. The mode/strategy summary lets an agent distinguish this from sibling tools like optimize_home_loan_tax_regime or compare_balance_transfer.
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 explicit trigger intents ('should I prepay', 'early/part/lump-sum repayment', 'reduce EMI or tenure', 'interest saved', foreclosure), which is strong when-to-use guidance. It does not name sibling alternatives or state when NOT to use it, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
compare_properties2 fields changed- added
Output schema / properties / comparison / items / properties / listing / properties / verification / properties / adminReviewedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / comparison / items / properties / listing / properties / verification / requiredPrevious value: -[ - "documentVerified", - "tier", - "locationVerified", - "locationConfidence", - "lastVerifiedAt", - "method" -]New value: +[ + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" +]
- Changed
get_property_details2 fields changed- added
Output schema / properties / listing / properties / verification / properties / adminReviewedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listing / properties / verification / requiredPrevious value: -[ - "documentVerified", - "tier", - "locationVerified", - "locationConfidence", - "lastVerifiedAt", - "method" -]New value: +[ + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" +]
- Changed
search_properties3 fields changed- added
Output schema / properties / listings / items / properties / verification / properties / adminReviewedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listings / items / properties / verification / requiredPrevious value: -[ - "documentVerified", - "tier", - "locationVerified", - "locationConfidence", - "lastVerifiedAt", - "method" -]New value: +[ + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" +] - added
Output schema / properties / supportedCities / descriptionAdded value: +"Suggested retries: the cities with AVnester's deepest coverage (guides + market data). NOT the listing scope, which is any city or town in Tamil Nadu (see scopeMessage). Present only when supported=false."
8 tool updates
- Changed
compare_localities4 fields changed- changed
Output schema / properties / comparison / additionalProperties / properties / confidence / enumPrevious value: -[ - "high", - "medium", - "low" -]New value: +[ + "high", + "medium", + "low", + null +] - changed
Output schema / properties / comparison / additionalProperties / properties / livabilityScoreBasis / enumPrevious value: -[ - "editorial-estimate" -]New value: +[ + "editorial-estimate", + null +] - added
Output schema / properties / comparison / additionalProperties / properties / priceTrends / items / properties / estimatedAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / priceTrends / items / properties / pricePerSqftInrAdded value: +{ + "type": [ + "number", + "null" + ] +}
- Changed
compare_properties3 fields changed- changed
Output schema / properties / comparison / items / properties / listing / properties / furnishingStatus / enumPrevious value: -[ - "furnished", - "semi-furnished", - "unfurnished" -]New value: +[ + "furnished", + "semi-furnished", + "unfurnished", + null +] - changed
Output schema / properties / comparison / items / properties / listing / properties / rentalStructure / enumPrevious value: -[ - "monthly", - "lease" -]New value: +[ + "monthly", + "lease", + null +] - added
Output schema / properties / comparison / items / properties / listing / properties / verification / properties / caveatsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
estimate_stamp_duty_and_registration1 field changed- changed
Output schema / properties / location / properties / localBody / enumPrevious value: -[ - "municipal_corporation", - "municipal_council", - "gram_panchayat" -]New value: +[ + "municipal_corporation", + "municipal_council", + "gram_panchayat", + null +]
- Changed
get_locality_insights5 fields changed- changed
Output schema / properties / freshness / properties / confidence / enumPrevious value: -[ - "high", - "medium", - "low" -]New value: +[ + "high", + "medium", + "low", + null +] - changed
Output schema / properties / insights / properties / demandPulse / enumPrevious value: -[ - "low", - "medium", - "high" -]New value: +[ + "low", + "medium", + "high", + null +] - changed
Output schema / properties / insights / properties / livabilityScoreBasis / enumPrevious value: -[ - "editorial-estimate" -]New value: +[ + "editorial-estimate", + null +] - added
Output schema / properties / insights / properties / priceTrends / items / properties / estimatedAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / insights / properties / priceTrends / items / properties / pricePerSqftInrAdded value: +{ + "type": [ + "number", + "null" + ] +}
- Changed
get_property_decision_intelligence3 fields changed- changed
Input schema / properties / listingId / descriptionPrevious value: -"AVnester listingId (Coimbatore/Chennai catalog). Listing mode — propertyValue, state and city are then ignored, with a warning."New value: +"An AVnester listingId. Listing mode — propertyValue, state and city are then ignored, with a warning." - added
Output schema / properties / affordability / properties / otherChargesBreakdown / properties / technicalValuationAdded value: +{ + "type": "integer" +} - added
Output schema / properties / lenderFit / properties / sourceAdded value: +{ + "additionalProperties": true, + "properties": { + "effectiveDate": { + "type": "string" + }, + "lastVerifiedAt": { + "type": "string" + }, + "sourceUrl": { + "type": "string" + } + }, + "required": [ + "effectiveDate", + "sourceUrl", + "lastVerifiedAt" + ], + "type": "object" +}
- Changed
get_property_details3 fields changed- changed
Output schema / properties / listing / properties / furnishingStatus / enumPrevious value: -[ - "furnished", - "semi-furnished", - "unfurnished" -]New value: +[ + "furnished", + "semi-furnished", + "unfurnished", + null +] - changed
Output schema / properties / listing / properties / rentalStructure / enumPrevious value: -[ - "monthly", - "lease" -]New value: +[ + "monthly", + "lease", + null +] - added
Output schema / properties / listing / properties / verification / properties / caveatsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
search_properties5 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Indian city name (e.g., \"Bangalore\", \"Coimbatore\"). Required for results."New value: +"City or town in Tamil Nadu (e.g., \"Coimbatore\", \"Madurai\"). Omit to search every Tamil Nadu city." - changed
Input schema / properties / locality / descriptionPrevious value: -"Locality/neighborhood within the city (e.g., \"Indiranagar\")."New value: +"Locality/neighborhood within the city (e.g., \"Saravanampatti\")." - changed
Output schema / properties / listings / items / properties / furnishingStatus / enumPrevious value: -[ - "furnished", - "semi-furnished", - "unfurnished" -]New value: +[ + "furnished", + "semi-furnished", + "unfurnished", + null +] - changed
Output schema / properties / listings / items / properties / rentalStructure / enumPrevious value: -[ - "monthly", - "lease" -]New value: +[ + "monthly", + "lease", + null +] - added
Output schema / properties / listings / items / properties / verification / properties / caveatsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
simulate_loan_prepayment2 fields changed- added
Output schema / properties / reduceEmi / properties / finalEmiAdded value: +{ + "type": "integer" +} - added
Output schema / properties / reduceTenure / properties / finalEmiAdded value: +{ + "type": "integer" +}
1 tool update
- Changed
estimate_stamp_duty_and_registration2 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City or town, e.g. \"Pune\". Decides the rate where the state prices by location (MH, KA, WB, MP, HR): Pune 7%, Mumbai 6%."New value: +"City or town, e.g. \"Pune\". Decides the rate where the state prices by location (MH, KA, WB, MP, HR): Pune 7%, Mumbai 6%. Send the place as the buyer names it (\"Kharghar\"), not the wider city it is listed under." - added
Output schema / properties / location / properties / place / properties / areaAdded value: +{ + "type": "string" +}
2 tool updates
- Changed
estimate_stamp_duty_and_registration24 fields changed- changed
Input schema / properties / buyerGender / descriptionPrevious value: -"Buyer gender — overrides isWomanBuyer when set. \"joint\" = man+woman jointly owned."New value: +"\"female\" (a woman), \"joint\" (a man and a woman together) or \"male\" (default; two women: female). Changes the price only where a state gives women a concession. Overrides isWomanBuyer." - added
Input schema / properties / cityAdded value: +{ + "description": "City or town, e.g. \"Pune\". Decides the rate where the state prices by location (MH, KA, WB, MP, HR): Pune 7%, Mumbai 6%.", + "maxLength": 60, + "minLength": 1, + "pattern": "^[A-Za-z0-9 .,'’()\\--ऀ-ॿ]+$", + "type": "string" +} - added
Input schema / properties / firstSaleAdded value: +{ + "description": "True for the FIRST sale of a flat, from the builder (not the buyer's first home); false for a resale. Changes the duty only where a state has a first-sale rate (KA). Omit when unknown: a resale is priced, and said where it matters. Absent: constructionStatus under_construction ⇒ true, resale ⇒ false, ready_to_move decides nothing (may be a resale).", + "type": "boolean" +} - changed
Input schema / properties / isUrban / descriptionPrevious value: -"Whether property is in an urban/metro area — gates metro-cess surcharges (e.g., Mumbai LBT, BBMP cess)."New value: +"Urban (default) or rural. Used for the location when city and localBody are absent." - added
Input schema / properties / localBodyAdded value: +{ + "description": "Where the property is, in a state that prices by it (MH, KA, WB, MP, HR): gram_panchayat (village), municipal_council (town) or municipal_corporation (city); overrides city. Omit when unknown (a corporation is priced, and said).", + "enum": [ + "municipal_corporation", + "municipal_council", + "gram_panchayat" + ], + "type": "string" +} - changed
Input schema / properties / propertyType / descriptionPrevious value: -"Property type — applies state-specific multiplier (commercial/agricultural)."New value: +"residential (default), plot (bare land; a residential-only concession does not reach it), commercial or agricultural." - changed
Input schema / properties / propertyType / enumPrevious value: -[ - "residential", - "commercial", - "agricultural" -]New value: +[ + "residential", + "commercial", + "agricultural", + "plot" +] - added
Input schema / properties / propertyValue / maximumAdded value: +10000000000 - removed
Input schema / properties / state / defaultRemoved value: -"Tamil Nadu" - changed
Input schema / properties / state / descriptionPrevious value: -"Indian state — accepts ISO code (\"MH\"), URL slug (\"maharashtra\"), or display name (\"Maharashtra\"). All 28 states + 8 UTs supported."New value: +"Indian state — ISO code (\"MH\"), slug (\"maharashtra\") or name (\"Maharashtra\"). Required." - changed
Input schema / properties / state / minLengthPrevious value: -2New value: +1 - added
Input schema / properties / state / patternAdded value: +"^[A-Za-z0-9 .,'’()\\--ऀ-ॿ]+$" - changed
Input schema / requiredPrevious value: -[ - "propertyValue" -]New value: +[ + "propertyValue", + "state" +] - added
Output schema / properties / assumptionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / locationAdded value: +{ + "additionalProperties": true, + "properties": { + "assumed": { + "type": "boolean" + }, + "localBody": { + "enum": [ + "municipal_corporation", + "municipal_council", + "gram_panchayat" + ], + "type": [ + "string", + "null" + ] + }, + "place": { + "additionalProperties": true, + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "type": [ + "object", + "null" + ] + }, + "source": { + "enum": [ + "local_body", + "city", + "is_urban", + "default", + "not_applicable" + ], + "type": "string" + } + }, + "required": [ + "place", + "localBody", + "source", + "assumed" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / rateEffectiveDate / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / rateVerificationAdded value: +{ + "additionalProperties": true, + "properties": { + "lastVerifiedAt": { + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "verified", + "partial", + "unverified" + ], + "type": "string" + }, + "unverifiedComponents": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "status", + "lastVerifiedAt", + "sourceUrl", + "unverifiedComponents" + ], + "type": "object" +} - added
Output schema / properties / registrationCapAppliedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / rulesVersionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / stampDutyBaseAdded value: +{ + "type": "integer" +} - added
Output schema / properties / stateCodeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / stateNameAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / surchargesAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "amount": { + "type": "integer" + }, + "legalBasis": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ratePct": { + "type": "number" + } + }, + "required": [ + "name", + "ratePct", + "amount" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "propertyValue", - "state", - "supported", - "stampDuty", - "registrationFee", - "total", - "rateBasis", - "rateEffectiveDate", - "attribution", - "disclaimer", - "cards" -]New value: +[ + "propertyValue", + "state", + "supported", + "stateCode", + "stateName", + "stampDuty", + "stampDutyBase", + "surcharges", + "registrationFee", + "registrationCapApplied", + "total", + "rateBasis", + "location", + "rateVerification", + "assumptions", + "rulesVersion", + "rateEffectiveDate", + "attribution", + "disclaimer", + "cards" +]
- Changed
get_property_decision_intelligence7 fields changed- changed
Input schema / properties / buyerGender / descriptionPrevious value: -"Buyer gender — affects stamp duty in states with a women concession."New value: +"\"female\" (a woman), \"joint\" (a man and a woman together) or \"male\" (default; two women: female). Changes the price only where a state gives women a concession." - added
Input schema / properties / cityAdded value: +{ + "description": "City (manual mode), e.g. \"Pune\" — decides Maharashtra stamp duty and the GST metro cap. Listing mode reads the listing.", + "maxLength": 60, + "minLength": 1, + "pattern": "^[A-Za-z0-9 .,'’()\\--ऀ-ॿ]+$", + "type": "string" +} - added
Input schema / properties / firstSaleAdded value: +{ + "description": "True for the FIRST sale of a flat, from the builder (not the buyer's first home); false for a resale. Changes the duty only where a state has a first-sale rate (KA). Omit when unknown: a resale is priced, and said where it matters. If absent, isUnderConstruction true means true.", + "type": "boolean" +} - changed
Input schema / properties / isUrban / descriptionPrevious value: -"Urban/metro — gates metro-cess surcharges in stamp duty."New value: +"Urban (default) or rural, where the state prices by location (MH, KA, WB, MP, HR); localBody or a known city decides instead." - changed
Input schema / properties / listingId / descriptionPrevious value: -"AVnester listingId (Coimbatore/Chennai catalog). Listing mode — do NOT also pass propertyValue (rejected) or state (ignored)."New value: +"AVnester listingId (Coimbatore/Chennai catalog). Listing mode — propertyValue, state and city are then ignored, with a warning." - added
Input schema / properties / localBodyAdded value: +{ + "description": "Where the property is, in a state that prices by it (MH, KA, WB, MP, HR): gram_panchayat (village), municipal_council (town) or municipal_corporation (city); overrides city. Omit when unknown (a corporation is priced, and said). Manual mode only.", + "enum": [ + "municipal_corporation", + "municipal_council", + "gram_panchayat" + ], + "type": "string" +} - changed
Input schema / properties / propertyValue / descriptionPrevious value: -"Property price in INR (manual mode). Pass with state; not with listingId."New value: +"Property price in INR (manual mode). Pass with state (and city where it matters)."
2 tool updates
- Changed
compare_localities8 fields changed- added
Output schema / properties / comparison / additionalProperties / properties / asOfMonthAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / confidenceAdded value: +{ + "enum": [ + "high", + "medium", + "low" + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / priceGrowth1YPctAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / pricePerSqftInrAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / rent2bhkInrAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / rentalYieldPctAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / comparison / additionalProperties / properties / sourceCountAdded value: +{ + "type": [ + "integer", + "null" + ] +} - changed
Output schema / properties / comparison / additionalProperties / requiredPrevious value: -[ - "priceTrends", - "livabilityScore", - "livabilityScoreBasis", - "investmentGrade", - "strengthTags", - "watchouts", - "highlights" -]New value: +[ + "priceTrends", + "pricePerSqftInr", + "rent2bhkInr", + "rentalYieldPct", + "priceGrowth1YPct", + "asOfMonth", + "sourceCount", + "confidence", + "livabilityScore", + "livabilityScoreBasis", + "investmentGrade", + "strengthTags", + "watchouts", + "highlights" +]
- Changed
get_locality_insights6 fields changed- added
Output schema / properties / insights / properties / livabilityScoreBasisAdded value: +{ + "enum": [ + "editorial-estimate" + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / insights / properties / priceGrowth1YPctAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / insights / properties / pricePerSqftInrAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / insights / properties / rent2bhkInrAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / insights / properties / rentalYieldPctAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / insights / requiredPrevious value: -[ - "avgPriceInr", - "supplyCount", - "demandPulse", - "livabilityScore", - "investmentGrade", - "highlights", - "watchouts", - "priceTrends", - "strengthTags" -]New value: +[ + "avgPriceInr", + "pricePerSqftInr", + "rent2bhkInr", + "rentalYieldPct", + "priceGrowth1YPct", + "supplyCount", + "demandPulse", + "livabilityScore", + "livabilityScoreBasis", + "investmentGrade", + "highlights", + "watchouts", + "priceTrends", + "strengthTags" +]
1 tool update
- Changed
get_property_decision_intelligence1 field changed- changed
Input schema / properties / listingId / descriptionPrevious value: -"AVnester listingId (Coimbatore catalog). Listing mode — do NOT also pass propertyValue (rejected) or state (ignored)."New value: +"AVnester listingId (Coimbatore/Chennai catalog). Listing mode — do NOT also pass propertyValue (rejected) or state (ignored)."
3 tool updates
- Changed
compare_properties6 fields changed- removed
Output schema / properties / comparison / items / properties / listing / properties / amenitiesRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / comparison / items / properties / listing / properties / leaseAmountAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / comparison / items / properties / listing / properties / leaseRefundableAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / comparison / items / properties / listing / properties / leaseTenureMonthsAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / comparison / items / properties / listing / properties / rentalStructureAdded value: +{ + "enum": [ + "monthly", + "lease" + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / comparison / items / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "pricePerSqft", - "verified", - "featured", - "verification", - "plotDetails", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
get_property_details6 fields changed- removed
Output schema / properties / listing / properties / amenitiesRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / listing / properties / leaseAmountAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / listing / properties / leaseRefundableAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / listing / properties / leaseTenureMonthsAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / listing / properties / rentalStructureAdded value: +{ + "enum": [ + "monthly", + "lease" + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "pricePerSqft", - "verified", - "featured", - "verification", - "plotDetails", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
search_properties9 fields changed- added
Input schema / properties / rentalStructureAdded value: +{ + "description": "Rental money structure: monthly rent, or a lump-sum lease (one refundable amount for a fixed tenure, no monthly rent). Only meaningful with transactionType=rent. Omit to include both.", + "enum": [ + "monthly", + "lease" + ], + "type": "string" +} - removed
Input schema / properties / transactionType / defaultRemoved value: -"sale" - changed
Input schema / properties / transactionType / descriptionPrevious value: -"Whether to search for sale or rent."New value: +"Whether to search for sale or rent. Omit to include both." - removed
Output schema / properties / listings / items / properties / amenitiesRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / listings / items / properties / leaseAmountAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / listings / items / properties / leaseRefundableAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / listings / items / properties / leaseTenureMonthsAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / listings / items / properties / rentalStructureAdded value: +{ + "enum": [ + "monthly", + "lease" + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / listings / items / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "pricePerSqft", - "verified", - "featured", - "verification", - "plotDetails", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
1 tool update
- Changed
calculate_home_affordability5 fields changed- removed
Output schema / properties / assumptions / properties / defaultLtvPercent / enumRemoved value: -[ - 80 -] - added
Output schema / properties / assumptions / properties / defaultLtvPercent / typeAdded value: +"number" - added
Output schema / properties / assumptions / properties / lenderMaxLoanAdded value: +{ + "type": "integer" +} - added
Output schema / properties / assumptions / properties / unfundedAmountAdded value: +{ + "type": "integer" +} - changed
Output schema / properties / assumptions / requiredPrevious value: -[ - "defaultLtvPercent", - "actualLtvPercent", - "downPaymentAmount", - "interestType", - "notALoanApproval" -]New value: +[ + "defaultLtvPercent", + "actualLtvPercent", + "downPaymentAmount", + "lenderMaxLoan", + "unfundedAmount", + "interestType", + "notALoanApproval" +]
2 tool updates
- Changed
get_property_decision_intelligence1 field changed- added
Output schema / properties / trustAdded value: +{ + "additionalProperties": true, + "properties": { + "grade": { + "type": "string" + }, + "score": { + "type": "integer" + } + }, + "required": [ + "score", + "grade" + ], + "type": "object" +}
- Changed
get_property_details1 field changed- added
Output schema / properties / trustAdded value: +{ + "additionalProperties": true, + "properties": { + "grade": { + "type": "string" + }, + "score": { + "type": "integer" + } + }, + "required": [ + "score", + "grade" + ], + "type": "object" +}
1 tool update
- Changed
compare_localities2 fields changed- added
Output schema / properties / comparison / additionalProperties / properties / livabilityScoreBasisAdded value: +{ + "enum": [ + "editorial-estimate" + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / comparison / additionalProperties / requiredPrevious value: -[ - "priceTrends", - "livabilityScore", - "investmentGrade", - "strengthTags", - "watchouts", - "highlights" -]New value: +[ + "priceTrends", + "livabilityScore", + "livabilityScoreBasis", + "investmentGrade", + "strengthTags", + "watchouts", + "highlights" +]
3 tool updates
- Changed
estimate_stamp_duty_and_registration4 fields changed- added
Input schema / properties / carpetAreaSqftAdded value: +{ + "description": "Carpet area (sqft) — with value, decides the affordable-housing 1% GST slab.", + "exclusiveMinimum": 0, + "maximum": 100000, + "type": "integer" +} - added
Input schema / properties / constructionStatusAdded value: +{ + "description": "When set, also itemizes GST: under-construction = 1% (affordable) / 5%; ready/resale = 0%. Omit → GST not computed.", + "enum": [ + "under_construction", + "ready_to_move", + "resale" + ], + "type": "string" +} - added
Output schema / properties / gstAdded value: +{ + "additionalProperties": true, + "properties": { + "amount": { + "type": "integer" + }, + "applies": { + "type": "boolean" + }, + "basis": { + "type": "string" + }, + "isAffordable": { + "type": "boolean" + }, + "itcAvailableToBuyer": { + "enum": [ + false + ] + }, + "ratePct": { + "type": "number" + } + }, + "required": [ + "ratePct", + "amount", + "applies", + "isAffordable", + "itcAvailableToBuyer", + "basis" + ], + "type": "object" +} - added
Output schema / properties / totalWithGstAdded value: +{ + "type": "integer" +}
- Changed
get_property_decision_intelligence13 fields changed- added
Input schema / properties / carpetAreaSqftAdded value: +{ + "description": "Carpet area (sqft) — sharpens the affordable-housing GST test (with the ₹45L value cap).", + "exclusiveMinimum": 0, + "maximum": 100000, + "type": "integer" +} - changed
Input schema / properties / existingMonthlyEmis / descriptionPrevious value: -"Total existing monthly EMIs in INR."New value: +"Existing monthly loan EMIs in ₹ (car/personal/cards). Omitted → assumed ₹0, which can inflate eligibility and flip the verdict — ask the buyer." - changed
Input schema / properties / isUnderConstruction / descriptionPrevious value: -"Under-construction → GST applies; ready-to-move → no GST."New value: +"Under-construction → GST applies; ready-to-move → no GST. Omitted → ready-to-move (no GST)." - changed
Input schema / properties / occupancyIntent / descriptionPrevious value: -"Self-occupied vs let-out — changes §24(b) interest treatment."New value: +"Self-occupied vs let-out — changes §24(b) interest treatment. Omitted → self-occupied." - added
Output schema / properties / affordability / properties / gstAdded value: +{ + "additionalProperties": true, + "properties": { + "amount": { + "type": "integer" + }, + "applies": { + "type": "boolean" + }, + "basis": { + "type": "string" + }, + "isAffordable": { + "type": "boolean" + }, + "itcAvailableToBuyer": { + "enum": [ + false + ] + }, + "ratePct": { + "type": "number" + } + }, + "required": [ + "ratePct", + "amount", + "applies", + "isAffordable", + "itcAvailableToBuyer", + "basis" + ], + "type": "object" +} - changed
Output schema / properties / affordability / requiredPrevious value: -[ - "propertyValue", - "downPayment", - "stampDutyAndRegistration", - "otherCharges", - "otherChargesBreakdown", - "totalCashToClose", - "lifetimeCost", - "savingsAvailable", - "downPaymentGap" -]New value: +[ + "propertyValue", + "downPayment", + "stampDutyAndRegistration", + "otherCharges", + "otherChargesBreakdown", + "gst", + "totalCashToClose", + "lifetimeCost", + "savingsAvailable", + "downPaymentGap" +] - added
Output schema / properties / assumptions / properties / existingEmisProvidedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / assumptions / properties / isUnderConstructionAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / assumptions / properties / occupancyIntentAdded value: +{ + "enum": [ + "self_occupied", + "let_out" + ], + "type": "string" +} - added
Output schema / properties / assumptions / properties / occupancyIntentProvidedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / assumptions / properties / underConstructionProvidedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / assumptions / requiredPrevious value: -[ - "rateSource", - "ltvBasis", - "regimeYear", - "annualIncomeEstimated", - "buyerGender", - "cibilProvided", - "savingsProvided", - "seniorCitizenNotModeled" -]New value: +[ + "rateSource", + "ltvBasis", + "regimeYear", + "annualIncomeEstimated", + "buyerGender", + "cibilProvided", + "savingsProvided", + "existingEmisProvided", + "occupancyIntent", + "occupancyIntentProvided", + "isUnderConstruction", + "underConstructionProvided", + "seniorCitizenNotModeled" +] - added
Output schema / properties / lenderFitAdded value: +{ + "additionalProperties": true, + "properties": { + "cibilConsidered": { + "type": "boolean" + }, + "disclaimer": { + "type": "string" + }, + "eligibleLenders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lenders": { + "items": { + "additionalProperties": true, + "properties": { + "eligible": { + "type": "boolean" + }, + "fitReason": { + "type": "string" + }, + "fitScore": { + "type": "integer" + }, + "indicativeRatePct": { + "type": "number" + }, + "kind": { + "enum": [ + "bank", + "hfc" + ], + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "kind", + "indicativeRatePct", + "eligible", + "fitScore", + "fitReason" + ], + "type": "object" + }, + "type": "array" + }, + "notALoanApproval": { + "enum": [ + true + ] + }, + "notAnOffer": { + "enum": [ + true + ] + }, + "summary": { + "type": "string" + } + }, + "required": [ + "lenders", + "eligibleLenders", + "cibilConsidered", + "notAnOffer", + "notALoanApproval", + "summary", + "disclaimer" + ], + "type": "object" +}
- Changed
simulate_loan_prepayment10 fields changed- changed
Input schema / properties / prepaymentAmount / descriptionPrevious value: -"One-time lump-sum prepayment in INR (used by one_time / one_time_plus_recurring modes)."New value: +"One-time lump-sum prepayment in INR (one_time / one_time_plus_recurring* modes)." - changed
Input schema / properties / prepaymentMode / descriptionPrevious value: -"How the prepayment is made."New value: +"How the prepayment is made (annual anniversary vs every month)." - changed
Input schema / properties / prepaymentMode / enumPrevious value: -[ - "one_time", - "recurring_annual", - "one_time_plus_recurring" -]New value: +[ + "one_time", + "recurring_annual", + "recurring_monthly", + "one_time_plus_recurring", + "one_time_plus_recurring_monthly" +] - changed
Input schema / properties / recurringAnnualAmount / descriptionPrevious value: -"Recurring yearly prepayment in INR (used by recurring_annual / one_time_plus_recurring modes)."New value: +"Recurring yearly prepayment in INR (recurring_annual / one_time_plus_recurring modes)." - added
Input schema / properties / recurringMonthlyAmountAdded value: +{ + "default": 0, + "description": "Fixed extra paid toward principal EVERY month on top of the EMI (recurring_monthly / one_time_plus_recurring_monthly modes).", + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / applied / properties / recurringMonthlyAdded value: +{ + "type": "integer" +} - changed
Output schema / properties / applied / requiredPrevious value: -[ - "oneTime", - "recurringAnnual" -]New value: +[ + "oneTime", + "recurringAnnual", + "recurringMonthly" +] - added
Output schema / properties / assumptions / properties / recurringMonthlyAppliedEachMonthAdded value: +{ + "enum": [ + true + ] +} - changed
Output schema / properties / assumptions / requiredPrevious value: -[ - "interestType", - "oneTimeAppliedImmediately", - "recurringAppliedAnnually", - "floatingRatePrepaymentPenaltyWaived", - "notALoanApproval" -]New value: +[ + "interestType", + "oneTimeAppliedImmediately", + "recurringAppliedAnnually", + "recurringMonthlyAppliedEachMonth", + "floatingRatePrepaymentPenaltyWaived", + "notALoanApproval" +] - changed
Output schema / properties / prepaymentMode / enumPrevious value: -[ - "one_time", - "recurring_annual", - "one_time_plus_recurring" -]New value: +[ + "one_time", + "recurring_annual", + "recurring_monthly", + "one_time_plus_recurring", + "one_time_plus_recurring_monthly" +]
5 tool updates
- Changed
calculate_home_affordability4 fields changed- changed
Input schema / properties / loanAmount / descriptionPrevious value: -"Loan amount in INR. Defaults to 80% of propertyValue if omitted."New value: +"Loan amount in INR. Pass this when the user states a specific loan (e.g. \"₹50 lakh loan\") rather than a property price. Defaults to 80% of propertyValue if omitted." - changed
Input schema / properties / propertyValue / descriptionPrevious value: -"Property value in INR."New value: +"Property value (price) in INR. When the user states a property/home price, put it here — an 80% loan is assumed unless loanAmount is also given." - added
Output schema / properties / assumptionNoteAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "inputPropertyValue", - "loanAmount", - "interestRatePercent", - "tenureYears", - "emi", - "totalInterest", - "totalPayment", - "assumptions", - "attribution", - "disclaimer", - "cards" -]New value: +[ + "inputPropertyValue", + "loanAmount", + "interestRatePercent", + "tenureYears", + "emi", + "totalInterest", + "totalPayment", + "assumptions", + "assumptionNote", + "attribution", + "disclaimer", + "cards" +]
- Changed
compare_properties4 fields changed- added
Output schema / properties / comparison / items / properties / listing / properties / plotDetailsAdded value: +{ + "additionalProperties": true, + "properties": { + "dtcpApproved": { + "type": [ + "boolean", + "null" + ] + }, + "dtcpNumber": { + "type": [ + "string", + "null" + ] + }, + "electricity": { + "type": [ + "string", + "null" + ] + }, + "encumbranceStatus": { + "type": [ + "string", + "null" + ] + }, + "facing": { + "type": [ + "string", + "null" + ] + }, + "gatedCommunity": { + "type": [ + "boolean", + "null" + ] + }, + "guidelineValueInr": { + "type": [ + "integer", + "null" + ] + }, + "landClassification": { + "type": [ + "string", + "null" + ] + }, + "ownershipType": { + "type": [ + "string", + "null" + ] + }, + "pattaChittaStatus": { + "type": [ + "string", + "null" + ] + }, + "pincode": { + "type": [ + "string", + "null" + ] + }, + "plotBreadthFt": { + "type": [ + "number", + "null" + ] + }, + "plotLengthFt": { + "type": [ + "number", + "null" + ] + }, + "plotNumber": { + "type": [ + "string", + "null" + ] + }, + "roadWidthFt": { + "type": [ + "number", + "null" + ] + }, + "waterAvailability": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "dtcpApproved", + "dtcpNumber", + "landClassification", + "facing", + "roadWidthFt", + "gatedCommunity", + "waterAvailability", + "electricity", + "ownershipType", + "plotNumber", + "pincode", + "pattaChittaStatus", + "encumbranceStatus", + "guidelineValueInr", + "plotLengthFt", + "plotBreadthFt" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / comparison / items / properties / listing / properties / pricePerSqftAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / comparison / items / properties / listing / properties / verificationAdded value: +{ + "additionalProperties": true, + "properties": { + "documentVerified": { + "type": "boolean" + }, + "lastVerifiedAt": { + "type": [ + "string", + "null" + ] + }, + "locationConfidence": { + "type": [ + "integer", + "null" + ] + }, + "locationVerified": { + "type": "boolean" + }, + "method": { + "type": [ + "string", + "null" + ] + }, + "tier": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "documentVerified", + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" + ], + "type": "object" +} - changed
Output schema / properties / comparison / items / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "featured", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
get_property_decision_intelligence6 fields changed- added
Input schema / properties / assetTypeAdded value: +{ + "description": "\"home\" (flat/villa/house) or \"plot\" (bare land); manual mode only. Plot → shorter tenure, no home-loan tax benefit.", + "enum": [ + "home", + "plot" + ], + "type": "string" +} - changed
Input schema / properties / listingId / descriptionPrevious value: -"AVnester listingId (Coimbatore catalog). Provide EITHER listingId OR propertyValue+state, not both."New value: +"AVnester listingId (Coimbatore catalog). Listing mode — do NOT also pass propertyValue (rejected) or state (ignored)." - changed
Input schema / properties / propertyValue / descriptionPrevious value: -"Property price in INR (manual / pan-India mode). Provide together with state."New value: +"Property price in INR (manual mode). Pass with state; not with listingId." - changed
Input schema / properties / state / descriptionPrevious value: -"Indian state (ISO code \"MH\", slug, or name) for stamp duty. Required with propertyValue."New value: +"Indian state (ISO \"MH\"/slug/name) for stamp duty. Required in manual mode; ignored in listing mode." - added
Output schema / properties / assetTypeAdded value: +{ + "enum": [ + "home", + "plot" + ], + "type": "string" +} - added
Output schema / properties / warningsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
get_property_details4 fields changed- added
Output schema / properties / listing / properties / plotDetailsAdded value: +{ + "additionalProperties": true, + "properties": { + "dtcpApproved": { + "type": [ + "boolean", + "null" + ] + }, + "dtcpNumber": { + "type": [ + "string", + "null" + ] + }, + "electricity": { + "type": [ + "string", + "null" + ] + }, + "encumbranceStatus": { + "type": [ + "string", + "null" + ] + }, + "facing": { + "type": [ + "string", + "null" + ] + }, + "gatedCommunity": { + "type": [ + "boolean", + "null" + ] + }, + "guidelineValueInr": { + "type": [ + "integer", + "null" + ] + }, + "landClassification": { + "type": [ + "string", + "null" + ] + }, + "ownershipType": { + "type": [ + "string", + "null" + ] + }, + "pattaChittaStatus": { + "type": [ + "string", + "null" + ] + }, + "pincode": { + "type": [ + "string", + "null" + ] + }, + "plotBreadthFt": { + "type": [ + "number", + "null" + ] + }, + "plotLengthFt": { + "type": [ + "number", + "null" + ] + }, + "plotNumber": { + "type": [ + "string", + "null" + ] + }, + "roadWidthFt": { + "type": [ + "number", + "null" + ] + }, + "waterAvailability": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "dtcpApproved", + "dtcpNumber", + "landClassification", + "facing", + "roadWidthFt", + "gatedCommunity", + "waterAvailability", + "electricity", + "ownershipType", + "plotNumber", + "pincode", + "pattaChittaStatus", + "encumbranceStatus", + "guidelineValueInr", + "plotLengthFt", + "plotBreadthFt" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / listing / properties / pricePerSqftAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / listing / properties / verificationAdded value: +{ + "additionalProperties": true, + "properties": { + "documentVerified": { + "type": "boolean" + }, + "lastVerifiedAt": { + "type": [ + "string", + "null" + ] + }, + "locationConfidence": { + "type": [ + "integer", + "null" + ] + }, + "locationVerified": { + "type": "boolean" + }, + "method": { + "type": [ + "string", + "null" + ] + }, + "tier": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "documentVerified", + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" + ], + "type": "object" +} - changed
Output schema / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "featured", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
search_properties9 fields changed- added
Output schema / properties / listings / items / properties / areaRankAdded value: +{ + "type": "integer" +} - added
Output schema / properties / listings / items / properties / plotDetailsAdded value: +{ + "additionalProperties": true, + "properties": { + "dtcpApproved": { + "type": [ + "boolean", + "null" + ] + }, + "dtcpNumber": { + "type": [ + "string", + "null" + ] + }, + "electricity": { + "type": [ + "string", + "null" + ] + }, + "encumbranceStatus": { + "type": [ + "string", + "null" + ] + }, + "facing": { + "type": [ + "string", + "null" + ] + }, + "gatedCommunity": { + "type": [ + "boolean", + "null" + ] + }, + "guidelineValueInr": { + "type": [ + "integer", + "null" + ] + }, + "landClassification": { + "type": [ + "string", + "null" + ] + }, + "ownershipType": { + "type": [ + "string", + "null" + ] + }, + "pattaChittaStatus": { + "type": [ + "string", + "null" + ] + }, + "pincode": { + "type": [ + "string", + "null" + ] + }, + "plotBreadthFt": { + "type": [ + "number", + "null" + ] + }, + "plotLengthFt": { + "type": [ + "number", + "null" + ] + }, + "plotNumber": { + "type": [ + "string", + "null" + ] + }, + "roadWidthFt": { + "type": [ + "number", + "null" + ] + }, + "waterAvailability": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "dtcpApproved", + "dtcpNumber", + "landClassification", + "facing", + "roadWidthFt", + "gatedCommunity", + "waterAvailability", + "electricity", + "ownershipType", + "plotNumber", + "pincode", + "pattaChittaStatus", + "encumbranceStatus", + "guidelineValueInr", + "plotLengthFt", + "plotBreadthFt" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / listings / items / properties / pricePerSqftAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / listings / items / properties / priceRankAdded value: +{ + "type": "integer" +} - added
Output schema / properties / listings / items / properties / rankAdded value: +{ + "type": "integer" +} - added
Output schema / properties / listings / items / properties / valueRankAdded value: +{ + "type": "integer" +} - added
Output schema / properties / listings / items / properties / verificationAdded value: +{ + "additionalProperties": true, + "properties": { + "documentVerified": { + "type": "boolean" + }, + "lastVerifiedAt": { + "type": [ + "string", + "null" + ] + }, + "locationConfidence": { + "type": [ + "integer", + "null" + ] + }, + "locationVerified": { + "type": "boolean" + }, + "method": { + "type": [ + "string", + "null" + ] + }, + "tier": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "documentVerified", + "tier", + "locationVerified", + "locationConfidence", + "lastVerifiedAt", + "method" + ], + "type": "object" +} - changed
Output schema / properties / listings / items / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "featured", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "pricePerSqft", + "verified", + "featured", + "verification", + "plotDetails", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +] - added
Output schema / properties / sortByAdded value: +{ + "type": "string" +}
3 tool updates
- Changed
compare_properties2 fields changed- added
Output schema / properties / comparison / items / properties / listing / properties / featuredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / comparison / items / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "featured", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
get_property_details2 fields changed- added
Output schema / properties / listing / properties / featuredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listing / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "featured", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
- Changed
search_properties2 fields changed- added
Output schema / properties / listings / items / properties / featuredAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listings / items / requiredPrevious value: -[ - "listingId", - "title", - "summary", - "city", - "locality", - "bhk", - "bathrooms", - "carpetAreaSqft", - "price", - "priceUnit", - "listingType", - "furnishingStatus", - "parkingCount", - "floorNumber", - "totalFloors", - "ageInYears", - "availableFrom", - "amenities", - "reraId", - "verified", - "verifiedAt", - "validUntil", - "sourceUrl", - "attribution", - "imageThumbnailUrl" -]New value: +[ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "featured", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" +]
10 tool updates
- Changed
calculate_home_affordability2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "inputPropertyValue", - "loanAmount", - "interestRatePercent", - "tenureYears", - "emi", - "totalInterest", - "totalPayment", - "assumptions", - "attribution", - "disclaimer" -]New value: +[ + "inputPropertyValue", + "loanAmount", + "interestRatePercent", + "tenureYears", + "emi", + "totalInterest", + "totalPayment", + "assumptions", + "attribution", + "disclaimer", + "cards" +]
- Changed
compare_balance_transfer2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "outstandingPrincipal", - "currentRatePercent", - "newRatePercent", - "remainingTenureYears", - "currentEmi", - "newEmi", - "monthlyEmiSaving", - "currentTotalInterest", - "newTotalInterest", - "grossInterestSaved", - "switchingCost", - "netSaving", - "breakevenMonths", - "worthIt", - "assumptions", - "attribution", - "disclaimer" -]New value: +[ + "outstandingPrincipal", + "currentRatePercent", + "newRatePercent", + "remainingTenureYears", + "currentEmi", + "newEmi", + "monthlyEmiSaving", + "currentTotalInterest", + "newTotalInterest", + "grossInterestSaved", + "switchingCost", + "netSaving", + "breakevenMonths", + "worthIt", + "assumptions", + "attribution", + "disclaimer", + "cards" +]
- Changed
compare_localities2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "city", - "localities", - "supported", - "comparison", - "attribution", - "handoffUrl", - "disclaimer" -]New value: +[ + "city", + "localities", + "supported", + "comparison", + "attribution", + "handoffUrl", + "disclaimer", + "cards" +]
- Changed
compare_properties2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "comparison", - "framing", - "attribution", - "disclaimer" -]New value: +[ + "comparison", + "framing", + "attribution", + "disclaimer", + "cards" +]
- Changed
estimate_stamp_duty_and_registration2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "propertyValue", - "state", - "supported", - "stampDuty", - "registrationFee", - "total", - "rateBasis", - "rateEffectiveDate", - "attribution", - "disclaimer" -]New value: +[ + "propertyValue", + "state", + "supported", + "stampDuty", + "registrationFee", + "total", + "rateBasis", + "rateEffectiveDate", + "attribution", + "disclaimer", + "cards" +]
- Changed
get_locality_insights2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "city", - "locality", - "supported", - "insights", - "freshness", - "attribution", - "handoffUrl", - "disclaimer" -]New value: +[ + "city", + "locality", + "supported", + "insights", + "freshness", + "attribution", + "handoffUrl", + "disclaimer", + "cards" +]
- Changed
get_property_decision_intelligence2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "attribution", - "disclaimer" -]New value: +[ + "attribution", + "disclaimer", + "cards" +]
- Changed
get_property_details2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "listing", - "notFound", - "attribution", - "disclaimer" -]New value: +[ + "listing", + "notFound", + "attribution", + "disclaimer", + "cards" +]
- Changed
optimize_home_loan_tax_regime2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "annualIncome", - "propertyType", - "jointLoan", - "old", - "new", - "recommended", - "annualSaving", - "homeLoanTaxBenefitOld", - "notModeled", - "assumptions", - "attribution", - "disclaimer" -]New value: +[ + "annualIncome", + "propertyType", + "jointLoan", + "old", + "new", + "recommended", + "annualSaving", + "homeLoanTaxBenefitOld", + "notModeled", + "assumptions", + "attribution", + "disclaimer", + "cards" +]
- Changed
simulate_loan_prepayment2 fields changed- added
Output schema / properties / cardsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "priority": { + "type": "integer" + }, + "template": { + "type": "string" + } + }, + "required": [ + "template", + "data", + "priority" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "outstandingPrincipal", - "annualRatePercent", - "remainingTenureYears", - "prepaymentMode", - "strategy", - "applied", - "baseline", - "assumptions", - "attribution", - "disclaimer" -]New value: +[ + "outstandingPrincipal", + "annualRatePercent", + "remainingTenureYears", + "prepaymentMode", + "strategy", + "applied", + "baseline", + "assumptions", + "attribution", + "disclaimer", + "cards" +]
11 tool updates
- Changed
calculate_home_affordability1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "assumptions": { + "additionalProperties": true, + "properties": { + "actualLtvPercent": { + "type": "number" + }, + "defaultLtvPercent": { + "enum": [ + 80 + ] + }, + "downPaymentAmount": { + "type": "integer" + }, + "interestType": { + "enum": [ + "reducing-balance" + ] + }, + "notALoanApproval": { + "enum": [ + true + ] + } + }, + "required": [ + "defaultLtvPercent", + "actualLtvPercent", + "downPaymentAmount", + "interestType", + "notALoanApproval" + ], + "type": "object" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "emi": { + "type": "integer" + }, + "inputPropertyValue": { + "type": "integer" + }, + "interestRatePercent": { + "type": "number" + }, + "loanAmount": { + "type": "integer" + }, + "tenureYears": { + "type": "integer" + }, + "totalInterest": { + "type": "integer" + }, + "totalPayment": { + "type": "integer" + } + }, + "required": [ + "inputPropertyValue", + "loanAmount", + "interestRatePercent", + "tenureYears", + "emi", + "totalInterest", + "totalPayment", + "assumptions", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
compare_balance_transfer1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "assumptions": { + "additionalProperties": true, + "properties": { + "floatingForeclosurePenaltyWaived": { + "enum": [ + true + ] + }, + "interestType": { + "enum": [ + "reducing-balance" + ] + }, + "notALoanApproval": { + "enum": [ + true + ] + }, + "tenureHeldConstant": { + "enum": [ + true + ] + } + }, + "required": [ + "interestType", + "tenureHeldConstant", + "floatingForeclosurePenaltyWaived", + "notALoanApproval" + ], + "type": "object" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "breakevenMonths": { + "type": [ + "integer", + "null" + ] + }, + "currentEmi": { + "type": "integer" + }, + "currentRatePercent": { + "type": "number" + }, + "currentTotalInterest": { + "type": "integer" + }, + "disclaimer": { + "type": "string" + }, + "grossInterestSaved": { + "type": "integer" + }, + "monthlyEmiSaving": { + "type": "integer" + }, + "netSaving": { + "type": "integer" + }, + "newEmi": { + "type": "integer" + }, + "newRatePercent": { + "type": "number" + }, + "newTotalInterest": { + "type": "integer" + }, + "outstandingPrincipal": { + "type": "integer" + }, + "remainingTenureYears": { + "type": "integer" + }, + "switchingCost": { + "type": "integer" + }, + "worthIt": { + "type": "boolean" + } + }, + "required": [ + "outstandingPrincipal", + "currentRatePercent", + "newRatePercent", + "remainingTenureYears", + "currentEmi", + "newEmi", + "monthlyEmiSaving", + "currentTotalInterest", + "newTotalInterest", + "grossInterestSaved", + "switchingCost", + "netSaving", + "breakevenMonths", + "worthIt", + "assumptions", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
compare_localities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "city": { + "type": "string" + }, + "comparison": { + "additionalProperties": { + "additionalProperties": true, + "properties": { + "highlights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "investmentGrade": { + "type": [ + "string", + "null" + ] + }, + "livabilityScore": { + "type": [ + "number", + "null" + ] + }, + "priceTrends": { + "items": { + "additionalProperties": true, + "properties": { + "avgPriceInr": { + "type": [ + "number", + "null" + ] + }, + "period": { + "type": "string" + } + }, + "required": [ + "period", + "avgPriceInr" + ], + "type": "object" + }, + "type": "array" + }, + "strengthTags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "watchouts": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "priceTrends", + "livabilityScore", + "investmentGrade", + "strengthTags", + "watchouts", + "highlights" + ], + "type": "object" + }, + "type": "object" + }, + "disclaimer": { + "type": "string" + }, + "handoffUrl": { + "format": "uri", + "type": "string" + }, + "localities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "scopeMessage": { + "type": "string" + }, + "supported": { + "type": "boolean" + }, + "supportedCities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "city", + "localities", + "supported", + "comparison", + "attribution", + "handoffUrl", + "disclaimer" + ], + "type": "object" +}
- Changed
compare_properties1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "comparison": { + "items": { + "additionalProperties": true, + "properties": { + "listing": { + "additionalProperties": true, + "properties": { + "ageInYears": { + "type": [ + "integer", + "null" + ] + }, + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "availableFrom": { + "type": [ + "string", + "null" + ] + }, + "bathrooms": { + "type": [ + "integer", + "null" + ] + }, + "bhk": { + "type": [ + "integer", + "null" + ] + }, + "carpetAreaSqft": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": "string" + }, + "floorNumber": { + "type": [ + "integer", + "null" + ] + }, + "furnishingStatus": { + "enum": [ + "furnished", + "semi-furnished", + "unfurnished" + ], + "type": [ + "string", + "null" + ] + }, + "imageThumbnailUrl": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "listingId": { + "type": "string" + }, + "listingType": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "locality": { + "type": "string" + }, + "parkingCount": { + "type": [ + "integer", + "null" + ] + }, + "price": { + "type": "integer" + }, + "priceUnit": { + "enum": [ + "INR" + ] + }, + "reraId": { + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "totalFloors": { + "type": [ + "integer", + "null" + ] + }, + "validUntil": { + "type": [ + "string", + "null" + ] + }, + "verified": { + "type": "boolean" + }, + "verifiedAt": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" + ], + "type": [ + "object", + "null" + ] + }, + "listingId": { + "type": "string" + }, + "metrics": { + "additionalProperties": true, + "properties": { + "pricePerSqft": { + "type": [ + "integer", + "null" + ] + }, + "vsCheapestPercent": { + "type": [ + "integer", + "null" + ] + }, + "vsLargestAreaPercent": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "pricePerSqft", + "vsCheapestPercent", + "vsLargestAreaPercent" + ], + "type": [ + "object", + "null" + ] + }, + "status": { + "enum": [ + "found", + "not_found_or_unpublished" + ], + "type": "string" + } + }, + "required": [ + "listingId", + "listing", + "status", + "metrics" + ], + "type": "object" + }, + "type": "array" + }, + "disclaimer": { + "type": "string" + }, + "framing": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "comparison", + "framing", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
estimate_stamp_duty_and_registration1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "propertyValue": { + "type": "integer" + }, + "rateBasis": { + "type": "string" + }, + "rateEffectiveDate": { + "type": "string" + }, + "registrationFee": { + "type": "integer" + }, + "stampDuty": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "supported": { + "type": "boolean" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "propertyValue", + "state", + "supported", + "stampDuty", + "registrationFee", + "total", + "rateBasis", + "rateEffectiveDate", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
get_locality_insights1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "city": { + "type": "string" + }, + "disclaimer": { + "type": "string" + }, + "freshness": { + "additionalProperties": true, + "properties": { + "confidence": { + "enum": [ + "high", + "medium", + "low" + ], + "type": [ + "string", + "null" + ] + }, + "sourceCount": { + "type": [ + "integer", + "null" + ] + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "updatedAt", + "sourceCount", + "confidence" + ], + "type": "object" + }, + "handoffUrl": { + "format": "uri", + "type": "string" + }, + "insights": { + "additionalProperties": true, + "properties": { + "avgPriceInr": { + "type": [ + "number", + "null" + ] + }, + "demandPulse": { + "enum": [ + "low", + "medium", + "high" + ], + "type": [ + "string", + "null" + ] + }, + "highlights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "investmentGrade": { + "type": [ + "string", + "null" + ] + }, + "livabilityScore": { + "type": [ + "number", + "null" + ] + }, + "priceTrends": { + "items": { + "additionalProperties": true, + "properties": { + "avgPriceInr": { + "type": [ + "number", + "null" + ] + }, + "period": { + "type": "string" + } + }, + "required": [ + "period", + "avgPriceInr" + ], + "type": "object" + }, + "type": "array" + }, + "strengthTags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "supplyCount": { + "type": [ + "integer", + "null" + ] + }, + "watchouts": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "avgPriceInr", + "supplyCount", + "demandPulse", + "livabilityScore", + "investmentGrade", + "highlights", + "watchouts", + "priceTrends", + "strengthTags" + ], + "type": "object" + }, + "locality": { + "type": "string" + }, + "message": { + "type": "string" + }, + "scopeMessage": { + "type": "string" + }, + "supported": { + "type": "boolean" + }, + "supportedCities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "city", + "locality", + "supported", + "insights", + "freshness", + "attribution", + "handoffUrl", + "disclaimer" + ], + "type": "object" +}
- Changed
get_property_decision_intelligence1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "affordability": { + "additionalProperties": true, + "properties": { + "downPayment": { + "type": "integer" + }, + "downPaymentGap": { + "type": [ + "integer", + "null" + ] + }, + "lifetimeCost": { + "type": "integer" + }, + "otherCharges": { + "type": "integer" + }, + "otherChargesBreakdown": { + "additionalProperties": true, + "properties": { + "gstUnderConstruction": { + "type": "integer" + }, + "legalFee": { + "type": "integer" + }, + "loanProcessingFee": { + "type": "integer" + } + }, + "required": [ + "loanProcessingFee", + "legalFee", + "gstUnderConstruction" + ], + "type": "object" + }, + "propertyValue": { + "type": "integer" + }, + "savingsAvailable": { + "type": [ + "integer", + "null" + ] + }, + "stampDutyAndRegistration": { + "type": "integer" + }, + "totalCashToClose": { + "type": "integer" + } + }, + "required": [ + "propertyValue", + "downPayment", + "stampDutyAndRegistration", + "otherCharges", + "otherChargesBreakdown", + "totalCashToClose", + "lifetimeCost", + "savingsAvailable", + "downPaymentGap" + ], + "type": "object" + }, + "assumptions": { + "additionalProperties": true, + "properties": { + "annualIncomeEstimated": { + "type": "boolean" + }, + "buyerGender": { + "enum": [ + "male", + "female", + "joint" + ], + "type": "string" + }, + "cibilProvided": { + "type": "boolean" + }, + "ltvBasis": { + "type": "string" + }, + "rateSource": { + "type": "string" + }, + "regimeYear": { + "enum": [ + "FY2026-27" + ] + }, + "savingsProvided": { + "type": "boolean" + }, + "seniorCitizenNotModeled": { + "enum": [ + true + ] + } + }, + "required": [ + "rateSource", + "ltvBasis", + "regimeYear", + "annualIncomeEstimated", + "buyerGender", + "cibilProvided", + "savingsProvided", + "seniorCitizenNotModeled" + ], + "type": "object" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "eligibility": { + "additionalProperties": true, + "properties": { + "approvalLikelihood": { + "enum": [ + "high", + "medium", + "low", + "indicative" + ], + "type": "string" + }, + "bound": { + "enum": [ + "foir", + "ltv" + ], + "type": "string" + }, + "cibilBand": { + "type": [ + "string", + "null" + ] + }, + "eligibleLoan": { + "type": "integer" + }, + "foirAtEligibleLoanPct": { + "type": "number" + }, + "foirCeilingPct": { + "type": "number" + }, + "foirComfortPct": { + "type": "number" + }, + "ltvPct": { + "type": "number" + }, + "maxLoanByFoir": { + "type": "integer" + }, + "maxLoanByLtv": { + "type": "integer" + }, + "notALoanApproval": { + "enum": [ + true + ] + }, + "notAnOffer": { + "enum": [ + true + ] + }, + "reasoning": { + "type": "string" + } + }, + "required": [ + "maxLoanByFoir", + "maxLoanByLtv", + "eligibleLoan", + "bound", + "ltvPct", + "foirAtEligibleLoanPct", + "foirCeilingPct", + "foirComfortPct", + "cibilBand", + "approvalLikelihood", + "notALoanApproval", + "notAnOffer", + "reasoning" + ], + "type": "object" + }, + "emi": { + "additionalProperties": true, + "properties": { + "interestRatePercent": { + "type": "number" + }, + "loanAmount": { + "type": "integer" + }, + "monthlyEmi": { + "type": "integer" + }, + "tenureYears": { + "type": "integer" + }, + "totalInterest": { + "type": "integer" + }, + "totalPayment": { + "type": "integer" + } + }, + "required": [ + "loanAmount", + "interestRatePercent", + "tenureYears", + "monthlyEmi", + "totalInterest", + "totalPayment" + ], + "type": "object" + }, + "mode": { + "enum": [ + "listing", + "manual" + ], + "type": "string" + }, + "notFound": { + "type": "boolean" + }, + "stampDutySupported": { + "type": "boolean" + }, + "tax": { + "additionalProperties": true, + "properties": { + "homeLoanTaxBenefitOld": { + "type": "integer" + }, + "netEffectiveAnnualBenefit": { + "type": "integer" + }, + "netEffectiveMonthlyEmi": { + "type": "integer" + }, + "notModeled": { + "items": { + "type": "string" + }, + "type": "array" + }, + "recommendedRegime": { + "enum": [ + "old", + "new" + ], + "type": "string" + } + }, + "required": [ + "recommendedRegime", + "homeLoanTaxBenefitOld", + "netEffectiveAnnualBenefit", + "netEffectiveMonthlyEmi", + "notModeled" + ], + "type": "object" + }, + "verdict": { + "additionalProperties": true, + "properties": { + "blockingLever": { + "type": [ + "string", + "null" + ] + }, + "confidence": { + "enum": [ + "indicative" + ] + }, + "headline": { + "type": "string" + }, + "levers": { + "items": { + "additionalProperties": true, + "properties": { + "amountInr": { + "type": "integer" + }, + "effect": { + "type": "string" + }, + "lever": { + "type": "string" + } + }, + "required": [ + "lever", + "effect" + ], + "type": "object" + }, + "type": "array" + }, + "signal": { + "enum": [ + "AFFORDABLE", + "STRETCH", + "NOT_YET", + "INELIGIBLE" + ], + "type": "string" + } + }, + "required": [ + "signal", + "headline", + "blockingLever", + "levers", + "confidence" + ], + "type": "object" + } + }, + "required": [ + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
get_property_details1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "handoffUrl": { + "format": "uri", + "type": "string" + }, + "listing": { + "additionalProperties": true, + "properties": { + "ageInYears": { + "type": [ + "integer", + "null" + ] + }, + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "availableFrom": { + "type": [ + "string", + "null" + ] + }, + "bathrooms": { + "type": [ + "integer", + "null" + ] + }, + "bhk": { + "type": [ + "integer", + "null" + ] + }, + "carpetAreaSqft": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": "string" + }, + "floorNumber": { + "type": [ + "integer", + "null" + ] + }, + "furnishingStatus": { + "enum": [ + "furnished", + "semi-furnished", + "unfurnished" + ], + "type": [ + "string", + "null" + ] + }, + "imageThumbnailUrl": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "listingId": { + "type": "string" + }, + "listingType": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "locality": { + "type": "string" + }, + "parkingCount": { + "type": [ + "integer", + "null" + ] + }, + "price": { + "type": "integer" + }, + "priceUnit": { + "enum": [ + "INR" + ] + }, + "reraId": { + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "totalFloors": { + "type": [ + "integer", + "null" + ] + }, + "validUntil": { + "type": [ + "string", + "null" + ] + }, + "verified": { + "type": "boolean" + }, + "verifiedAt": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" + ], + "type": [ + "object", + "null" + ] + }, + "message": { + "type": "string" + }, + "notFound": { + "type": "boolean" + } + }, + "required": [ + "listing", + "notFound", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
optimize_home_loan_tax_regime1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annualIncome": { + "type": "integer" + }, + "annualSaving": { + "type": "integer" + }, + "assumptions": { + "additionalProperties": true, + "properties": { + "notTaxAdvice": { + "enum": [ + true + ] + }, + "regimeYear": { + "enum": [ + "FY2026-27" + ] + }, + "section80EEAExcluded": { + "enum": [ + true + ] + }, + "surchargeNotModeled": { + "enum": [ + true + ] + } + }, + "required": [ + "regimeYear", + "surchargeNotModeled", + "section80EEAExcluded", + "notTaxAdvice" + ], + "type": "object" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "homeLoanTaxBenefitOld": { + "type": "integer" + }, + "jointLoan": { + "type": "boolean" + }, + "new": { + "additionalProperties": true, + "properties": { + "deductionsApplied": { + "type": "integer" + }, + "taxableIncome": { + "type": "integer" + }, + "totalTax": { + "type": "integer" + } + }, + "required": [ + "taxableIncome", + "totalTax", + "deductionsApplied" + ], + "type": "object" + }, + "notModeled": { + "items": { + "type": "string" + }, + "type": "array" + }, + "nri": { + "additionalProperties": true, + "properties": { + "countryOfResidence": { + "type": "string" + }, + "dtaaNote": { + "type": "string" + }, + "repatriation": { + "additionalProperties": true, + "properties": { + "availableUsd": { + "type": "number" + }, + "capUsd": { + "type": "number" + }, + "disclaimer": { + "type": "string" + }, + "notModeled": { + "items": { + "type": "string" + }, + "type": "array" + }, + "requiresCA": { + "type": "boolean" + } + }, + "required": [ + "availableUsd", + "capUsd", + "requiresCA", + "notModeled", + "disclaimer" + ], + "type": "object" + }, + "tds": { + "additionalProperties": true, + "properties": { + "disclaimer": { + "type": "string" + }, + "form13EligibilityHint": { + "type": "boolean" + }, + "ltcgTax": { + "type": "number" + }, + "notModeled": { + "items": { + "type": "string" + }, + "type": "array" + }, + "section195Rate": { + "type": "number" + }, + "stcgTax": { + "type": "number" + }, + "tdsAmount": { + "type": "number" + } + }, + "required": [ + "section195Rate", + "tdsAmount", + "ltcgTax", + "stcgTax", + "form13EligibilityHint", + "notModeled", + "disclaimer" + ], + "type": "object" + } + }, + "required": [ + "countryOfResidence", + "dtaaNote" + ], + "type": "object" + }, + "old": { + "additionalProperties": true, + "properties": { + "deductionsApplied": { + "type": "integer" + }, + "taxableIncome": { + "type": "integer" + }, + "totalTax": { + "type": "integer" + } + }, + "required": [ + "taxableIncome", + "totalTax", + "deductionsApplied" + ], + "type": "object" + }, + "propertyType": { + "enum": [ + "self_occupied", + "let_out" + ], + "type": "string" + }, + "recommended": { + "enum": [ + "old", + "new" + ], + "type": "string" + }, + "residencyStatus": { + "enum": [ + "nri" + ] + } + }, + "required": [ + "annualIncome", + "propertyType", + "jointLoan", + "old", + "new", + "recommended", + "annualSaving", + "homeLoanTaxBenefitOld", + "notModeled", + "assumptions", + "attribution", + "disclaimer" + ], + "type": "object" +}
- Changed
search_properties1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "attribution": { + "enum": [ + "AVnester" + ] + }, + "disclaimer": { + "type": "string" + }, + "handoffUrl": { + "format": "uri", + "type": "string" + }, + "listings": { + "items": { + "additionalProperties": true, + "properties": { + "ageInYears": { + "type": [ + "integer", + "null" + ] + }, + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "availableFrom": { + "type": [ + "string", + "null" + ] + }, + "bathrooms": { + "type": [ + "integer", + "null" + ] + }, + "bhk": { + "type": [ + "integer", + "null" + ] + }, + "carpetAreaSqft": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": "string" + }, + "floorNumber": { + "type": [ + "integer", + "null" + ] + }, + "furnishingStatus": { + "enum": [ + "furnished", + "semi-furnished", + "unfurnished" + ], + "type": [ + "string", + "null" + ] + }, + "imageThumbnailUrl": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "listingId": { + "type": "string" + }, + "listingType": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "locality": { + "type": "string" + }, + "parkingCount": { + "type": [ + "integer", + "null" + ] + }, + "price": { + "type": "integer" + }, + "priceUnit": { + "enum": [ + "INR" + ] + }, + "reraId": { + "type": [ + "string", + "null" + ] + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "totalFloors": { + "type": [ + "integer", + "null" + ] + }, + "validUntil": { + "type": [ + "string", + "null" + ] + }, + "verified": { + "type": "boolean" + }, + "verifiedAt": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "listingId", + "title", + "summary", + "city", + "locality", + "bhk", + "bathrooms", + "carpetAreaSqft", + "price", + "priceUnit", + "listingType", + "furnishingStatus", + "parkingCount", + "floorNumber", + "totalFloors", + "ageInYears", + "availableFrom", + "amenities", + "reraId", + "verified", + "verifiedAt", + "validUntil", + "sourceUrl", + "attribution", + "imageThumbnailUrl" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "scopeMessage": { + "type": "string" + }, + "supported": { + "type": "boolean" + }, + "supportedCities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "total", + "listings", + "supported", + "attribution", + "handoffUrl", + "disclaimer" + ], + "type": "object" +}
- Changed
simulate_loan_prepayment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annualRatePercent": { + "type": "number" + }, + "applied": { + "additionalProperties": true, + "properties": { + "oneTime": { + "type": "integer" + }, + "recurringAnnual": { + "type": "integer" + } + }, + "required": [ + "oneTime", + "recurringAnnual" + ], + "type": "object" + }, + "assumptions": { + "additionalProperties": true, + "properties": { + "floatingRatePrepaymentPenaltyWaived": { + "enum": [ + true + ] + }, + "interestType": { + "enum": [ + "reducing-balance" + ] + }, + "notALoanApproval": { + "enum": [ + true + ] + }, + "oneTimeAppliedImmediately": { + "enum": [ + true + ] + }, + "recurringAppliedAnnually": { + "enum": [ + true + ] + } + }, + "required": [ + "interestType", + "oneTimeAppliedImmediately", + "recurringAppliedAnnually", + "floatingRatePrepaymentPenaltyWaived", + "notALoanApproval" + ], + "type": "object" + }, + "attribution": { + "enum": [ + "AVnester" + ] + }, + "baseline": { + "additionalProperties": true, + "properties": { + "emi": { + "type": "integer" + }, + "payoffMonths": { + "type": "integer" + }, + "totalInterest": { + "type": "integer" + } + }, + "required": [ + "emi", + "payoffMonths", + "totalInterest" + ], + "type": "object" + }, + "disclaimer": { + "type": "string" + }, + "outstandingPrincipal": { + "type": "integer" + }, + "prepaymentMode": { + "enum": [ + "one_time", + "recurring_annual", + "one_time_plus_recurring" + ], + "type": "string" + }, + "reduceEmi": { + "additionalProperties": true, + "properties": { + "emi": { + "type": "integer" + }, + "interestSaved": { + "type": "integer" + }, + "monthsSaved": { + "type": "integer" + }, + "payoffMonths": { + "type": "integer" + }, + "totalInterest": { + "type": "integer" + } + }, + "required": [ + "emi", + "payoffMonths", + "totalInterest", + "interestSaved", + "monthsSaved" + ], + "type": "object" + }, + "reduceTenure": { + "additionalProperties": true, + "properties": { + "emi": { + "type": "integer" + }, + "interestSaved": { + "type": "integer" + }, + "monthsSaved": { + "type": "integer" + }, + "payoffMonths": { + "type": "integer" + }, + "totalInterest": { + "type": "integer" + } + }, + "required": [ + "emi", + "payoffMonths", + "totalInterest", + "interestSaved", + "monthsSaved" + ], + "type": "object" + }, + "remainingTenureYears": { + "type": "integer" + }, + "strategy": { + "enum": [ + "reduce_tenure", + "reduce_emi", + "compare_both" + ], + "type": "string" + } + }, + "required": [ + "outstandingPrincipal", + "annualRatePercent", + "remainingTenureYears", + "prepaymentMode", + "strategy", + "applied", + "baseline", + "assumptions", + "attribution", + "disclaimer" + ], + "type": "object" +}
Related MCP Connectors
Aggregated India property data: 99acres, MagicBricks, NoBroker, Housing.com. Rent, sale, commercial.
AI-native real estate discovery with structured property search and market intelligence.
Property listings in Portugal: search, market stats, comparables, neighbourhoods.
Real Australian lender serviceability, plus repayments, borrowing power and stamp duty.
Related MCP Servers
- AlicenseAqualityDmaintenancePhilippine real estate data for AI agents — search verified listings, calculate transfer costs, and get accurate legal information via lupaph.com.631 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables users to generate rental agreements and receipts as PDFs through an AI-powered WhatsApp bot. Provides stamp duty information lookup and handles rental document creation with customizable templates.-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables real estate property searches with location and criteria filtering, plus comprehensive mortgage calculations including monthly payments and affordability analysis. Currently uses mock data for property searches but provides full mortgage calculation functionality.-
- MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.