이 MCP로 할 수 있는 일
Searches and compares Portuguese property listings and estimates residential purchase costs, mortgages, taxes, and affordability.
도구
입력 스키마
{'type': 'object', '$defs': {'Room': {'enum': ['T0', 'T1', 'T2', 'T3', 'T4', 'T5+'], 'type': 'string'}, 'LocationId': {'type': 'integer', 'minimum': 1}, 'SearchSort': {'enum': ['newest', 'highest_price', 'lowest_price'], 'type': 'string', 'title': 'SearchSort'}, 'PropertyCategory': {'enum': ['apartment', 'house', 'plot'], 'type': 'string', 'title': 'PropertyCategory'}}, 'title': 'AgentSearchLinkRequest', 'required': ['location_id'], 'properties': {'rooms': {'type': 'array', 'items': {'$ref': '#/$defs/Room'}, 'title': 'Rooms', 'maxItems': 6, 'description': 'Portuguese bedroom typologies. T2 means two bedrooms and T5+ matches Casatoo listings with five or more bedrooms. An empty list means any room count.'}, 'sort_by': {'$ref': '#/$defs/SearchSort', 'default': 'newest', 'description': 'Search-link ordering; defaults explicitly to newest.'}, 'price_max': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'title': 'Price Max', 'default': None}, 'price_min': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'title': 'Price Min', 'default': None}, 'location_id': {'$ref': '#/$defs/LocationId', 'description': 'Exact Casatoo location ID returned by casatoo_search_locations. Free-text locations are not accepted.'}, 'gross_area_max': {'anyOf': [{'type': 'integer', 'minimum': 0}, {'type': 'null'}], 'title': 'Gross Area Max', 'default': None}, 'gross_area_min': {'anyOf': [{'type': 'integer', 'minimum': 0}, {'type': 'null'}], 'title': 'Gross Area Min', 'default': None}, 'property_category': {'anyOf': [{'$ref': '#/$defs/PropertyCategory'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'LocationId': {'type': 'integer', 'minimum': 1}, 'AgentLocationType': {'enum': ['DISTRICT', 'MUNICIPALITY', 'PARISH', 'NEIGHBORHOOD'], 'type': 'string', 'title': 'AgentLocationType'}, 'LocationSearchResult': {'type': 'object', 'title': 'LocationSearchResult', 'required': ['id', 'name', 'slug', 'location_type', 'district'], 'properties': {'id': {'$ref': '#/$defs/LocationId', 'description': 'Exact location ID to pass unchanged to listing search and search-link tools.'}, 'name': {'type': 'string', 'title': 'Name'}, 'slug': {'type': 'string', 'title': 'Slug'}, 'district': {'type': 'string', 'title': 'District'}, 'parent_id': {'anyOf': [{'$ref': '#/$defs/LocationId'}, {'type': 'null'}], 'default': None}, 'total_homes': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Total Homes', 'default': None}, 'municipality': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Municipality', 'default': None}, 'location_type': {'$ref': '#/$defs/AgentLocationType', 'description': 'Administrative level: DISTRICT, MUNICIPALITY, PARISH, or NEIGHBORHOOD.'}}}}, 'title': 'AgentSearchLinkResponse', 'required': ['url', 'location'], 'properties': {'url': {'type': 'string', 'title': 'Url'}, 'location': {'$ref': '#/$defs/LocationSearchResult'}}}
입력 스키마
{'type': 'object', 'title': 'ListingComparisonRequest', 'required': ['listing_ids'], 'properties': {'listing_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Listing Ids', 'maxItems': 6, 'minItems': 2}}}
출력 스키마
{'type': 'object', '$defs': {'LocationId': {'type': 'integer', 'minimum': 1}, 'ListingCard': {'type': 'object', 'title': 'ListingCard', 'required': ['id', 'title', 'price', 'n_rooms', 'gross_area', 'property_type', 'locations', 'url', 'canonical_url', 'source', 'source_id', 'published_at', 'freshness_at'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'price': {'type': 'number', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'source': {'$ref': '#/$defs/ListingSource'}, 'n_rooms': {'type': 'integer', 'title': 'N Rooms', 'description': 'Bedroom count normalized by Casatoo from the Portuguese T typology.'}, 'currency': {'type': 'string', 'const': 'EUR', 'title': 'Currency', 'default': 'EUR'}, 'area_unit': {'type': 'string', 'const': 'm²', 'title': 'Area Unit', 'default': 'm²'}, 'locations': {'type': 'array', 'items': {'$ref': '#/$defs/ListingCardLocation'}, 'title': 'Locations'}, 'source_id': {'type': 'string', 'title': 'Source Id'}, 'gross_area': {'type': 'integer', 'title': 'Gross Area', 'description': 'Supplier-reported gross floor area in square metres.'}, 'freshness_at': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Freshness At', 'description': 'Most recent time Casatoo observed the listing active; this is crawl freshness, not necessarily a supplier-side content change.'}, 'published_at': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Published At', 'description': 'Publication timestamp reported or derived from the supplier; null when unknown.'}, 'canonical_url': {'type': 'string', 'title': 'Canonical Url'}, 'content_trust': {'type': 'string', 'const': 'supplier_untrusted', 'title': 'Content Trust', 'default': 'supplier_untrusted'}, 'property_type': {'$ref': '#/$defs/PropertyType'}}}, 'PropertyType': {'enum': ['apartment', 'loft', 'duplex', 'house_semi_detached', 'house_detached', 'townhouse', 'mansion', 'rustic_house', 'manor_house', 'building', 'plot', 'commercial', 'industrial', 'storage', 'hotel', 'warehouse', 'room', 'garage', 'other', 'country_estate'], 'type': 'string', 'title': 'PropertyType'}, 'ListingSource': {'enum': ['idealista', 'imovirtual', 'engelvoelkers', 'kwportugal', 'remax', 'era', 'ego', 'casayes'], 'type': 'string', 'title': 'ListingSource'}, 'AgentLocationType': {'enum': ['DISTRICT', 'MUNICIPALITY', 'PARISH', 'NEIGHBORHOOD'], 'type': 'string', 'title': 'AgentLocationType'}, 'ListingCardLocation': {'type': 'object', 'title': 'ListingCardLocation', 'required': ['id', 'name', 'slug', 'location_type'], 'properties': {'id': {'$ref': '#/$defs/LocationId'}, 'name': {'type': 'string', 'title': 'Name'}, 'slug': {'type': 'string', 'title': 'Slug'}, 'location_type': {'$ref': '#/$defs/AgentLocationType'}}}}, 'title': 'ListingCardComparison', 'required': ['listings'], 'properties': {'listings': {'type': 'array', 'items': {'$ref': '#/$defs/ListingCard'}, 'title': 'Listings'}}}
입력 스키마
{'type': 'object', 'title': 'ListingIdRequest', 'required': ['listing_id'], 'properties': {'listing_id': {'type': 'string', 'title': 'Listing Id'}}}
출력 스키마
{'type': 'object', '$defs': {'ImageInfo': {'type': 'object', 'title': 'ImageInfo', 'required': ['url', 'title'], 'properties': {'url': {'type': 'string', 'title': 'Url'}, 'title': {'type': 'string', 'title': 'Title'}}}, 'PlotZoning': {'enum': ['urban', 'urbanizable', 'non_urbanizable', 'rustic', 'mixed', 'industrial', 'commercial', 'for_construction'], 'type': 'string', 'title': 'PlotZoning'}, 'PropertyType': {'enum': ['apartment', 'loft', 'duplex', 'house_semi_detached', 'house_detached', 'townhouse', 'mansion', 'rustic_house', 'manor_house', 'building', 'plot', 'commercial', 'industrial', 'storage', 'hotel', 'warehouse', 'room', 'garage', 'other', 'country_estate'], 'type': 'string', 'title': 'PropertyType'}, 'ListingSource': {'enum': ['idealista', 'imovirtual', 'engelvoelkers', 'kwportugal', 'remax', 'era', 'ego', 'casayes'], 'type': 'string', 'title': 'ListingSource'}, 'ListingStatus': {'enum': ['available', 'offline'], 'type': 'string', 'title': 'ListingStatus'}}, 'title': 'Listing', 'required': ['id', 'title', 'description', 'price', 'n_rooms', 'gross_area', 'images', 'lat', 'lon', 'property_type', 'publish_date', 'url', 'source', 'external_id', 'status', 'is_out_of_market'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'lat': {'type': 'number', 'title': 'Lat'}, 'lon': {'type': 'number', 'title': 'Lon'}, 'url': {'type': 'string', 'title': 'Url'}, 'floor': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Floor', 'default': None}, 'price': {'type': 'number', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'images': {'type': 'array', 'items': {'$ref': '#/$defs/ImageInfo'}, 'title': 'Images'}, 'source': {'$ref': '#/$defs/ListingSource'}, 'status': {'$ref': '#/$defs/ListingStatus'}, 'n_rooms': {'type': 'integer', 'title': 'N Rooms'}, 'currency': {'type': 'string', 'const': 'EUR', 'title': 'Currency', 'default': 'EUR'}, 'area_unit': {'type': 'string', 'const': 'm²', 'title': 'Area Unit', 'default': 'm²'}, 'condition': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Condition', 'default': None}, 'plot_area': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Plot Area', 'default': None}, 'gross_area': {'type': 'integer', 'title': 'Gross Area'}, 'agency_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Agency Name', 'default': None}, 'description': {'type': 'string', 'title': 'Description'}, 'external_id': {'type': 'string', 'title': 'External Id'}, 'has_parking': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Has Parking', 'default': None}, 'plot_zoning': {'anyOf': [{'$ref': '#/$defs/PlotZoning'}, {'type': 'null'}], 'default': None}, 'has_elevator': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Has Elevator', 'default': None}, 'last_seen_at': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Last Seen At', 'default': None}, 'publish_date': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Publish Date'}, 'canonical_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Canonical Url', 'default': None}, 'content_trust': {'type': 'string', 'const': 'supplier_untrusted', 'title': 'Content Trust', 'default': 'supplier_untrusted'}, 'property_type': {'$ref': '#/$defs/PropertyType'}, 'predicted_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Predicted Price', 'default': None}, 'is_out_of_market': {'type': 'boolean', 'title': 'Is Out Of Market'}, 'construction_year': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Construction Year', 'default': None}, 'external_agency_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'External Agency Url', 'default': None}, 'has_approved_project': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Has Approved Project', 'default': None}, 'external_reference_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'External Reference Id', 'default': None}}}
입력 스키마
{'type': 'object', '$defs': {'Room': {'enum': ['T0', 'T1', 'T2', 'T3', 'T4', 'T5+'], 'type': 'string'}, 'Coordinate': {'type': 'array', 'maxItems': 2, 'minItems': 2, 'prefixItems': [{'$ref': '#/$defs/CoordinateNumber'}, {'$ref': '#/$defs/CoordinateNumber'}]}, 'LinearRing': {'type': 'array', 'items': {'$ref': '#/$defs/Coordinate'}}, 'LocationId': {'type': 'integer', 'minimum': 1}, 'SearchSort': {'enum': ['newest', 'highest_price', 'lowest_price'], 'type': 'string', 'title': 'SearchSort'}, 'MarketStatus': {'enum': ['active_only', 'include_out_of_market', 'out_of_market_only'], 'type': 'string', 'title': 'MarketStatus'}, 'CoordinateNumber': {'type': 'number'}, 'PropertyCategory': {'enum': ['apartment', 'house', 'plot'], 'type': 'string', 'title': 'PropertyCategory'}, 'MapSearchGeometry': {'type': 'object', 'title': 'MapSearchGeometry', 'required': ['type', 'coordinates'], 'properties': {'type': {'enum': ['Polygon', 'MultiPolygon'], 'type': 'string', 'title': 'Type'}, 'coordinates': {'$ref': '#/$defs/SearchCoordinates'}}, 'additionalProperties': False}, 'SearchCoordinates': {'anyOf': [{'$ref': '#/$defs/PolygonCoordinates'}, {'$ref': '#/$defs/MultiPolygonCoordinates'}]}, 'PlotZoningCategory': {'enum': ['urban', 'urbanizable', 'rustic'], 'type': 'string', 'title': 'PlotZoningCategory'}, 'PolygonCoordinates': {'type': 'array', 'items': {'$ref': '#/$defs/LinearRing'}}, 'MultiPolygonCoordinates': {'type': 'array', 'items': {'$ref': '#/$defs/PolygonCoordinates'}}}, 'title': 'ListingSearchRequest', 'required': ['location_ids', 'rooms'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 10, 'maximum': 50, 'minimum': 1}, 'rooms': {'type': 'array', 'items': {'$ref': '#/$defs/Room'}, 'title': 'Rooms', 'maxItems': 6, 'description': 'Portuguese bedroom typologies: T0 is a studio, T1 means one bedroom, T2 means two bedrooms, T3 means three, T4 means four, and T5+ means at least five. An empty list means any room count.'}, 'cursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Cursor', 'default': None}, 'sort_by': {'$ref': '#/$defs/SearchSort', 'default': 'newest', 'description': 'Result ordering; newest is the default.'}, 'geometry': {'anyOf': [{'$ref': '#/$defs/MapSearchGeometry'}, {'type': 'null'}], 'default': None}, 'price_max': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'string', 'const': 'Inf'}], 'title': 'Price Max', 'default': 'Inf'}, 'price_min': {'type': 'number', 'title': 'Price Min', 'default': 0, 'minimum': 0}, 'location_ids': {'type': 'array', 'items': {'$ref': '#/$defs/LocationId'}, 'title': 'Location Ids', 'maxItems': 25, 'minItems': 1, 'description': 'Exact Casatoo location IDs returned by casatoo_search_locations. Resolve location text first and never invent IDs.'}, 'market_status': {'$ref': '#/$defs/MarketStatus', 'default': 'active_only', 'description': 'Listing availability boundary. Public search links always use active_only.'}, 'plot_area_max': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'string', 'const': 'Inf'}], 'title': 'Plot Area Max', 'default': 'Inf'}, 'plot_area_min': {'type': 'number', 'title': 'Plot Area Min', 'default': 0, 'minimum': 0}, 'gross_area_max': {'anyOf': [{'type': 'integer', 'minimum': 0}, {'type': 'string', 'const': 'Inf'}], 'title': 'Gross Area Max', 'default': 'Inf'}, 'gross_area_min': {'type': 'integer', 'title': 'Gross Area Min', 'default': 0, 'minimum': 0}, 'property_categories': {'type': 'array', 'items': {'$ref': '#/$defs/PropertyCategory'}, 'title': 'Property Categories', 'maxItems': 1, 'description': 'Zero or one category; an empty list means any property category.'}, 'plot_zoning_categories': {'type': 'array', 'items': {'$ref': '#/$defs/PlotZoningCategory'}, 'title': 'Plot Zoning Categories', 'maxItems': 1, 'description': 'Zero or one zoning category; an empty list means any zoning.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'LocationId': {'type': 'integer', 'minimum': 1}, 'ListingCard': {'type': 'object', 'title': 'ListingCard', 'required': ['id', 'title', 'price', 'n_rooms', 'gross_area', 'property_type', 'locations', 'url', 'canonical_url', 'source', 'source_id', 'published_at', 'freshness_at'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'price': {'type': 'number', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'source': {'$ref': '#/$defs/ListingSource'}, 'n_rooms': {'type': 'integer', 'title': 'N Rooms', 'description': 'Bedroom count normalized by Casatoo from the Portuguese T typology.'}, 'currency': {'type': 'string', 'const': 'EUR', 'title': 'Currency', 'default': 'EUR'}, 'area_unit': {'type': 'string', 'const': 'm²', 'title': 'Area Unit', 'default': 'm²'}, 'locations': {'type': 'array', 'items': {'$ref': '#/$defs/ListingCardLocation'}, 'title': 'Locations'}, 'source_id': {'type': 'string', 'title': 'Source Id'}, 'gross_area': {'type': 'integer', 'title': 'Gross Area', 'description': 'Supplier-reported gross floor area in square metres.'}, 'freshness_at': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Freshness At', 'description': 'Most recent time Casatoo observed the listing active; this is crawl freshness, not necessarily a supplier-side content change.'}, 'published_at': {'anyOf': [{'type': 'string', 'format': 'date-time'}, {'type': 'null'}], 'title': 'Published At', 'description': 'Publication timestamp reported or derived from the supplier; null when unknown.'}, 'canonical_url': {'type': 'string', 'title': 'Canonical Url'}, 'content_trust': {'type': 'string', 'const': 'supplier_untrusted', 'title': 'Content Trust', 'default': 'supplier_untrusted'}, 'property_type': {'$ref': '#/$defs/PropertyType'}}}, 'ListingPage': {'type': 'object', 'title': 'ListingPage', 'required': ['limit', 'next_cursor', 'has_more'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit'}, 'has_more': {'type': 'boolean', 'title': 'Has More'}, 'next_cursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Next Cursor'}}}, 'PropertyType': {'enum': ['apartment', 'loft', 'duplex', 'house_semi_detached', 'house_detached', 'townhouse', 'mansion', 'rustic_house', 'manor_house', 'building', 'plot', 'commercial', 'industrial', 'storage', 'hotel', 'warehouse', 'room', 'garage', 'other', 'country_estate'], 'type': 'string', 'title': 'PropertyType'}, 'ListingSource': {'enum': ['idealista', 'imovirtual', 'engelvoelkers', 'kwportugal', 'remax', 'era', 'ego', 'casayes'], 'type': 'string', 'title': 'ListingSource'}, 'AgentLocationType': {'enum': ['DISTRICT', 'MUNICIPALITY', 'PARISH', 'NEIGHBORHOOD'], 'type': 'string', 'title': 'AgentLocationType'}, 'ListingCardLocation': {'type': 'object', 'title': 'ListingCardLocation', 'required': ['id', 'name', 'slug', 'location_type'], 'properties': {'id': {'$ref': '#/$defs/LocationId'}, 'name': {'type': 'string', 'title': 'Name'}, 'slug': {'type': 'string', 'title': 'Slug'}, 'location_type': {'$ref': '#/$defs/AgentLocationType'}}}}, 'title': 'ListingCardSearchResponse', 'required': ['listings', 'page'], 'properties': {'page': {'$ref': '#/$defs/ListingPage'}, 'listings': {'type': 'array', 'items': {'$ref': '#/$defs/ListingCard'}, 'title': 'Listings'}}}
입력 스키마
{'type': 'object', '$defs': {'LocationQuery': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'title': 'LocationSearchRequest', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 10, 'maximum': 25, 'minimum': 1}, 'query': {'$ref': '#/$defs/LocationQuery', 'description': 'Human place text used only to discover candidate Casatoo location IDs. Common unambiguous English aliases such as Lisbon are accepted.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'LocationId': {'type': 'integer', 'minimum': 1}, 'AgentLocationType': {'enum': ['DISTRICT', 'MUNICIPALITY', 'PARISH', 'NEIGHBORHOOD'], 'type': 'string', 'title': 'AgentLocationType'}, 'LocationSearchResult': {'type': 'object', 'title': 'LocationSearchResult', 'required': ['id', 'name', 'slug', 'location_type', 'district'], 'properties': {'id': {'$ref': '#/$defs/LocationId', 'description': 'Exact location ID to pass unchanged to listing search and search-link tools.'}, 'name': {'type': 'string', 'title': 'Name'}, 'slug': {'type': 'string', 'title': 'Slug'}, 'district': {'type': 'string', 'title': 'District'}, 'parent_id': {'anyOf': [{'$ref': '#/$defs/LocationId'}, {'type': 'null'}], 'default': None}, 'total_homes': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Total Homes', 'default': None}, 'municipality': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Municipality', 'default': None}, 'location_type': {'$ref': '#/$defs/AgentLocationType', 'description': 'Administrative level: DISTRICT, MUNICIPALITY, PARISH, or NEIGHBORHOOD.'}}}, 'LocationSelectionState': {'enum': ['no_candidates', 'single_candidate', 'selection_required'], 'type': 'string', 'title': 'LocationSelectionState'}, 'LocationQueryInterpretation': {'enum': ['literal', 'alias'], 'type': 'string', 'title': 'LocationQueryInterpretation'}}, 'title': 'LocationSearchResponse', 'required': ['query', 'normalized_query', 'query_interpretation', 'selection_state', 'locations'], 'properties': {'query': {'type': 'string', 'title': 'Query'}, 'locations': {'type': 'array', 'items': {'$ref': '#/$defs/LocationSearchResult'}, 'title': 'Locations'}, 'selection_state': {'$ref': '#/$defs/LocationSelectionState'}, 'normalized_query': {'type': 'string', 'title': 'Normalized Query'}, 'query_interpretation': {'$ref': '#/$defs/LocationQueryInterpretation'}}}
입력 스키마
{'type': 'object', '$defs': {'Money': {'type': 'number', 'maximum': 2000000, 'minimum': 0}, 'MonthlyMoney': {'type': 'number', 'maximum': 100000, 'minimum': 0}}, 'title': 'MortgageSimulationRequest', 'properties': {'price': {'$ref': '#/$defs/Money', 'default': 200000, 'description': 'Purchase price in EUR. Residential property only.'}, 'years': {'type': 'number', 'title': 'Years', 'default': 40, 'maximum': 40, 'minimum': 1, 'description': 'Term in years; rounds to the nearest whole year, halves upwards. Bank eligibility is not assessed.'}, 'region': {'enum': ['mainland', 'islands'], 'type': 'string', 'title': 'Region', 'default': 'mainland', 'description': 'Mainland Portugal or Madeira/Azores tax tables.'}, 'savings': {'$ref': '#/$defs/Money', 'default': 70000, 'description': 'Savings allocated to this purchase, including taxes and fees, in EUR.'}, 'tax_value': {'$ref': '#/$defs/Money', 'default': 0, 'description': 'VPT in EUR. Zero if unknown; taxes use the higher of this and price.'}, 'other_debt': {'$ref': '#/$defs/MonthlyMoney', 'default': 0, 'description': 'Existing monthly loan payments in EUR, included in effort rate.'}, 'annual_rate': {'type': 'number', 'title': 'Annual Rate', 'default': 3.45, 'maximum': 15, 'minimum': 0, 'description': 'Constant annual nominal rate (TAN), percent, not TAEG.'}, 'young_buyer': {'type': 'boolean', 'title': 'Young Buyer', 'default': False, 'description': 'True only if every buyer qualifies for IMT Jovem: age up to 35, not IRS-dependent, first primary home, no residential ownership in prior three years.'}, 'monthly_costs': {'$ref': '#/$defs/MonthlyMoney', 'default': 0, 'description': 'Monthly insurance and ownership costs in EUR, added to housing budget only.'}, 'purchase_type': {'enum': ['primary', 'secondary'], 'type': 'string', 'title': 'Purchase Type', 'default': 'primary', 'description': 'Primary permanent residence or secondary/rental residential property.'}, 'monthly_income': {'$ref': '#/$defs/MonthlyMoney', 'default': 3000, 'description': 'Net monthly household income in EUR. Zero means effort rate is unavailable.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'MortgageBreakdown': {'type': 'object', 'title': 'MortgageBreakdown', 'required': ['minimum_savings', 'savings_gap', 'monthly_budget', 'unused_savings', 'tax_base', 'price', 'savings', 'years', 'annual_rate', 'monthly_income', 'imt', 'purchase_stamp_duty', 'buying_registry', 'buying_expenses', 'loan_stamp_duty', 'loan_registry', 'loan_expenses', 'total_expenses', 'purchase_cost', 'mortgage_amount', 'monthly_payment', 'total_interest', 'total_with_credit', 'financing_ratio', 'effort_rate', 'ltv_limit'], 'properties': {'imt': {'type': 'number', 'title': 'Imt'}, 'price': {'type': 'number', 'title': 'Price'}, 'years': {'type': 'integer', 'title': 'Years'}, 'savings': {'type': 'number', 'title': 'Savings'}, 'tax_base': {'type': 'number', 'title': 'Tax Base'}, 'ltv_limit': {'type': 'number', 'title': 'Ltv Limit'}, 'annual_rate': {'type': 'number', 'title': 'Annual Rate'}, 'effort_rate': {'type': 'number', 'title': 'Effort Rate'}, 'savings_gap': {'type': 'number', 'title': 'Savings Gap'}, 'loan_expenses': {'type': 'number', 'title': 'Loan Expenses'}, 'loan_registry': {'type': 'number', 'title': 'Loan Registry'}, 'purchase_cost': {'type': 'number', 'title': 'Purchase Cost'}, 'monthly_budget': {'type': 'number', 'title': 'Monthly Budget'}, 'monthly_income': {'type': 'number', 'title': 'Monthly Income'}, 'total_expenses': {'type': 'number', 'title': 'Total Expenses'}, 'total_interest': {'type': 'number', 'title': 'Total Interest'}, 'unused_savings': {'type': 'number', 'title': 'Unused Savings'}, 'buying_expenses': {'type': 'number', 'title': 'Buying Expenses'}, 'buying_registry': {'type': 'number', 'title': 'Buying Registry'}, 'financing_ratio': {'type': 'number', 'title': 'Financing Ratio'}, 'loan_stamp_duty': {'type': 'number', 'title': 'Loan Stamp Duty'}, 'minimum_savings': {'type': 'number', 'title': 'Minimum Savings'}, 'monthly_payment': {'type': 'number', 'title': 'Monthly Payment'}, 'mortgage_amount': {'type': 'number', 'title': 'Mortgage Amount'}, 'total_with_credit': {'type': 'number', 'title': 'Total With Credit'}, 'purchase_stamp_duty': {'type': 'number', 'title': 'Purchase Stamp Duty'}}}, 'MortgageRateScenario': {'type': 'object', 'title': 'MortgageRateScenario', 'required': ['annual_rate', 'monthly_payment'], 'properties': {'annual_rate': {'type': 'number', 'title': 'Annual Rate'}, 'monthly_payment': {'type': 'number', 'title': 'Monthly Payment'}}}, 'MortgageAmortizationYear': {'type': 'object', 'title': 'MortgageAmortizationYear', 'required': ['year', 'interest', 'capital', 'balance'], 'properties': {'year': {'type': 'integer', 'title': 'Year'}, 'balance': {'type': 'number', 'title': 'Balance'}, 'capital': {'type': 'number', 'title': 'Capital'}, 'interest': {'type': 'number', 'title': 'Interest'}}}}, 'title': 'MortgageSimulationResponse', 'required': ['tax_year', 'currency', 'result', 'annual_schedule', 'rate_scenarios', 'effort_rate_available', 'assumptions'], 'properties': {'result': {'$ref': '#/$defs/MortgageBreakdown'}, 'currency': {'type': 'string', 'const': 'EUR', 'title': 'Currency'}, 'tax_year': {'type': 'integer', 'const': 2026, 'title': 'Tax Year'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Assumptions'}, 'rate_scenarios': {'type': 'array', 'items': {'$ref': '#/$defs/MortgageRateScenario'}, 'title': 'Rate Scenarios'}, 'annual_schedule': {'type': 'array', 'items': {'$ref': '#/$defs/MortgageAmortizationYear'}, 'title': 'Annual Schedule'}, 'effort_rate_available': {'type': 'boolean', 'title': 'Effort Rate Available'}}}
최근 도구 변경
유사한 MCP 서버
Superlógica Condomínios
Connects to a condominium ERP for billing, collections, agreements, expenses, bank movements, statements, files, communications, …
DFX Real Estate Intelligence
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
Supplies live US lending and deposit rates, financing comparisons, affordability and amortization calculations, eligibility check…
Rafid Intelligence Network
Analyzes Oman properties using rental comparables, yields, costs, and payback metrics, and supports Oman company search, profilin…
Housing Intel
Analyzes housing markets, affordability, mortgage rates, rental yields, property data, employment, metro demand, and investment s…
OpenLMNP
Manages French LMNP furnished-rental accounting, including income, expenses, depreciation, loans, VAT, fiscal calculations, FEC f…
Antevo Wealth
Aggregates household wealth data across investments, liabilities, credit facilities, real assets, markets, risk, exposure, and fi…
DataPorium
Provides market and company data covering stocks, ETFs, crypto, forex, commodities, economic indicators, housing, property listin…