PropFácil
Search authorized real estate in Mexico and manage favorites and publishing with OAuth.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"propfacil": {
"url": "https://www.propfacil.com/api/mcp"
}
}
}Remote endpoints
https://www.propfacil.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢search_properties(city, transactionType, minPrice, maxPrice, minBedrooms, ...)
Use this when the user wants to find authorized PropFácil property listings in Mexico by city, transaction type, price, bedrooms, or geographic radius.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Mexican city or municipality name explicitly requested by the user."
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
],
"description": "Listing operation: ForSale to buy or ForLease to rent."
},
"minPrice": {
"type": "number",
"minimum": 0,
"description": "Minimum listing price in the listing currency."
},
"maxPrice": {
"type": "number",
"minimum": 0,
"description": "Maximum listing price in the listing currency."
},
"minBedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Minimum number of bedrooms."
},
"near": {
"type": "string",
"pattern": "^-?\\d+(?:\\.\\d+)?,-?\\d+(?:\\.\\d+)?$",
"description": "Map center as lat,lng. Use only a location explicitly supplied by the user."
},
"radius": {
"type": "number",
"minimum": 100,
"maximum": 100000,
"description": "Search radius in meters."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Maximum number of results to return."
}
},
"additionalProperties": false,
"dependentRequired": {
"near": [
"radius"
],
"radius": [
"near"
]
}
}Output Schema
{
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"results": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"listingKey",
"transactionType",
"propertyType",
"price",
"currency",
"bedrooms",
"bathrooms",
"city",
"postalCode",
"latitude",
"longitude",
"photoUrl",
"summary",
"apiUrl",
"webUrl"
],
"properties": {
"listingKey": {
"type": "string"
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
]
},
"propertyType": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"photoUrl": {
"type": [
"string",
"null"
]
},
"summary": {
"type": "string"
},
"apiUrl": {
"type": "string",
"format": "uri"
},
"webUrl": {
"type": "string",
"format": "uri"
}
}
}
},
"nextCursor": {
"type": [
"string",
"null"
]
}
},
"required": [
"count",
"results",
"nextCursor"
],
"additionalProperties": false
}🟢get_property(id)
Use this when the user wants the details of one authorized PropFácil listing and has supplied a listingKey or ID from search_properties.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A listingKey or listing ID returned by search_properties."
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"property": {
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"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": {
"listingKey": {
"type": "string"
},
"standardStatus": {
"type": "string"
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
]
},
"propertyType": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"livingArea": {
"type": [
"number",
"null"
]
},
"publicRemarks": {
"type": [
"string",
"null"
]
},
"unparsedAddress": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"state": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"media": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"url",
"width",
"height"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"width": {
"type": [
"number",
"null"
]
},
"height": {
"type": [
"number",
"null"
]
}
}
}
},
"summary": {
"type": "string"
},
"apiUrl": {
"type": "string",
"format": "uri"
},
"webUrl": {
"type": "string",
"format": "uri"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"contactAvailable": {
"type": "boolean"
},
"sourceAvailable": {
"type": "boolean"
}
}
},
{
"type": "null"
}
]
}
},
"required": [
"property"
],
"additionalProperties": false
}🟢get_property_contact(id)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A listingKey or listing ID returned by search_properties or get_property."
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contact": {
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"listingKey",
"phone",
"phoneUrl",
"whatsappUrl",
"sourceUrl",
"webUrl"
],
"properties": {
"listingKey": {
"type": "string"
},
"phone": {
"type": [
"string",
"null"
]
},
"phoneUrl": {
"type": [
"string",
"null"
],
"format": "uri"
},
"whatsappUrl": {
"type": [
"string",
"null"
],
"format": "uri"
},
"sourceUrl": {
"type": [
"string",
"null"
],
"format": "uri"
},
"webUrl": {
"type": "string",
"format": "uri"
}
}
},
{
"type": "null"
}
]
}
},
"required": [
"contact"
],
"additionalProperties": false
}🟢render_property_results(propertyIds, title)
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.
Input Schema
{
"type": "object",
"properties": {
"propertyIds": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"description": "Up to 12 listingKey values returned by search_properties."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Short user-facing heading for the rendered property selection."
}
},
"required": [
"propertyIds"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"title": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
},
"properties": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"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": {
"listingKey": {
"type": "string"
},
"standardStatus": {
"type": "string"
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
]
},
"propertyType": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"livingArea": {
"type": [
"number",
"null"
]
},
"publicRemarks": {
"type": [
"string",
"null"
]
},
"unparsedAddress": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"state": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"media": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"url",
"width",
"height"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"width": {
"type": [
"number",
"null"
]
},
"height": {
"type": [
"number",
"null"
]
}
}
}
},
"summary": {
"type": "string"
},
"apiUrl": {
"type": "string",
"format": "uri"
},
"webUrl": {
"type": "string",
"format": "uri"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"contactAvailable": {
"type": "boolean"
},
"sourceAvailable": {
"type": "boolean"
}
}
}
}
},
"required": [
"title",
"count",
"properties"
],
"additionalProperties": false
}🟢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.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"render": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"required": [
"propertyIds",
"title"
],
"properties": {
"propertyIds": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"items": {
"type": "string"
}
},
"title": {
"type": "string"
}
}
}
},
"required": [
"render"
],
"additionalProperties": false
}🟡publish_property(idempotencyKey, transactionType, price, currency, title, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"pattern": "^[A-Za-z0-9._:-]+$",
"description": "Stable unique key for this publish request; reuse it when retrying."
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
],
"description": "Whether the property is offered for sale or lease."
},
"price": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500000000,
"description": "Positive advertised price in the selected currency."
},
"currency": {
"type": "string",
"enum": [
"MXN",
"USD"
],
"default": "MXN",
"description": "Currency used for the advertised price."
},
"title": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"description": "Public listing title shown to prospective buyers or tenants."
},
"description": {
"type": "string",
"minLength": 20,
"maxLength": 5000,
"description": "Public, accurate description of the property."
},
"city": {
"type": "string",
"minLength": 2,
"maxLength": 120,
"description": "Mexican city or municipality where the property is located."
},
"state": {
"type": "string",
"maxLength": 120,
"description": "Mexican state where the property is located, when known."
},
"bedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Number of bedrooms; use zero only when the property has none."
},
"bathrooms": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Number of bathrooms, including fractional half-bath values when applicable."
},
"areaSqm": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10000000,
"description": "Property area in square meters."
},
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude for the property location."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude for the property location."
},
"isCommercial": {
"type": "boolean",
"default": false,
"description": "True for commercial real estate; false for residential real estate."
}
},
"required": [
"idempotencyKey",
"transactionType",
"price",
"title",
"description",
"city"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"published",
"rejected"
]
},
"id": {
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
]
},
"idempotentReplay": {
"type": "boolean"
},
"reasons": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"status",
"id",
"url",
"idempotentReplay",
"reasons"
],
"additionalProperties": false
}🟢my_listings
Use this when an authenticated user asks to review the property listings they published on PropFácil.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"listings": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"title",
"price",
"currency",
"transactionType",
"city",
"url",
"isLive"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": [
"string",
"null"
]
},
"price": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string"
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
]
},
"city": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string",
"format": "uri"
},
"isLive": {
"type": [
"boolean",
"null"
]
}
}
}
}
},
"required": [
"listings"
],
"additionalProperties": false
}🟢list_property_lists
Use this when an authenticated user wants to see their PropFácil favorite lists. This returns only lists owned by the linked user.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"lists": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"name",
"count",
"createdAt"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
}
}
},
"required": [
"lists"
],
"additionalProperties": false
}🟢get_property_list(listId)
Use this when an authenticated user wants to inspect one of their PropFácil favorite lists and its saved properties.
Input Schema
{
"type": "object",
"properties": {
"listId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Identifier of a favorite list owned by the authenticated user."
}
},
"required": [
"listId"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"list": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"name",
"count",
"createdAt"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"items": {
"type": "array",
"maxItems": 200,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"property",
"note",
"addedAt"
],
"properties": {
"property": {
"type": "object",
"additionalProperties": false,
"required": [
"listingKey",
"transactionType",
"propertyType",
"price",
"currency",
"bedrooms",
"bathrooms",
"city",
"postalCode",
"latitude",
"longitude",
"photoUrl",
"summary",
"apiUrl",
"webUrl"
],
"properties": {
"listingKey": {
"type": "string"
},
"transactionType": {
"type": "string",
"enum": [
"ForSale",
"ForLease"
]
},
"propertyType": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"photoUrl": {
"type": [
"string",
"null"
]
},
"summary": {
"type": "string"
},
"apiUrl": {
"type": "string",
"format": "uri"
},
"webUrl": {
"type": "string",
"format": "uri"
}
}
},
"note": {
"type": "string"
},
"addedAt": {
"type": "string",
"format": "date-time"
}
}
}
}
},
"required": [
"list",
"items"
],
"additionalProperties": false
}🟡save_property_to_list(propertyId, listId, listName, note)
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.
Input Schema
{
"type": "object",
"properties": {
"propertyId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A listingKey returned by search_properties."
},
"listId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Identifier of a favorite list owned by the authenticated user."
},
"listName": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"default": "Favoritos",
"description": "Name for a new favorite list; defaults to Favoritos."
},
"note": {
"type": "string",
"maxLength": 500,
"description": "Optional private note stored with the saved property."
}
},
"required": [
"propertyId"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"saved": {
"type": "boolean"
},
"propertyId": {
"type": "string"
},
"list": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"name",
"count",
"createdAt"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
}
},
"required": [
"saved",
"propertyId",
"list"
],
"additionalProperties": false
}🟢rename_property_list(listId, name)
Use this when an authenticated user asks to rename one of their PropFácil favorite lists.
Input Schema
{
"type": "object",
"properties": {
"listId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Identifier of a favorite list owned by the authenticated user."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "New name for the favorite list."
}
},
"required": [
"listId",
"name"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"list": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"name",
"count",
"createdAt"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
}
},
"required": [
"list"
],
"additionalProperties": false
}🔴remove_property_from_list(listId, propertyId)
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.
Input Schema
{
"type": "object",
"properties": {
"listId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Identifier of a favorite list owned by the authenticated user."
},
"propertyId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A listingKey for the saved property to remove."
}
},
"required": [
"listId",
"propertyId"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"removed": {
"type": "boolean"
},
"listId": {
"type": "string"
},
"propertyId": {
"type": "string"
}
},
"required": [
"removed",
"listId",
"propertyId"
],
"additionalProperties": false
}🔴delete_property_list(listId)
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.
Input Schema
{
"type": "object",
"properties": {
"listId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Identifier of a favorite list owned by the authenticated user."
}
},
"required": [
"listId"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"deleted": {
"type": "boolean"
},
"listId": {
"type": "string"
}
},
"required": [
"deleted",
"listId"
],
"additionalProperties": false
}Community
Evidence