MCPサーバー

AVnester — Indian Real Estate Intelligence

com.avnester.mcp/property-intelligence
金融・投資 不動産 公開・接続可能 MCP 2025-11-25

このMCPでできること

Searches Indian property listings and provides locality insights, affordability, loan, tax, stamp-duty, registration, refinancing, and prepayment calculations.

calculate_home_affordability
Estimate home-loan EMI (calculator)
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['propertyValue'], 'properties': {'loanAmount': {'type': 'integer', 'description': 'Loan amount in INR. Pass this when the user states a specific loan (e.g. "â\x82¹50 lakh loan") rather than a property price. Defaults to 80% of propertyValue if omitted.', 'exclusiveMinimum': 0}, 'tenureYears': {'type': 'integer', 'maximum': 40, 'minimum': 1, 'description': 'Loan tenure in years. Defaults to 20.'}, 'propertyValue': {'type': 'integer', 'description': 'Property value (price) in INR. When the user states a property/home price, put it here â\x80\x94 an 80% loan is assumed unless loanAmount is also given.', 'exclusiveMinimum': 0}, 'interestRatePercent': {'type': 'number', 'maximum': 30, 'minimum': 1, 'description': 'Annual interest rate (percent). Defaults to current market estimate.'}}}
出力スキーマ
{'type': 'object', 'required': ['inputPropertyValue', 'loanAmount', 'interestRatePercent', 'tenureYears', 'emi', 'totalInterest', 'totalPayment', 'assumptions', 'assumptionNote', 'attribution', 'disclaimer', 'cards'], 'properties': {'emi': {'type': 'integer'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'disclaimer': {'type': 'string'}, 'loanAmount': {'type': 'integer'}, 'assumptions': {'type': 'object', 'required': ['defaultLtvPercent', 'actualLtvPercent', 'downPaymentAmount', 'lenderMaxLoan', 'unfundedAmount', 'interestType', 'notALoanApproval'], 'properties': {'interestType': {'enum': ['reducing-balance']}, 'lenderMaxLoan': {'type': 'integer'}, 'unfundedAmount': {'type': 'integer'}, 'actualLtvPercent': {'type': 'number'}, 'notALoanApproval': {'enum': [True]}, 'defaultLtvPercent': {'type': 'number'}, 'downPaymentAmount': {'type': 'integer'}}, 'additionalProperties': True}, 'attribution': {'enum': ['AVnester']}, 'tenureYears': {'type': 'integer'}, 'totalPayment': {'type': 'integer'}, 'totalInterest': {'type': 'integer'}, 'assumptionNote': {'type': 'string'}, 'inputPropertyValue': {'type': 'integer'}, 'interestRatePercent': {'type': 'number'}}, 'additionalProperties': True}
compare_balance_transfer
Compare home-loan balance transfer (calculator)
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['outstandingPrincipal', 'currentRatePercent', 'newRatePercent', 'remainingTenureYears'], 'properties': {'flatCosts': {'type': 'integer', 'minimum': 0, 'description': 'Flat legal + valuation charges in INR. Defaults to â\x82¹12,500.'}, 'newRatePercent': {'type': 'number', 'maximum': 30, 'minimum': 1, 'description': 'New lender annual interest rate (percent).'}, 'processingFeePct': {'type': 'number', 'maximum': 5, 'minimum': 0, 'description': 'New-lender processing fee on the balance (percent). Defaults to 0.5%.'}, 'currentRatePercent': {'type': 'number', 'maximum': 30, 'minimum': 1, 'description': 'Current annual interest rate (percent).'}, 'outstandingPrincipal': {'type': 'integer', 'description': 'Current outstanding home-loan principal in INR.', 'exclusiveMinimum': 0}, 'remainingTenureYears': {'type': 'integer', 'maximum': 40, 'minimum': 1, 'description': 'Years left on the loan.'}}}
出力スキーマ
{'type': 'object', 'required': ['outstandingPrincipal', 'currentRatePercent', 'newRatePercent', 'remainingTenureYears', 'currentEmi', 'newEmi', 'monthlyEmiSaving', 'currentTotalInterest', 'newTotalInterest', 'grossInterestSaved', 'switchingCost', 'netSaving', 'breakevenMonths', 'worthIt', 'assumptions', 'attribution', 'disclaimer', 'cards'], 'properties': {'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'newEmi': {'type': 'integer'}, 'worthIt': {'type': 'boolean'}, 'netSaving': {'type': 'integer'}, 'currentEmi': {'type': 'integer'}, 'disclaimer': {'type': 'string'}, 'assumptions': {'type': 'object', 'required': ['interestType', 'tenureHeldConstant', 'floatingForeclosurePenaltyWaived', 'notALoanApproval'], 'properties': {'interestType': {'enum': ['reducing-balance']}, 'notALoanApproval': {'enum': [True]}, 'tenureHeldConstant': {'enum': [True]}, 'floatingForeclosurePenaltyWaived': {'enum': [True]}}, 'additionalProperties': True}, 'attribution': {'enum': ['AVnester']}, 'switchingCost': {'type': 'integer'}, 'newRatePercent': {'type': 'number'}, 'breakevenMonths': {'type': ['integer', 'null']}, 'monthlyEmiSaving': {'type': 'integer'}, 'newTotalInterest': {'type': 'integer'}, 'currentRatePercent': {'type': 'number'}, 'grossInterestSaved': {'type': 'integer'}, 'currentTotalInterest': {'type': 'integer'}, 'outstandingPrincipal': {'type': 'integer'}, 'remainingTenureYears': {'type': 'integer'}}, 'additionalProperties': True}
compare_localities
Compare Indian localities head-to-head
Compare 2–3 Coimbatore or Chennai localities side-by-side: price trends, livability, investment grade, strengths, and watchouts. Use when the user asks "X vs Y" or "which is better between X and Y for buying/renting" about neighborhoods in these cities. Out-of-scope cities return supported=false; surface the scopeMessage to the user. For comparing specific LISTINGS by ID, use compare_properties instead.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['city', 'localities'], 'properties': {'city': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 60, 'minLength': 1, 'description': 'Indian city covering all compared localities.'}, 'localities': {'type': 'array', 'items': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 80, 'minLength': 1}, 'maxItems': 3, 'minItems': 2, 'description': '2â\x80\x933 localities to compare (array, not comma-separated string).'}, 'propertyType': {'enum': ['apartment', 'villa', 'plot', 'independent_house'], 'type': 'string', 'description': 'Property type for comparison.'}}}
出力スキーマ
{'type': 'object', 'required': ['city', 'localities', 'supported', 'comparison', 'attribution', 'handoffUrl', 'disclaimer', 'cards'], 'properties': {'city': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'supported': {'type': 'boolean'}, 'comparison': {'type': 'object', 'additionalProperties': {'type': 'object', 'required': ['priceTrends', 'pricePerSqftInr', 'rent2bhkInr', 'rentalYieldPct', 'priceGrowth1YPct', 'asOfMonth', 'sourceCount', 'confidence', 'livabilityScore', 'livabilityScoreBasis', 'investmentGrade', 'strengthTags', 'watchouts', 'highlights'], 'properties': {'asOfMonth': {'type': ['string', 'null']}, 'watchouts': {'type': 'array', 'items': {'type': 'string'}}, 'confidence': {'enum': ['high', 'medium', 'low'], 'type': ['string', 'null']}, 'highlights': {'type': 'array', 'items': {'type': 'string'}}, 'priceTrends': {'type': 'array', 'items': {'type': 'object', 'required': ['period', 'avgPriceInr'], 'properties': {'period': {'type': 'string'}, 'avgPriceInr': {'type': ['number', 'null']}}, 'additionalProperties': True}}, 'rent2bhkInr': {'type': ['number', 'null']}, 'sourceCount': {'type': ['integer', 'null']}, 'strengthTags': {'type': 'array', 'items': {'type': 'string'}}, 'rentalYieldPct': {'type': ['number', 'null']}, 'investmentGrade': {'type': ['string', 'null']}, 'livabilityScore': {'type': ['number', 'null']}, 'pricePerSqftInr': {'type': ['number', 'null']}, 'priceGrowth1YPct': {'type': ['number', 'null']}, 'livabilityScoreBasis': {'enum': ['editorial-estimate'], 'type': ['string', 'null']}}, 'additionalProperties': True}}, 'disclaimer': {'type': 'string'}, 'handoffUrl': {'type': 'string', 'format': 'uri'}, 'localities': {'type': 'array', 'items': {'type': 'string'}}, 'attribution': {'enum': ['AVnester']}, 'scopeMessage': {'type': 'string'}, 'supportedCities': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
compare_properties
Compare AVnester properties (trade-offs)
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 price-per-sqft) and say so. Returns each listing plus pricePerSqft, vsCheapestPercent (0 = cheapest), vsLargestAreaPercent (0 = largest). Covers Coimbatore and Chennai; unknown IDs return not_found_or_unpublished. Does NOT recommend a purchase. Always surface the disclaimer.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['listingIds'], 'properties': {'listingIds': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'maxItems': 5, 'minItems': 2, 'description': '2â\x80\x935 AVnester listingIds (from search_properties results) to compare. IDs are not guessable â\x80\x94 call search_properties first. Order is preserved in the output.'}}}
出力スキーマ
{'type': 'object', 'required': ['comparison', 'framing', 'attribution', 'disclaimer', 'cards'], 'properties': {'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'framing': {'type': 'string'}, 'message': {'type': 'string'}, 'comparison': {'type': 'array', 'items': {'type': 'object', 'required': ['listingId', 'listing', 'status', 'metrics'], 'properties': {'status': {'enum': ['found', 'not_found_or_unpublished'], 'type': 'string'}, 'listing': {'type': ['object', 'null'], 'required': ['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'], 'properties': {'bhk': {'type': ['integer', 'null']}, 'city': {'type': 'string'}, 'price': {'type': 'integer'}, 'title': {'type': 'string'}, 'reraId': {'type': ['string', 'null']}, 'summary': {'type': 'string'}, 'featured': {'type': 'boolean'}, 'locality': {'type': 'string'}, 'verified': {'type': 'boolean'}, 'bathrooms': {'type': ['integer', 'null']}, 'listingId': {'type': 'string'}, 'priceUnit': {'enum': ['INR']}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'ageInYears': {'type': ['integer', 'null']}, 'validUntil': {'type': ['string', 'null']}, 'verifiedAt': {'type': ['string', 'null']}, 'attribution': {'enum': ['AVnester']}, 'floorNumber': {'type': ['integer', 'null']}, 'leaseAmount': {'type': ['number', 'null']}, 'listingType': {'enum': ['sale', 'rent'], 'type': 'string'}, 'plotDetails': {'type': ['object', 'null'], 'required': ['dtcpApproved', 'dtcpNumber', 'landClassification', 'facing', 'roadWidthFt', 'gatedCommunity', 'waterAvailability', 'electricity', 'ownershipType', 'plotNumber', 'pincode', 'pattaChittaStatus', 'encumbranceStatus', 'guidelineValueInr', 'plotLengthFt', 'plotBreadthFt'], 'properties': {'facing': {'type': ['string', 'null']}, 'pincode': {'type': ['string', 'null']}, 'dtcpNumber': {'type': ['string', 'null']}, 'plotNumber': {'type': ['string', 'null']}, 'electricity': {'type': ['string', 'null']}, 'roadWidthFt': {'type': ['number', 'null']}, 'dtcpApproved': {'type': ['boolean', 'null']}, 'plotLengthFt': {'type': ['number', 'null']}, 'ownershipType': {'type': ['string', 'null']}, 'plotBreadthFt': {'type': ['number', 'null']}, 'gatedCommunity': {'type': ['boolean', 'null']}, 'encumbranceStatus': {'type': ['string', 'null']}, 'guidelineValueInr': {'type': ['integer', 'null']}, 'pattaChittaStatus': {'type': ['string', 'null']}, 'waterAvailability': {'type': ['string', 'null']}, 'landClassification': {'type': ['string', 'null']}}, 'additionalProperties': True}, 'totalFloors': {'type': ['integer', 'null']}, 'parkingCount': {'type': ['integer', 'null']}, 'pricePerSqft': {'type': ['integer', 'null']}, 'verification': {'type': 'object', 'required': ['documentVerified', 'tier', 'locationVerified', 'locationConfidence', 'lastVerifiedAt', 'method'], 'properties': {'tier': {'type': ['string', 'null']}, 'method': {'type': ['string', 'null']}, 'lastVerifiedAt': {'type': ['string', 'null']}, 'documentVerified': {'type': 'boolean'}, 'locationVerified': {'type': 'boolean'}, 'locationConfidence': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'availableFrom': {'type': ['string', 'null']}, 'carpetAreaSqft': {'type': ['number', 'null']}, 'leaseRefundable': {'type': ['boolean', 'null']}, 'rentalStructure': {'enum': ['monthly', 'lease'], 'type': ['string', 'null']}, 'furnishingStatus': {'enum': ['furnished', 'semi-furnished', 'unfurnished'], 'type': ['string', 'null']}, 'imageThumbnailUrl': {'type': ['string', 'null'], 'format': 'uri'}, 'leaseTenureMonths': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'metrics': {'type': ['object', 'null'], 'required': ['pricePerSqft', 'vsCheapestPercent', 'vsLargestAreaPercent'], 'properties': {'pricePerSqft': {'type': ['integer', 'null']}, 'vsCheapestPercent': {'type': ['integer', 'null']}, 'vsLargestAreaPercent': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'listingId': {'type': 'string'}}, 'additionalProperties': True}}, 'disclaimer': {'type': 'string'}, 'attribution': {'enum': ['AVnester']}}, 'additionalProperties': True}
estimate_stamp_duty_and_registration
Estimate stamp duty + registration (calculator)
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['propertyValue', 'state'], 'properties': {'city': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 60, 'minLength': 1, '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%. Send the place as the buyer names it ("Kharghar"), not the wider city it is listed under.'}, 'state': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 50, 'minLength': 1, 'description': 'Indian state â\x80\x94 ISO code ("MH"), slug ("maharashtra") or name ("Maharashtra"). Required.'}, 'isUrban': {'type': 'boolean', 'description': 'Urban (default) or rural. Used for the location when city and localBody are absent.'}, 'firstSale': {'type': 'boolean', '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 â\x87\x92 true, resale â\x87\x92 false, ready_to_move decides nothing (may be a resale)."}, 'localBody': {'enum': ['municipal_corporation', 'municipal_council', 'gram_panchayat'], 'type': 'string', '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).'}, 'buyerGender': {'enum': ['male', 'female', 'joint'], 'type': 'string', 'description': '"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': {'type': 'boolean', 'default': False, 'description': 'Backward-compatibility shim â\x80\x94 prefer buyerGender. When true, internally treated as buyerGender="female".'}, 'propertyType': {'enum': ['residential', 'commercial', 'agricultural', 'plot'], 'type': 'string', 'description': 'residential (default), plot (bare land; a residential-only concession does not reach it), commercial or agricultural.'}, 'propertyValue': {'type': 'integer', 'maximum': 10000000000, 'description': 'Sale value in INR for stamp-duty calculation.', 'exclusiveMinimum': 0}, 'carpetAreaSqft': {'type': 'integer', 'maximum': 100000, 'description': 'Carpet area (sqft) â\x80\x94 with value, decides the affordable-housing 1% GST slab.', 'exclusiveMinimum': 0}, 'constructionStatus': {'enum': ['under_construction', 'ready_to_move', 'resale'], 'type': 'string', 'description': 'When set, also itemizes GST: under-construction = 1% (affordable) / 5%; ready/resale = 0%. Omit â\x86\x92 GST not computed.'}}}
出力スキーマ
{'type': 'object', 'required': ['propertyValue', 'state', 'supported', 'stateCode', 'stateName', 'stampDuty', 'stampDutyBase', 'surcharges', 'registrationFee', 'registrationCapApplied', 'total', 'rateBasis', 'location', 'rateVerification', 'assumptions', 'rulesVersion', 'rateEffectiveDate', 'attribution', 'disclaimer', 'cards'], 'properties': {'gst': {'type': 'object', 'required': ['ratePct', 'amount', 'applies', 'isAffordable', 'itcAvailableToBuyer', 'basis'], 'properties': {'basis': {'type': 'string'}, 'amount': {'type': 'integer'}, 'applies': {'type': 'boolean'}, 'ratePct': {'type': 'number'}, 'isAffordable': {'type': 'boolean'}, 'itcAvailableToBuyer': {'enum': [False]}}, 'additionalProperties': True}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'state': {'type': 'string'}, 'total': {'type': 'integer'}, 'location': {'type': ['object', 'null'], 'required': ['place', 'localBody', 'source', 'assumed'], 'properties': {'place': {'type': ['object', 'null'], 'required': ['slug', 'name'], 'properties': {'area': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}}, 'additionalProperties': True}, 'source': {'enum': ['local_body', 'city', 'is_urban', 'default', 'not_applicable'], 'type': 'string'}, 'assumed': {'type': 'boolean'}, 'localBody': {'enum': ['municipal_corporation', 'municipal_council', 'gram_panchayat'], 'type': ['string', 'null']}}, 'additionalProperties': True}, 'rateBasis': {'type': 'string'}, 'stampDuty': {'type': 'integer'}, 'stateCode': {'type': ['string', 'null']}, 'stateName': {'type': ['string', 'null']}, 'supported': {'type': 'boolean'}, 'disclaimer': {'type': 'string'}, 'surcharges': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'ratePct', 'amount'], 'properties': {'name': {'type': 'string'}, 'amount': {'type': 'integer'}, 'ratePct': {'type': 'number'}, 'legalBasis': {'type': 'string'}}, 'additionalProperties': True}}, 'assumptions': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': True}}, 'attribution': {'enum': ['AVnester']}, 'rulesVersion': {'type': ['string', 'null']}, 'totalWithGst': {'type': 'integer'}, 'propertyValue': {'type': 'integer'}, 'stampDutyBase': {'type': 'integer'}, 'registrationFee': {'type': 'integer'}, 'rateVerification': {'type': 'object', 'required': ['status', 'lastVerifiedAt', 'sourceUrl', 'unverifiedComponents'], 'properties': {'status': {'enum': ['verified', 'partial', 'unverified'], 'type': 'string'}, 'sourceUrl': {'type': ['string', 'null']}, 'lastVerifiedAt': {'type': ['string', 'null']}, 'unverifiedComponents': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}, 'rateEffectiveDate': {'type': ['string', 'null']}, 'registrationCapApplied': {'type': 'boolean'}}, 'additionalProperties': True}
get_locality_insights
Get locality market insights
Get aggregated insights for a Coimbatore or Chennai locality: avg price, supply count, demand pulse, livability/investment grade, highlights, watchouts, monthly priceTrends, and strengthTags. Use when the user asks "what is X locality like" about a neighborhood in either city. Out-of-scope cities return supported=false; surface the scopeMessage to the user. Always surface the disclaimer field when returning livability or investment grade.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['locality', 'city'], 'properties': {'city': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 60, 'minLength': 1, 'description': 'Indian city (required).'}, 'locality': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 80, 'minLength': 1, 'description': 'Locality name within an Indian city.'}}}
出力スキーマ
{'type': 'object', 'required': ['city', 'locality', 'supported', 'insights', 'freshness', 'attribution', 'handoffUrl', 'disclaimer', 'cards'], 'properties': {'city': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'message': {'type': 'string'}, 'insights': {'type': 'object', 'required': ['avgPriceInr', 'pricePerSqftInr', 'rent2bhkInr', 'rentalYieldPct', 'priceGrowth1YPct', 'supplyCount', 'demandPulse', 'livabilityScore', 'livabilityScoreBasis', 'investmentGrade', 'highlights', 'watchouts', 'priceTrends', 'strengthTags'], 'properties': {'watchouts': {'type': 'array', 'items': {'type': 'string'}}, 'highlights': {'type': 'array', 'items': {'type': 'string'}}, 'avgPriceInr': {'type': ['number', 'null']}, 'demandPulse': {'enum': ['low', 'medium', 'high'], 'type': ['string', 'null']}, 'priceTrends': {'type': 'array', 'items': {'type': 'object', 'required': ['period', 'avgPriceInr'], 'properties': {'period': {'type': 'string'}, 'avgPriceInr': {'type': ['number', 'null']}}, 'additionalProperties': True}}, 'rent2bhkInr': {'type': ['number', 'null']}, 'supplyCount': {'type': ['integer', 'null']}, 'strengthTags': {'type': 'array', 'items': {'type': 'string'}}, 'rentalYieldPct': {'type': ['number', 'null']}, 'investmentGrade': {'type': ['string', 'null']}, 'livabilityScore': {'type': ['number', 'null']}, 'pricePerSqftInr': {'type': ['number', 'null']}, 'priceGrowth1YPct': {'type': ['number', 'null']}, 'livabilityScoreBasis': {'enum': ['editorial-estimate'], 'type': ['string', 'null']}}, 'additionalProperties': True}, 'locality': {'type': 'string'}, 'freshness': {'type': 'object', 'required': ['updatedAt', 'sourceCount', 'confidence'], 'properties': {'updatedAt': {'type': ['string', 'null']}, 'confidence': {'enum': ['high', 'medium', 'low'], 'type': ['string', 'null']}, 'sourceCount': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'supported': {'type': 'boolean'}, 'disclaimer': {'type': 'string'}, 'handoffUrl': {'type': 'string', 'format': 'uri'}, 'attribution': {'enum': ['AVnester']}, 'scopeMessage': {'type': 'string'}, 'supportedCities': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
get_property_decision_intelligence
Home purchase decision intelligence
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: listingId (Coimbatore/Chennai catalog). Mode B: propertyValue + state (any Indian state). NOT a loan approval, offer, or advice. Always surface the disclaimer.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['monthlyNetIncome'], 'properties': {'city': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 60, 'minLength': 1, 'description': 'City (manual mode), e.g. "Pune" â\x80\x94 decides Maharashtra stamp duty and the GST metro cap. Listing mode reads the listing.'}, 'state': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 50, 'minLength': 1, 'description': 'Indian state (ISO "MH"/slug/name) for stamp duty. Required in manual mode; ignored in listing mode.'}, 'isUrban': {'type': 'boolean', 'description': 'Urban (default) or rural, where the state prices by location (MH, KA, WB, MP, HR); localBody or a known city decides instead.'}, 'assetType': {'enum': ['home', 'plot'], 'type': 'string', 'description': '"home" (flat/villa/house) or "plot" (bare land); manual mode only. Plot â\x86\x92 shorter tenure, no home-loan tax benefit.'}, 'firstSale': {'type': 'boolean', '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."}, 'jointLoan': {'type': 'boolean', 'description': 'Joint home loan â\x80\x94 doubles 80C/24b caps (equal split).'}, 'listingId': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'AVnester listingId (Coimbatore/Chennai catalog). Listing mode â\x80\x94 propertyValue, state and city are then ignored, with a warning.'}, 'localBody': {'enum': ['municipal_corporation', 'municipal_council', 'gram_panchayat'], 'type': 'string', '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.'}, 'annualRent': {'type': 'integer', 'minimum': 0, 'description': 'Annual rent received (let-out).'}, 'cibilScore': {'type': 'integer', 'maximum': 900, 'minimum': 300, 'description': 'Numeric CIBIL score. Omit â\x86\x92 eligibility stays indicative.'}, 'buyerGender': {'enum': ['male', 'female', 'joint'], 'type': 'string', 'description': '"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': {'type': 'integer', 'maximum': 40, 'minimum': 1, 'description': 'Loan tenure in years. Defaults to 20.'}, 'propertyValue': {'type': 'integer', 'maximum': 1000000000, 'description': 'Property price in INR (manual mode). Pass with state (and city where it matters).', 'exclusiveMinimum': 0}, 'carpetAreaSqft': {'type': 'integer', 'maximum': 100000, 'description': 'Carpet area (sqft) â\x80\x94 sharpens the affordable-housing GST test (with the â\x82¹45L value cap).', 'exclusiveMinimum': 0}, 'employmentType': {'enum': ['salaried', 'self_employed'], 'type': 'string', 'description': 'Employment type (affects tax standard deduction).'}, 'occupancyIntent': {'enum': ['self_occupied', 'let_out'], 'type': 'string', 'description': 'Self-occupied vs let-out â\x80\x94 changes §24(b) interest treatment. Omitted â\x86\x92 self-occupied.'}, 'residencyStatus': {'enum': ['resident', 'nri'], 'type': 'string', 'description': 'Residency status.'}, 'monthlyNetIncome': {'type': 'integer', 'maximum': 100000000, 'description': 'Buyer monthly take-home income in INR.', 'exclusiveMinimum': 0}, 'savingsAvailable': {'type': 'integer', 'maximum': 10000000000, 'minimum': 0, 'description': 'Liquid cash for down payment + charges â\x80\x94 enables the cash-gap calc.'}, 'annualIncomeForTax': {'type': 'integer', 'minimum': 0, 'description': 'Annual income for tax. Defaults to monthlyNetIncome Ã\x97 12.'}, 'existingMonthlyEmis': {'type': 'integer', 'maximum': 100000000, 'minimum': 0, 'description': 'Existing monthly loan EMIs in â\x82¹ (car/personal/cards). Omitted â\x86\x92 assumed â\x82¹0, which can inflate eligibility and flip the verdict â\x80\x94 ask the buyer.'}, 'interestRatePercent': {'type': 'number', 'maximum': 30, 'minimum': 1, 'description': 'Override annual interest rate. Defaults to indicative market rate.'}, 'isUnderConstruction': {'type': 'boolean', 'description': 'Under-construction â\x86\x92 GST applies; ready-to-move â\x86\x92 no GST. Omitted â\x86\x92 ready-to-move (no GST).'}, 'coApplicantMonthlyIncome': {'type': 'integer', 'maximum': 100000000, 'minimum': 0, 'description': 'Co-applicant monthly income (joint affordability).'}}}
出力スキーマ
{'type': 'object', 'required': ['attribution', 'disclaimer', 'cards'], 'properties': {'emi': {'type': 'object', 'required': ['loanAmount', 'interestRatePercent', 'tenureYears', 'monthlyEmi', 'totalInterest', 'totalPayment'], 'properties': {'loanAmount': {'type': 'integer'}, 'monthlyEmi': {'type': 'integer'}, 'tenureYears': {'type': 'integer'}, 'totalPayment': {'type': 'integer'}, 'totalInterest': {'type': 'integer'}, 'interestRatePercent': {'type': 'number'}}, 'additionalProperties': True}, 'tax': {'type': 'object', 'required': ['recommendedRegime', 'homeLoanTaxBenefitOld', 'netEffectiveAnnualBenefit', 'netEffectiveMonthlyEmi', 'notModeled'], 'properties': {'notModeled': {'type': 'array', 'items': {'type': 'string'}}, 'recommendedRegime': {'enum': ['old', 'new'], 'type': 'string'}, 'homeLoanTaxBenefitOld': {'type': 'integer'}, 'netEffectiveMonthlyEmi': {'type': 'integer'}, 'netEffectiveAnnualBenefit': {'type': 'integer'}}, 'additionalProperties': True}, 'mode': {'enum': ['listing', 'manual'], 'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'trust': {'type': 'object', 'required': ['score', 'grade'], 'properties': {'grade': {'type': 'string'}, 'score': {'type': 'integer'}}, 'additionalProperties': True}, 'verdict': {'type': 'object', 'required': ['signal', 'headline', 'blockingLever', 'levers', 'confidence'], 'properties': {'levers': {'type': 'array', 'items': {'type': 'object', 'required': ['lever', 'effect'], 'properties': {'lever': {'type': 'string'}, 'effect': {'type': 'string'}, 'amountInr': {'type': 'integer'}}, 'additionalProperties': True}}, 'signal': {'enum': ['AFFORDABLE', 'STRETCH', 'NOT_YET', 'INELIGIBLE'], 'type': 'string'}, 'headline': {'type': 'string'}, 'confidence': {'enum': ['indicative']}, 'blockingLever': {'type': ['string', 'null']}}, 'additionalProperties': True}, 'notFound': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'assetType': {'enum': ['home', 'plot'], 'type': 'string'}, 'lenderFit': {'type': 'object', 'required': ['lenders', 'eligibleLenders', 'cibilConsidered', 'notAnOffer', 'notALoanApproval', 'summary', 'disclaimer'], 'properties': {'lenders': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'kind', 'indicativeRatePct', 'eligible', 'fitScore', 'fitReason'], 'properties': {'kind': {'enum': ['bank', 'hfc'], 'type': 'string'}, 'name': {'type': 'string'}, 'eligible': {'type': 'boolean'}, 'fitScore': {'type': 'integer'}, 'fitReason': {'type': 'string'}, 'indicativeRatePct': {'type': 'number'}}, 'additionalProperties': True}}, 'summary': {'type': 'string'}, 'disclaimer': {'type': 'string'}, 'notAnOffer': {'enum': [True]}, 'cibilConsidered': {'type': 'boolean'}, 'eligibleLenders': {'type': 'array', 'items': {'type': 'string'}}, 'notALoanApproval': {'enum': [True]}}, 'additionalProperties': True}, 'disclaimer': {'type': 'string'}, 'assumptions': {'type': 'object', 'required': ['rateSource', 'ltvBasis', 'regimeYear', 'annualIncomeEstimated', 'buyerGender', 'cibilProvided', 'savingsProvided', 'existingEmisProvided', 'occupancyIntent', 'occupancyIntentProvided', 'isUnderConstruction', 'underConstructionProvided', 'seniorCitizenNotModeled'], 'properties': {'ltvBasis': {'type': 'string'}, 'rateSource': {'type': 'string'}, 'regimeYear': {'enum': ['FY2026-27']}, 'buyerGender': {'enum': ['male', 'female', 'joint'], 'type': 'string'}, 'cibilProvided': {'type': 'boolean'}, 'occupancyIntent': {'enum': ['self_occupied', 'let_out'], 'type': 'string'}, 'savingsProvided': {'type': 'boolean'}, 'isUnderConstruction': {'type': 'boolean'}, 'existingEmisProvided': {'type': 'boolean'}, 'annualIncomeEstimated': {'type': 'boolean'}, 'occupancyIntentProvided': {'type': 'boolean'}, 'seniorCitizenNotModeled': {'enum': [True]}, 'underConstructionProvided': {'type': 'boolean'}}, 'additionalProperties': True}, 'attribution': {'enum': ['AVnester']}, 'eligibility': {'type': 'object', 'required': ['maxLoanByFoir', 'maxLoanByLtv', 'eligibleLoan', 'bound', 'ltvPct', 'foirAtEligibleLoanPct', 'foirCeilingPct', 'foirComfortPct', 'cibilBand', 'approvalLikelihood', 'notALoanApproval', 'notAnOffer', 'reasoning'], 'properties': {'bound': {'enum': ['foir', 'ltv'], 'type': 'string'}, 'ltvPct': {'type': 'number'}, 'cibilBand': {'type': ['string', 'null']}, 'reasoning': {'type': 'string'}, 'notAnOffer': {'enum': [True]}, 'eligibleLoan': {'type': 'integer'}, 'maxLoanByLtv': {'type': 'integer'}, 'maxLoanByFoir': {'type': 'integer'}, 'foirCeilingPct': {'type': 'number'}, 'foirComfortPct': {'type': 'number'}, 'notALoanApproval': {'enum': [True]}, 'approvalLikelihood': {'enum': ['high', 'medium', 'low', 'indicative'], 'type': 'string'}, 'foirAtEligibleLoanPct': {'type': 'number'}}, 'additionalProperties': True}, 'affordability': {'type': 'object', 'required': ['propertyValue', 'downPayment', 'stampDutyAndRegistration', 'otherCharges', 'otherChargesBreakdown', 'gst', 'totalCashToClose', 'lifetimeCost', 'savingsAvailable', 'downPaymentGap'], 'properties': {'gst': {'type': 'object', 'required': ['ratePct', 'amount', 'applies', 'isAffordable', 'itcAvailableToBuyer', 'basis'], 'properties': {'basis': {'type': 'string'}, 'amount': {'type': 'integer'}, 'applies': {'type': 'boolean'}, 'ratePct': {'type': 'number'}, 'isAffordable': {'type': 'boolean'}, 'itcAvailableToBuyer': {'enum': [False]}}, 'additionalProperties': True}, 'downPayment': {'type': 'integer'}, 'lifetimeCost': {'type': 'integer'}, 'otherCharges': {'type': 'integer'}, 'propertyValue': {'type': 'integer'}, 'downPaymentGap': {'type': ['integer', 'null']}, 'savingsAvailable': {'type': ['integer', 'null']}, 'totalCashToClose': {'type': 'integer'}, 'otherChargesBreakdown': {'type': 'object', 'required': ['loanProcessingFee', 'legalFee', 'gstUnderConstruction'], 'properties': {'legalFee': {'type': 'integer'}, 'loanProcessingFee': {'type': 'integer'}, 'gstUnderConstruction': {'type': 'integer'}}, 'additionalProperties': True}, 'stampDutyAndRegistration': {'type': 'integer'}}, 'additionalProperties': True}, 'stampDutySupported': {'type': 'boolean'}}, 'additionalProperties': True}
get_property_details
Get one AVnester property by ID
Fetch full public details for one AVnester listing by its listingId. Get the listingId from search_properties results first (the `listingId` field) — IDs are not guessable, so this tool is the natural follow-up to a search. AVnester's catalog covers Coimbatore and Chennai; unknown or unpublished IDs return { listing: null, notFound: true } (never throws, to avoid leaking existence). Use when the user references a specific listing. Read-only, no side effects.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['listingId'], 'properties': {'listingId': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'AVnester listingId, as returned in search_properties results (the `listingId` field). IDs are not guessable â\x80\x94 call search_properties first. Also the trailing segment of a listing sourceUrl.'}}}
出力スキーマ
{'type': 'object', 'required': ['listing', 'notFound', 'attribution', 'disclaimer', 'cards'], 'properties': {'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'trust': {'type': 'object', 'required': ['score', 'grade'], 'properties': {'grade': {'type': 'string'}, 'score': {'type': 'integer'}}, 'additionalProperties': True}, 'listing': {'type': ['object', 'null'], 'required': ['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'], 'properties': {'bhk': {'type': ['integer', 'null']}, 'city': {'type': 'string'}, 'price': {'type': 'integer'}, 'title': {'type': 'string'}, 'reraId': {'type': ['string', 'null']}, 'summary': {'type': 'string'}, 'featured': {'type': 'boolean'}, 'locality': {'type': 'string'}, 'verified': {'type': 'boolean'}, 'bathrooms': {'type': ['integer', 'null']}, 'listingId': {'type': 'string'}, 'priceUnit': {'enum': ['INR']}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'ageInYears': {'type': ['integer', 'null']}, 'validUntil': {'type': ['string', 'null']}, 'verifiedAt': {'type': ['string', 'null']}, 'attribution': {'enum': ['AVnester']}, 'floorNumber': {'type': ['integer', 'null']}, 'leaseAmount': {'type': ['number', 'null']}, 'listingType': {'enum': ['sale', 'rent'], 'type': 'string'}, 'plotDetails': {'type': ['object', 'null'], 'required': ['dtcpApproved', 'dtcpNumber', 'landClassification', 'facing', 'roadWidthFt', 'gatedCommunity', 'waterAvailability', 'electricity', 'ownershipType', 'plotNumber', 'pincode', 'pattaChittaStatus', 'encumbranceStatus', 'guidelineValueInr', 'plotLengthFt', 'plotBreadthFt'], 'properties': {'facing': {'type': ['string', 'null']}, 'pincode': {'type': ['string', 'null']}, 'dtcpNumber': {'type': ['string', 'null']}, 'plotNumber': {'type': ['string', 'null']}, 'electricity': {'type': ['string', 'null']}, 'roadWidthFt': {'type': ['number', 'null']}, 'dtcpApproved': {'type': ['boolean', 'null']}, 'plotLengthFt': {'type': ['number', 'null']}, 'ownershipType': {'type': ['string', 'null']}, 'plotBreadthFt': {'type': ['number', 'null']}, 'gatedCommunity': {'type': ['boolean', 'null']}, 'encumbranceStatus': {'type': ['string', 'null']}, 'guidelineValueInr': {'type': ['integer', 'null']}, 'pattaChittaStatus': {'type': ['string', 'null']}, 'waterAvailability': {'type': ['string', 'null']}, 'landClassification': {'type': ['string', 'null']}}, 'additionalProperties': True}, 'totalFloors': {'type': ['integer', 'null']}, 'parkingCount': {'type': ['integer', 'null']}, 'pricePerSqft': {'type': ['integer', 'null']}, 'verification': {'type': 'object', 'required': ['documentVerified', 'tier', 'locationVerified', 'locationConfidence', 'lastVerifiedAt', 'method'], 'properties': {'tier': {'type': ['string', 'null']}, 'method': {'type': ['string', 'null']}, 'lastVerifiedAt': {'type': ['string', 'null']}, 'documentVerified': {'type': 'boolean'}, 'locationVerified': {'type': 'boolean'}, 'locationConfidence': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'availableFrom': {'type': ['string', 'null']}, 'carpetAreaSqft': {'type': ['number', 'null']}, 'leaseRefundable': {'type': ['boolean', 'null']}, 'rentalStructure': {'enum': ['monthly', 'lease'], 'type': ['string', 'null']}, 'furnishingStatus': {'enum': ['furnished', 'semi-furnished', 'unfurnished'], 'type': ['string', 'null']}, 'imageThumbnailUrl': {'type': ['string', 'null'], 'format': 'uri'}, 'leaseTenureMonths': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'message': {'type': 'string'}, 'notFound': {'type': 'boolean'}, 'disclaimer': {'type': 'string'}, 'handoffUrl': {'type': 'string', 'format': 'uri'}, 'attribution': {'enum': ['AVnester']}}, 'additionalProperties': True}
optimize_home_loan_tax_regime
Optimize home-loan tax regime (calculator)
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['annualIncome', 'homeLoanInterest', 'homeLoanPrincipal'], 'properties': {'ageBand': {'enum': ['below60', 'senior', 'super_senior'], 'type': 'string', 'description': 'Taxpayer age band â\x80\x94 raises the OLD-regime basic exemption (senior 60â\x80\x9380 â\x86\x92 â\x82¹3L, super-senior 80+ â\x86\x92 â\x82¹5L). New regime unaffected. Defaults to below60.'}, 'other80C': {'type': 'integer', 'minimum': 0, 'description': 'Other 80C investments in INR (PF, ELSS, insurance, etc.).'}, 'jointLoan': {'type': 'boolean', 'default': False, 'description': 'Joint loan with a co-borrower â\x80\x94 doubles the 80C/24b caps (equal-split assumption).'}, 'saleValue': {'type': 'integer', 'minimum': 0, 'description': 'NRI only â\x80\x94 sale consideration in INR for §195 TDS computation.'}, 'annualRent': {'type': 'integer', 'minimum': 0, 'description': 'Annual rent received in INR â\x80\x94 required for let_out.'}, 'isSalaried': {'type': 'boolean', 'default': True, 'description': 'Whether the taxpayer is salaried (gets the standard deduction).'}, 'hasForm15CB': {'type': 'boolean', 'description': 'NRI only â\x80\x94 whether Form 15CB CA-attestation is already in hand.'}, 'indexedCost': {'type': 'integer', 'minimum': 0, 'description': 'NRI only â\x80\x94 indexed cost of acquisition (LTCG). When omitted, TDS computed on full sale value.'}, 'annualIncome': {'type': 'integer', 'description': 'Annual gross income in INR EXCLUDING house property (salary + other income).', 'exclusiveMinimum': 0}, 'propertyType': {'enum': ['self_occupied', 'let_out'], 'type': 'string', 'default': 'self_occupied', 'description': 'Whether the property is self-occupied or let out.'}, 'holdingMonths': {'type': 'integer', 'minimum': 0, 'description': 'NRI only â\x80\x94 holding period in months. â\x89¤24 is STCG; >24 is LTCG.'}, 'nroBalanceUsd': {'type': 'number', 'minimum': 0, 'description': 'NRI only â\x80\x94 NRO account balance in USD equivalent for the repatriation cap math.'}, 'ytdRemittedUsd': {'type': 'number', 'minimum': 0, 'description': 'NRI only â\x80\x94 FY-to-date USD already remitted under the $1M cap.'}, 'residencyStatus': {'enum': ['resident', 'nri'], 'type': 'string', 'description': 'Default resident. Pass nri to get §195 TDS + LRS-cap math in the response.'}, 'homeLoanInterest': {'type': 'integer', 'minimum': 0, 'description': 'Annual home-loan interest paid (INR).'}, 'homeLoanPrincipal': {'type': 'integer', 'minimum': 0, 'description': 'Annual home-loan principal repaid (INR) â\x80\x94 counts toward 80C.'}, 'countryOfResidence': {'type': 'string', 'maxLength': 50, 'description': 'NRI only â\x80\x94 DTAA article lookup hint. Free-form country name.'}, 'otherOldRegimeDeductions': {'type': 'integer', 'minimum': 0, 'description': 'Other OLD-regime-only deductions as a lump (HRA exemption, 80D, NPS 80CCD(1B), etc.).'}}}
出力スキーマ
{'type': 'object', 'required': ['annualIncome', 'propertyType', 'jointLoan', 'old', 'new', 'recommended', 'annualSaving', 'homeLoanTaxBenefitOld', 'notModeled', 'assumptions', 'attribution', 'disclaimer', 'cards'], 'properties': {'new': {'type': 'object', 'required': ['taxableIncome', 'totalTax', 'deductionsApplied'], 'properties': {'totalTax': {'type': 'integer'}, 'taxableIncome': {'type': 'integer'}, 'deductionsApplied': {'type': 'integer'}}, 'additionalProperties': True}, 'nri': {'type': 'object', 'required': ['countryOfResidence', 'dtaaNote'], 'properties': {'tds': {'type': 'object', 'required': ['section195Rate', 'tdsAmount', 'ltcgTax', 'stcgTax', 'form13EligibilityHint', 'notModeled', 'disclaimer'], 'properties': {'ltcgTax': {'type': 'number'}, 'stcgTax': {'type': 'number'}, 'tdsAmount': {'type': 'number'}, 'disclaimer': {'type': 'string'}, 'notModeled': {'type': 'array', 'items': {'type': 'string'}}, 'section195Rate': {'type': 'number'}, 'form13EligibilityHint': {'type': 'boolean'}}, 'additionalProperties': True}, 'dtaaNote': {'type': 'string'}, 'repatriation': {'type': 'object', 'required': ['availableUsd', 'capUsd', 'requiresCA', 'notModeled', 'disclaimer'], 'properties': {'capUsd': {'type': 'number'}, 'disclaimer': {'type': 'string'}, 'notModeled': {'type': 'array', 'items': {'type': 'string'}}, 'requiresCA': {'type': 'boolean'}, 'availableUsd': {'type': 'number'}}, 'additionalProperties': True}, 'countryOfResidence': {'type': 'string'}}, 'additionalProperties': True}, 'old': {'type': 'object', 'required': ['taxableIncome', 'totalTax', 'deductionsApplied'], 'properties': {'totalTax': {'type': 'integer'}, 'taxableIncome': {'type': 'integer'}, 'deductionsApplied': {'type': 'integer'}}, 'additionalProperties': True}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'jointLoan': {'type': 'boolean'}, 'disclaimer': {'type': 'string'}, 'notModeled': {'type': 'array', 'items': {'type': 'string'}}, 'assumptions': {'type': 'object', 'required': ['regimeYear', 'surchargeNotModeled', 'section80EEAExcluded', 'notTaxAdvice'], 'properties': {'regimeYear': {'enum': ['FY2026-27']}, 'notTaxAdvice': {'enum': [True]}, 'surchargeNotModeled': {'enum': [True]}, 'section80EEAExcluded': {'enum': [True]}}, 'additionalProperties': True}, 'attribution': {'enum': ['AVnester']}, 'recommended': {'enum': ['old', 'new'], 'type': 'string'}, 'annualIncome': {'type': 'integer'}, 'annualSaving': {'type': 'integer'}, 'propertyType': {'enum': ['self_occupied', 'let_out'], 'type': 'string'}, 'residencyStatus': {'enum': ['nri']}, 'homeLoanTaxBenefitOld': {'type': 'integer'}}, 'additionalProperties': True}
search_properties
Search India property listings
Search residential property listings in Coimbatore and Chennai, Tamil Nadu. Use when the user names a locality, price band, BHK, or transaction type in either city. Returns sanitized listing cards with handoff URLs and a per-listing verified flag; never returns seller contact details. Out-of-scope cities return supported=false + supportedCities + scopeMessage — surface the scopeMessage to the user.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'city': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 60, 'minLength': 1, 'description': 'Indian city name (e.g., "Bangalore", "Coimbatore"). Required for results.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Maximum number of listings to return (cap: 20). v1 abuse defense.'}, 'bedrooms': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Number of bedrooms (BHK).'}, 'locality': {'type': 'string', 'pattern': "^[A-Za-z0-9 .,'â\x80\x99()\\-à®\x80-௿à¤\x80-ॿ]+$", 'maxLength': 80, 'minLength': 1, 'description': 'Locality/neighborhood within the city (e.g., "Indiranagar").'}, 'maxPrice': {'type': 'integer', 'minimum': 0, 'description': 'Maximum price in INR.'}, 'minPrice': {'type': 'integer', 'minimum': 0, 'description': 'Minimum price in INR.'}, 'furnishing': {'enum': ['furnished', 'semi-furnished', 'unfurnished'], 'type': 'string', 'description': 'Furnishing status (rental queries).'}, 'propertyType': {'enum': ['apartment', 'villa', 'plot', 'independent_house'], 'type': 'string', 'description': 'Property type.'}, 'rentalStructure': {'enum': ['monthly', 'lease'], 'type': 'string', '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.'}, 'transactionType': {'enum': ['sale', 'rent'], 'type': 'string', 'description': 'Whether to search for sale or rent. Omit to include both.'}}}
出力スキーマ
{'type': 'object', 'required': ['total', 'listings', 'supported', 'attribution', 'handoffUrl', 'disclaimer'], 'properties': {'total': {'type': 'integer'}, 'sortBy': {'type': 'string'}, 'message': {'type': 'string'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['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'], 'properties': {'bhk': {'type': ['integer', 'null']}, 'city': {'type': 'string'}, 'rank': {'type': 'integer'}, 'price': {'type': 'integer'}, 'title': {'type': 'string'}, 'reraId': {'type': ['string', 'null']}, 'summary': {'type': 'string'}, 'areaRank': {'type': 'integer'}, 'featured': {'type': 'boolean'}, 'locality': {'type': 'string'}, 'verified': {'type': 'boolean'}, 'bathrooms': {'type': ['integer', 'null']}, 'listingId': {'type': 'string'}, 'priceRank': {'type': 'integer'}, 'priceUnit': {'enum': ['INR']}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'valueRank': {'type': 'integer'}, 'ageInYears': {'type': ['integer', 'null']}, 'validUntil': {'type': ['string', 'null']}, 'verifiedAt': {'type': ['string', 'null']}, 'attribution': {'enum': ['AVnester']}, 'floorNumber': {'type': ['integer', 'null']}, 'leaseAmount': {'type': ['number', 'null']}, 'listingType': {'enum': ['sale', 'rent'], 'type': 'string'}, 'plotDetails': {'type': ['object', 'null'], 'required': ['dtcpApproved', 'dtcpNumber', 'landClassification', 'facing', 'roadWidthFt', 'gatedCommunity', 'waterAvailability', 'electricity', 'ownershipType', 'plotNumber', 'pincode', 'pattaChittaStatus', 'encumbranceStatus', 'guidelineValueInr', 'plotLengthFt', 'plotBreadthFt'], 'properties': {'facing': {'type': ['string', 'null']}, 'pincode': {'type': ['string', 'null']}, 'dtcpNumber': {'type': ['string', 'null']}, 'plotNumber': {'type': ['string', 'null']}, 'electricity': {'type': ['string', 'null']}, 'roadWidthFt': {'type': ['number', 'null']}, 'dtcpApproved': {'type': ['boolean', 'null']}, 'plotLengthFt': {'type': ['number', 'null']}, 'ownershipType': {'type': ['string', 'null']}, 'plotBreadthFt': {'type': ['number', 'null']}, 'gatedCommunity': {'type': ['boolean', 'null']}, 'encumbranceStatus': {'type': ['string', 'null']}, 'guidelineValueInr': {'type': ['integer', 'null']}, 'pattaChittaStatus': {'type': ['string', 'null']}, 'waterAvailability': {'type': ['string', 'null']}, 'landClassification': {'type': ['string', 'null']}}, 'additionalProperties': True}, 'totalFloors': {'type': ['integer', 'null']}, 'parkingCount': {'type': ['integer', 'null']}, 'pricePerSqft': {'type': ['integer', 'null']}, 'verification': {'type': 'object', 'required': ['documentVerified', 'tier', 'locationVerified', 'locationConfidence', 'lastVerifiedAt', 'method'], 'properties': {'tier': {'type': ['string', 'null']}, 'method': {'type': ['string', 'null']}, 'lastVerifiedAt': {'type': ['string', 'null']}, 'documentVerified': {'type': 'boolean'}, 'locationVerified': {'type': 'boolean'}, 'locationConfidence': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'availableFrom': {'type': ['string', 'null']}, 'carpetAreaSqft': {'type': ['number', 'null']}, 'leaseRefundable': {'type': ['boolean', 'null']}, 'rentalStructure': {'enum': ['monthly', 'lease'], 'type': ['string', 'null']}, 'furnishingStatus': {'enum': ['furnished', 'semi-furnished', 'unfurnished'], 'type': ['string', 'null']}, 'imageThumbnailUrl': {'type': ['string', 'null'], 'format': 'uri'}, 'leaseTenureMonths': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'supported': {'type': 'boolean'}, 'disclaimer': {'type': 'string'}, 'handoffUrl': {'type': 'string', 'format': 'uri'}, 'attribution': {'enum': ['AVnester']}, 'scopeMessage': {'type': 'string'}, 'supportedCities': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
simulate_loan_prepayment
Simulate home-loan prepayment (calculator)
Simulate prepaying / repaying an Indian home loan early. Pure 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 (recurring_monthly). Compares reduce_tenure (keep EMI, finish early) vs reduce_emi (keep tenure, lower EMI). Always surface the disclaimer field.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['outstandingPrincipal', 'remainingTenureYears'], 'properties': {'strategy': {'enum': ['reduce_tenure', 'reduce_emi', 'compare_both'], 'type': 'string', 'default': 'compare_both', 'description': 'reduce_tenure keeps the EMI and finishes early (bigger saving); reduce_emi keeps the tenure and lowers the EMI; compare_both returns both.'}, 'prepaymentMode': {'enum': ['one_time', 'recurring_annual', 'recurring_monthly', 'one_time_plus_recurring', 'one_time_plus_recurring_monthly'], 'type': 'string', 'default': 'one_time', 'description': 'How the prepayment is made (annual anniversary vs every month).'}, 'prepaymentAmount': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'One-time lump-sum prepayment in INR (one_time / one_time_plus_recurring* modes).'}, 'annualRatePercent': {'type': 'number', 'maximum': 30, 'minimum': 1, 'description': 'Current annual interest rate (percent). Defaults to the indicative market rate when omitted.'}, 'outstandingPrincipal': {'type': 'integer', 'description': 'Current outstanding home-loan principal in INR.', 'exclusiveMinimum': 0}, 'remainingTenureYears': {'type': 'integer', 'maximum': 40, 'minimum': 1, 'description': 'Years left on the loan at the current EMI.'}, 'recurringAnnualAmount': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Recurring yearly prepayment in INR (recurring_annual / one_time_plus_recurring modes).'}, 'recurringMonthlyAmount': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Fixed extra paid toward principal EVERY month on top of the EMI (recurring_monthly / one_time_plus_recurring_monthly modes).'}}}
出力スキーマ
{'type': 'object', 'required': ['outstandingPrincipal', 'annualRatePercent', 'remainingTenureYears', 'prepaymentMode', 'strategy', 'applied', 'baseline', 'assumptions', 'attribution', 'disclaimer', 'cards'], 'properties': {'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['template', 'data', 'priority'], 'properties': {'data': {'type': 'object', 'additionalProperties': {}}, 'priority': {'type': 'integer'}, 'template': {'type': 'string'}}, 'additionalProperties': True}}, 'applied': {'type': 'object', 'required': ['oneTime', 'recurringAnnual', 'recurringMonthly'], 'properties': {'oneTime': {'type': 'integer'}, 'recurringAnnual': {'type': 'integer'}, 'recurringMonthly': {'type': 'integer'}}, 'additionalProperties': True}, 'baseline': {'type': 'object', 'required': ['emi', 'payoffMonths', 'totalInterest'], 'properties': {'emi': {'type': 'integer'}, 'payoffMonths': {'type': 'integer'}, 'totalInterest': {'type': 'integer'}}, 'additionalProperties': True}, 'strategy': {'enum': ['reduce_tenure', 'reduce_emi', 'compare_both'], 'type': 'string'}, 'reduceEmi': {'type': 'object', 'required': ['emi', 'payoffMonths', 'totalInterest', 'interestSaved', 'monthsSaved'], 'properties': {'emi': {'type': 'integer'}, 'monthsSaved': {'type': 'integer'}, 'payoffMonths': {'type': 'integer'}, 'interestSaved': {'type': 'integer'}, 'totalInterest': {'type': 'integer'}}, 'additionalProperties': True}, 'disclaimer': {'type': 'string'}, 'assumptions': {'type': 'object', 'required': ['interestType', 'oneTimeAppliedImmediately', 'recurringAppliedAnnually', 'recurringMonthlyAppliedEachMonth', 'floatingRatePrepaymentPenaltyWaived', 'notALoanApproval'], 'properties': {'interestType': {'enum': ['reducing-balance']}, 'notALoanApproval': {'enum': [True]}, 'recurringAppliedAnnually': {'enum': [True]}, 'oneTimeAppliedImmediately': {'enum': [True]}, 'recurringMonthlyAppliedEachMonth': {'enum': [True]}, 'floatingRatePrepaymentPenaltyWaived': {'enum': [True]}}, 'additionalProperties': True}, 'attribution': {'enum': ['AVnester']}, 'reduceTenure': {'type': 'object', 'required': ['emi', 'payoffMonths', 'totalInterest', 'interestSaved', 'monthsSaved'], 'properties': {'emi': {'type': 'integer'}, 'monthsSaved': {'type': 'integer'}, 'payoffMonths': {'type': 'integer'}, 'interestSaved': {'type': 'integer'}, 'totalInterest': {'type': 'integer'}}, 'additionalProperties': True}, 'prepaymentMode': {'enum': ['one_time', 'recurring_annual', 'recurring_monthly', 'one_time_plus_recurring', 'one_time_plus_recurring_monthly'], 'type': 'string'}, 'annualRatePercent': {'type': 'number'}, 'outstandingPrincipal': {'type': 'integer'}, 'remainingTenureYears': {'type': 'integer'}}, 'additionalProperties': True}
変更
estimate_stamp_duty_and_registration
2026年9月27日2:52
変更
get_property_decision_intelligence
2026年9月25日3:01
変更
estimate_stamp_duty_and_registration
2026年9月25日3:01
変更
compare_localities
2026年9月25日3:01
変更
get_locality_insights
2026年9月25日3:01
変更
get_locality_insights
2026年9月21日2:59
追加
get_property_decision_intelligence
2026年9月17日12:33
追加
compare_properties
2026年9月17日12:33
追加
get_property_details
2026年9月17日12:33
追加
estimate_stamp_duty_and_registration
2026年9月17日12:33
追加
optimize_home_loan_tax_regime
2026年9月17日12:33
追加
compare_balance_transfer
2026年9月17日12:33
追加
simulate_loan_prepayment
2026年9月17日12:33
追加
calculate_home_affordability
2026年9月17日12:33
追加
compare_localities
2026年9月17日12:33
追加
get_locality_insights
2026年9月17日12:33
追加
search_properties
2026年9月17日12:33

Superlógica Condomínios

io.github.mcp-dir/superlogica-mcp

Connects to a condominium ERP for billing, collections, agreements, expenses, bank movements, statements, files, communications, …

DFX Real Estate Intelligence

io.github.Capital-W-Holdings/us-property-parcel-real-estate-debt

Provides US commercial real estate, parcel, debt maturity, bank CRE exposure, private capital, investor, ownership, occupancy, an…

RateAPI — live US mortgage, auto, HELOC, personal & deposit rates

dev.rateapi/mcp

Supplies live US lending and deposit rates, financing comparisons, affordability and amortization calculations, eligibility check…

Rafid Intelligence Network

io.github.iabdullahm/rafid-agent-api

Analyzes Oman properties using rental comparables, yields, costs, and payback metrics, and supports Oman company search, profilin…

Housing Intel

io.github.pipeworx-io/housing-intel

Analyzes housing markets, affordability, mortgage rates, rental yields, property data, employment, metro demand, and investment s…

OpenLMNP

io.github.manganate006/openlmnp

Manages French LMNP furnished-rental accounting, including income, expenses, depreciation, loans, VAT, fiscal calculations, FEC f…

Antevo Wealth

ch.antevo/wealth

Aggregates household wealth data across investments, liabilities, credit facilities, real assets, markets, risk, exposure, and fi…

DataPorium

tech.dataporium/mcp

Provides market and company data covering stocks, ETFs, crypto, forex, commodities, economic indicators, housing, property listin…