MCP 服务器

PropFácil

io.github.jonatanvazquez/propfacil
地图与位置 房地产 公开且可连接 MCP 2026-07-28

此 MCP 可以做什么

Searches authorized Mexican property listings and supports listing details, favorites, publishing, contact access, and property result displays.

delete_property_list
Delete a favorite list
Use this when an authenticated user explicitly asks to permanently delete one of their PropFácil favorite lists and its saved entries. Do not use it for removing a single property.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['listId'], 'properties': {'listId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Identifier of a favorite list owned by the authenticated user.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['deleted', 'listId'], 'properties': {'listId': {'type': 'string'}, 'deleted': {'type': 'boolean'}}, 'additionalProperties': False}
get_property
Get property details
Use this when the user wants the details of one authorized PropFácil listing and has supplied a listingKey or ID from search_properties.
只读
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'A listingKey or listing ID returned by search_properties.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['property'], 'properties': {'property': {'anyOf': [{'type': 'object', 'required': ['listingKey', 'standardStatus', 'transactionType', 'propertyType', 'price', 'currency', 'bedrooms', 'bathrooms', 'livingArea', 'publicRemarks', 'unparsedAddress', 'postalCode', 'city', 'state', 'country', 'latitude', 'longitude', 'media', 'summary', 'apiUrl', 'webUrl', 'confidence', 'contactAvailable', 'sourceAvailable'], 'properties': {'city': {'type': ['string', 'null']}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'width', 'height'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'width': {'type': ['number', 'null']}, 'height': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'maxItems': 12}, 'price': {'type': 'number'}, 'state': {'type': ['string', 'null']}, 'apiUrl': {'type': 'string', 'format': 'uri'}, 'webUrl': {'type': 'string', 'format': 'uri'}, 'country': {'type': 'string'}, 'summary': {'type': 'string'}, 'bedrooms': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'latitude': {'type': ['number', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'confidence': {'type': 'number', 'maximum': 1, 'minimum': 0}, 'listingKey': {'type': 'string'}, 'livingArea': {'type': ['number', 'null']}, 'postalCode': {'type': ['string', 'null']}, 'propertyType': {'type': 'string'}, 'publicRemarks': {'type': ['string', 'null']}, 'standardStatus': {'type': 'string'}, 'sourceAvailable': {'type': 'boolean'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string'}, 'unparsedAddress': {'type': ['string', 'null']}, 'contactAvailable': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'additionalProperties': False}
get_property_contact
Get property contact
Use this when the user explicitly asks to contact the advertiser or open the authorized original listing for a property previously returned by PropFácil.
只读
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'A listingKey or listing ID returned by search_properties or get_property.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['contact'], 'properties': {'contact': {'anyOf': [{'type': 'object', 'required': ['listingKey', 'phone', 'phoneUrl', 'whatsappUrl', 'sourceUrl', 'webUrl'], 'properties': {'phone': {'type': ['string', 'null']}, 'webUrl': {'type': 'string', 'format': 'uri'}, 'phoneUrl': {'type': ['string', 'null'], 'format': 'uri'}, 'sourceUrl': {'type': ['string', 'null'], 'format': 'uri'}, 'listingKey': {'type': 'string'}, 'whatsappUrl': {'type': ['string', 'null'], 'format': 'uri'}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'additionalProperties': False}
get_property_list
Get a favorite list
Use this when an authenticated user wants to inspect one of their PropFácil favorite lists and its saved properties.
只读
输入模式
{'type': 'object', 'required': ['listId'], 'properties': {'listId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Identifier of a favorite list owned by the authenticated user.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['list', 'items'], 'properties': {'list': {'type': 'object', 'required': ['id', 'name', 'count', 'createdAt'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'count': {'type': 'integer', 'minimum': 0}, 'createdAt': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['property', 'note', 'addedAt'], 'properties': {'note': {'type': 'string'}, 'addedAt': {'type': 'string', 'format': 'date-time'}, 'property': {'type': 'object', 'required': ['listingKey', 'transactionType', 'propertyType', 'price', 'currency', 'bedrooms', 'bathrooms', 'city', 'postalCode', 'latitude', 'longitude', 'photoUrl', 'summary', 'apiUrl', 'webUrl'], 'properties': {'city': {'type': ['string', 'null']}, 'price': {'type': 'number'}, 'apiUrl': {'type': 'string', 'format': 'uri'}, 'webUrl': {'type': 'string', 'format': 'uri'}, 'summary': {'type': 'string'}, 'bedrooms': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'latitude': {'type': ['number', 'null']}, 'photoUrl': {'type': ['string', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'listingKey': {'type': 'string'}, 'postalCode': {'type': ['string', 'null']}, 'propertyType': {'type': 'string'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'maxItems': 200}}, 'additionalProperties': False}
list_property_lists
List favorite lists
Use this when an authenticated user wants to see their PropFácil favorite lists. This returns only lists owned by the linked user.
只读
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['lists'], 'properties': {'lists': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'count', 'createdAt'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'count': {'type': 'integer', 'minimum': 0}, 'createdAt': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'maxItems': 100}}, 'additionalProperties': False}
my_listings
List my properties
Use this when an authenticated user asks to review the property listings they published on PropFácil.
只读
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['listings'], 'properties': {'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'price', 'currency', 'transactionType', 'city', 'url', 'isLive'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string', 'format': 'uri'}, 'city': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'title': {'type': ['string', 'null']}, 'isLive': {'type': ['boolean', 'null']}, 'currency': {'type': 'string'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 100}}, 'additionalProperties': False}
publish_property
Publish a property
Use this when an authenticated user explicitly asks to publish a property publicly on PropFácil. This creates a public listing and is safe to retry with the same idempotencyKey.
可访问外部资源
输入模式
{'type': 'object', 'required': ['idempotencyKey', 'transactionType', 'price', 'title', 'description', 'city'], 'properties': {'city': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'Mexican city or municipality where the property is located.'}, 'price': {'type': 'number', 'maximum': 500000000, 'description': 'Positive advertised price in the selected currency.', 'exclusiveMinimum': 0}, 'state': {'type': 'string', 'maxLength': 120, 'description': 'Mexican state where the property is located, when known.'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 8, 'description': 'Public listing title shown to prospective buyers or tenants.'}, 'areaSqm': {'type': 'number', 'maximum': 10000000, 'description': 'Property area in square meters.', 'exclusiveMinimum': 0}, 'bedrooms': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Number of bedrooms; use zero only when the property has none.'}, 'currency': {'enum': ['MXN', 'USD'], 'type': 'string', 'default': 'MXN', 'description': 'Currency used for the advertised price.'}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'WGS84 latitude for the property location.'}, 'bathrooms': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Number of bathrooms, including fractional half-bath values when applicable.'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'WGS84 longitude for the property location.'}, 'description': {'type': 'string', 'maxLength': 5000, 'minLength': 20, 'description': 'Public, accurate description of the property.'}, 'isCommercial': {'type': 'boolean', 'default': False, 'description': 'True for commercial real estate; false for residential real estate.'}, 'idempotencyKey': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]+$', 'maxLength': 100, 'minLength': 8, 'description': 'Stable unique key for this publish request; reuse it when retrying.'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string', 'description': 'Whether the property is offered for sale or lease.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['status', 'id', 'url', 'idempotentReplay', 'reasons'], 'properties': {'id': {'type': ['string', 'null']}, 'url': {'type': ['string', 'null']}, 'status': {'enum': ['published', 'rejected'], 'type': 'string'}, 'reasons': {'type': 'array', 'items': {'type': 'string'}}, 'idempotentReplay': {'type': 'boolean'}}, 'additionalProperties': False}
remove_property_from_list
Remove property from favorites
Use this when an authenticated user asks to remove a saved property from one of their PropFácil lists. The list remains available if it becomes empty.
输入模式
{'type': 'object', 'required': ['listId', 'propertyId'], 'properties': {'listId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Identifier of a favorite list owned by the authenticated user.'}, 'propertyId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'A listingKey for the saved property to remove.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['removed', 'listId', 'propertyId'], 'properties': {'listId': {'type': 'string'}, 'removed': {'type': 'boolean'}, 'propertyId': {'type': 'string'}}, 'additionalProperties': False}
rename_property_list
Rename a favorite list
Use this when an authenticated user asks to rename one of their PropFácil favorite lists.
输入模式
{'type': 'object', 'required': ['listId', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'New name for the favorite list.'}, 'listId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Identifier of a favorite list owned by the authenticated user.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['list'], 'properties': {'list': {'type': 'object', 'required': ['id', 'name', 'count', 'createdAt'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'count': {'type': 'integer', 'minimum': 0}, 'createdAt': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}}, 'additionalProperties': False}
render_property_results
Show property results
Use this when, after search_properties, the user would benefit from interactive property cards, comparison, details, or a map. Pass only listing IDs already returned by a data tool.
只读
输入模式
{'type': 'object', 'required': ['propertyIds'], 'properties': {'title': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Short user-facing heading for the rendered property selection.'}, 'propertyIds': {'type': 'array', 'items': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'maxItems': 12, 'minItems': 1, 'description': 'Up to 12 listingKey values returned by search_properties.', 'uniqueItems': True}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['title', 'count', 'properties'], 'properties': {'count': {'type': 'integer', 'minimum': 0}, 'title': {'type': 'string'}, 'properties': {'type': 'array', 'items': {'type': 'object', 'required': ['listingKey', 'standardStatus', 'transactionType', 'propertyType', 'price', 'currency', 'bedrooms', 'bathrooms', 'livingArea', 'publicRemarks', 'unparsedAddress', 'postalCode', 'city', 'state', 'country', 'latitude', 'longitude', 'media', 'summary', 'apiUrl', 'webUrl', 'confidence', 'contactAvailable', 'sourceAvailable'], 'properties': {'city': {'type': ['string', 'null']}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'width', 'height'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'width': {'type': ['number', 'null']}, 'height': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'maxItems': 12}, 'price': {'type': 'number'}, 'state': {'type': ['string', 'null']}, 'apiUrl': {'type': 'string', 'format': 'uri'}, 'webUrl': {'type': 'string', 'format': 'uri'}, 'country': {'type': 'string'}, 'summary': {'type': 'string'}, 'bedrooms': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'latitude': {'type': ['number', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'confidence': {'type': 'number', 'maximum': 1, 'minimum': 0}, 'listingKey': {'type': 'string'}, 'livingArea': {'type': ['number', 'null']}, 'postalCode': {'type': ['string', 'null']}, 'propertyType': {'type': 'string'}, 'publicRemarks': {'type': ['string', 'null']}, 'standardStatus': {'type': 'string'}, 'sourceAvailable': {'type': 'boolean'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string'}, 'unparsedAddress': {'type': ['string', 'null']}, 'contactAvailable': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 12}}, 'additionalProperties': False}
restore_property_results
Restore property results
Use this when the PropFácil app needs to restore the latest public property selection for the current MCP session after its widget is recreated.
只读
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['render'], 'properties': {'render': {'type': ['object', 'null'], 'required': ['propertyIds', 'title'], 'properties': {'title': {'type': 'string'}, 'propertyIds': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 12, 'minItems': 1}}, 'additionalProperties': False}}, 'additionalProperties': False}
save_property_to_list
Save property to favorites
Use this when an authenticated user asks to save a property to a favorite list. If no list is supplied, use the idempotent default list named Favoritos.
输入模式
{'type': 'object', 'required': ['propertyId'], 'properties': {'note': {'type': 'string', 'maxLength': 500, 'description': 'Optional private note stored with the saved property.'}, 'listId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Identifier of a favorite list owned by the authenticated user.'}, 'listName': {'type': 'string', 'default': 'Favoritos', 'maxLength': 80, 'minLength': 1, 'description': 'Name for a new favorite list; defaults to Favoritos.'}, 'propertyId': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'A listingKey returned by search_properties.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['saved', 'propertyId', 'list'], 'properties': {'list': {'type': 'object', 'required': ['id', 'name', 'count', 'createdAt'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'count': {'type': 'integer', 'minimum': 0}, 'createdAt': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'saved': {'type': 'boolean'}, 'propertyId': {'type': 'string'}}, 'additionalProperties': False}
search_properties
Search properties
Use this when the user wants to find authorized PropFácil property listings in Mexico by city, transaction type, price, bedrooms, or geographic radius.
只读
输入模式
{'type': 'object', 'properties': {'city': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Mexican city or municipality name explicitly requested by the user.'}, 'near': {'type': 'string', 'pattern': '^-?\\d+(?:\\.\\d+)?,-?\\d+(?:\\.\\d+)?$', 'description': 'Map center as lat,lng. Use only a location explicitly supplied by the user.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Maximum number of results to return.'}, 'radius': {'type': 'number', 'maximum': 100000, 'minimum': 100, 'description': 'Search radius in meters.'}, 'maxPrice': {'type': 'number', 'minimum': 0, 'description': 'Maximum listing price in the listing currency.'}, 'minPrice': {'type': 'number', 'minimum': 0, 'description': 'Minimum listing price in the listing currency.'}, 'minBedrooms': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Minimum number of bedrooms.'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string', 'description': 'Listing operation: ForSale to buy or ForLease to rent.'}}, 'dependentRequired': {'near': ['radius'], 'radius': ['near']}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['count', 'results', 'nextCursor'], 'properties': {'count': {'type': 'integer', 'minimum': 0}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['listingKey', 'transactionType', 'propertyType', 'price', 'currency', 'bedrooms', 'bathrooms', 'city', 'postalCode', 'latitude', 'longitude', 'photoUrl', 'summary', 'apiUrl', 'webUrl'], 'properties': {'city': {'type': ['string', 'null']}, 'price': {'type': 'number'}, 'apiUrl': {'type': 'string', 'format': 'uri'}, 'webUrl': {'type': 'string', 'format': 'uri'}, 'summary': {'type': 'string'}, 'bedrooms': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'latitude': {'type': ['number', 'null']}, 'photoUrl': {'type': ['string', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'listingKey': {'type': 'string'}, 'postalCode': {'type': ['string', 'null']}, 'propertyType': {'type': 'string'}, 'transactionType': {'enum': ['ForSale', 'ForLease'], 'type': 'string'}}, 'additionalProperties': False}}, 'nextCursor': {'type': ['string', 'null']}}, 'additionalProperties': False}
已添加
delete_property_list
2026年9月17日 12:42
已添加
remove_property_from_list
2026年9月17日 12:42
已添加
rename_property_list
2026年9月17日 12:42
已添加
save_property_to_list
2026年9月17日 12:42
已添加
get_property_list
2026年9月17日 12:42
已添加
list_property_lists
2026年9月17日 12:42
已添加
my_listings
2026年9月17日 12:42
已添加
publish_property
2026年9月17日 12:42
已添加
restore_property_results
2026年9月17日 12:42
已添加
render_property_results
2026年9月17日 12:42
已添加
get_property_contact
2026年9月17日 12:42
已添加
get_property
2026年9月17日 12:42
已添加
search_properties
2026年9月17日 12:42