Herramientas públicas
Referencia de las herramientas MCP de Matchai search_listings, get_listing y get_professional. Entradas, salidas, ejemplos y el widget de tarjetas de anuncios.
El servidor MCP ofrece tres herramientas. Todas son de solo lectura, no necesitan cuenta y solo devuelven datos publicados.
| Herramienta | Propósito |
|---|---|
search_listings | Encontrar anuncios disponibles por lugar, precio, habitaciones, baños, tipo de propiedad, y venta o alquiler. |
get_listing | Obtener todos los detalles públicos de un anuncio a partir de cualquiera de sus direcciones o de su id. |
get_professional | Obtener el perfil público de un corredor y sus anuncios disponibles. |
Cómo se comportan las herramientas
- Solo lectura. Cada herramienta está anotada con
readOnlyHint: true,destructiveHint: false,idempotentHint: trueyopenWorldHint: false. Solo leen el catálogo publicado de Matchai. - Tres partes en cada resultado.
contentes texto plano que un modelo puede citar.structuredContentson datos tipados que corresponden aloutputSchemade la herramienta._metaes para el widget de tarjetas de anuncios, y los demás clientes pueden ignorarlo. - Lo desconocido es null. Un dato que el corredor no indicó es
null, nunca0. Un anuncio sin precio indicado tieneprice: null. - Argumentos flexibles. Los valores
nully las cadenas vacías se descartan, y los números enviados como cadenas, como"600000"o"$600,000", se convierten antes de la validación. - Los errores que un modelo puede corregir vuelven como un resultado con
isError: truey un mensaje. Una llamada que nombra una herramienta desconocida, o cuyoargumentsno es un objeto, es un error JSON-RPC-32602. Consulta los errores.
El objeto de anuncio
search_listings y get_professional devuelven objetos de anuncio, y get_listing devuelve el mismo objeto con campos de detalle adicionales.
Campo
Tipo
search_listings
Busca anuncios publicados que están disponibles en este momento. Devuelve hasta 10, primero la mejor coincidencia.
Entrada
Todos los campos son opcionales. Sin argumentos, se devuelven los anuncios actualizados más recientemente.
Campo
Tipo
query se interpreta con el mismo analizador que la búsqueda de anuncios: los precios, las habitaciones, los baños, la venta o el alquiler y el tipo de propiedad se extraen de la frase, en inglés, francés o español. Un argumento explícito siempre prevalece sobre lo que dice la frase, y la frase completa lo que los argumentos omiten. Si minPrice es mayor que maxPrice, se intercambian.
Salida
Campo
Tipo
El texto de content empieza con la cantidad de anuncios y una indicación de cómo están ordenados. Luego enumera una entrada por anuncio con el título, el precio y el tipo, los datos, el lugar, el corredor del anuncio y la URL.
Un resultado vacío indica si Matchai revisó todos los anuncios o solo los actualizados más recientemente. Nunca afirma que "no existe ninguno" en una búsqueda que no llegó más atrás. Una ciudad o un rango de precios permite que la búsqueda llegue más lejos.
Ejemplo
Envía esto como una solicitud tools/call:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_listings",
"arguments": { "query": "3 bedroom condo in Laval under 600k" }
}
}Un resultado abreviado. Esta búsqueda encontró un anuncio, y el objeto filters muestra cómo se interpretó la frase:
{
"content": [
{
"type": "text",
"text": "1 published listing on Matchai. Results are ordered by relevance to the request and by how recently the listing was updated. No broker can pay to change the order or to be included.\n\n1. Bright 3-bedroom condo near Montmorency metro — $585,000, condo for sale\n 3 bedrooms · 1.5 bathrooms · 1,120 sq ft · Montmorency, Laval, Québec\n Listed by Alice Tremblay (Agence Exemple)\n https://alice.matchai.co/bright-condo-montmorency"
}
],
"structuredContent": {
"kind": "listings",
"filters": {
"keywords": ["laval"],
"city": null,
"neighbourhood": null,
"transaction": null,
"propertyType": "condo",
"minPrice": null,
"maxPrice": 600000,
"minBedrooms": 3,
"minBathrooms": null
},
"count": 1,
"listings": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Bright 3-bedroom condo near Montmorency metro",
"url": "https://alice.matchai.co/bright-condo-montmorency",
"price": 585000,
"currency": "CAD",
"priceText": "$585,000",
"transaction": "sale",
"status": "available",
"propertyType": "condo",
"bedrooms": 3,
"bathrooms": 1.5,
"livingAreaSqft": 1120,
"neighbourhood": "Montmorency",
"city": "Laval",
"region": "Québec",
"location": "Montmorency, Laval, Québec",
"image": "https://media.example.com/listings/bright-condo-montmorency/cover.jpg",
"broker": { "name": "Alice Tremblay", "brokerage": "Agence Exemple" },
"site": { "name": "Alice Tremblay Immobilier", "url": "https://alice.matchai.co" },
"updatedAt": "2026-10-12T14:03:22.000Z"
}
]
},
"_meta": {
"ui": { "resourceUri": "ui://matchai/listing-cards.html?v=3f9a1c2b7d10" }
}
}El objeto _meta real tiene algunas claves más para el widget. Los nombres, las direcciones y el host de las fotos de estos ejemplos son ficticios.
get_listing
Devuelve todos los detalles públicos de un anuncio publicado.
Entrada
Envía url o id. Si envías ambos, se usa id.
Campo
Tipo
Todas estas direcciones nombran el mismo anuncio, con o sin barra final o parámetros de seguimiento:
- el sitio de Matchai del corredor, como
https://alice.matchai.co/bright-condo-montmorency; - la forma anterior con
/listing/antes del slug, comohttps://alice.matchai.co/listing/bright-condo-montmorency; - el dominio propio del corredor, cuando el sitio tiene uno;
- la forma de ruta en la plataforma, como
https://matchai.co/site/alice/bright-condo-montmorency; - la copia en Markdown de cualquiera de ellas, terminada en
.md; - el id del anuncio por sí solo.
Salida
Campo
Tipo
Los campos adicionales de listing:
Campo
Tipo
La búsqueda solo devuelve anuncios disponibles. get_listing también puede devolver un anuncio publicado que desde entonces se haya vendido o alquilado, así que revisa status.
Si ningún anuncio publicado coincide, el resultado tiene isError: true e indica que es posible que el anuncio se haya dejado de publicar o que la dirección esté incompleta.
Ejemplo
{
"name": "get_listing",
"arguments": { "url": "https://alice.matchai.co/bright-condo-montmorency" }
}El structuredContent del resultado, abreviado:
{
"kind": "listing",
"listing": {
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Bright 3-bedroom condo near Montmorency metro",
"url": "https://alice.matchai.co/bright-condo-montmorency",
"price": 585000,
"currency": "CAD",
"priceText": "$585,000",
"transaction": "sale",
"status": "available",
"propertyType": "condo",
"bedrooms": 3,
"bathrooms": 1.5,
"livingAreaSqft": 1120,
"neighbourhood": "Montmorency",
"city": "Laval",
"region": "Québec",
"location": "Montmorency, Laval, Québec",
"image": "https://media.example.com/listings/bright-condo-montmorency/cover.jpg",
"broker": { "name": "Alice Tremblay", "brokerage": "Agence Exemple" },
"site": { "name": "Alice Tremblay Immobilier", "url": "https://alice.matchai.co" },
"updatedAt": "2026-10-12T14:03:22.000Z",
"description": "A bright corner unit on the fourth floor, five minutes from the metro. …",
"highlights": ["Two balconies", "Indoor parking", "Five minutes from the metro"],
"yearBuilt": 2012,
"lotSizeSqft": null,
"address": null,
"postalCode": null,
"images": [
"https://media.example.com/listings/bright-condo-montmorency/cover.jpg",
"https://media.example.com/listings/bright-condo-montmorency/living-room.jpg"
],
"datePosted": "2026-09-30"
}
}Aquí el corredor no publicó la dirección, así que address y postalCode son null.
get_professional
Devuelve el perfil público de un corredor con sus anuncios disponibles, hasta 10.
Entrada
Envía username o url. Si envías ambos, se usa username.
Campo
Tipo
Salida
Campo
Tipo
Los campos de professional:
Campo
Tipo
Un corredor se devuelve solo si eligió ser público en algún lugar: un sitio publicado, una Página Matchai publicada o una tarjeta de presentación activada. De lo contrario, el resultado tiene isError: true e indica que ningún corredor con un perfil público de Matchai coincide.
Ejemplo
{
"name": "get_professional",
"arguments": { "username": "alice_tremblay" }
}La parte professional del structuredContent del resultado. El array listings que la acompaña contiene objetos de anuncio como los de search_listings.
{
"name": "Alice Tremblay",
"username": "alice_tremblay",
"jobTitle": "Real estate broker",
"brokerage": "Agence Exemple",
"licence": { "number": "123456", "body": "OACIQ" },
"photo": "https://media.example.com/avatars/alice-tremblay.jpg",
"siteUrl": "https://alice.matchai.co",
"pageUrl": "https://alice.matchai.pro",
"contact": { "email": null, "phone": null }
}El widget de tarjetas de anuncios
Cuando una herramienta devuelve anuncios, los asistentes compatibles con MCP Apps pueden mostrarlos como tarjetas dentro de la conversación. Las tarjetas provienen de un único recurso al que apuntan todas las herramientas.
| Detalle | Valor |
|---|---|
| URI | ui://matchai/listing-cards.html?v=…, donde v es una versión que cambia cada vez que cambia el widget |
| Tipo | text/html;profile=mcp-app |
| Nombre | listing-cards (título "Listing cards") |
| Referenciado desde | _meta.ui.resourceUri en cada herramienta de tools/list y en cada resultado. ChatGPT lee el mismo URI desde su propia clave en _meta. |
Lee el URI actual en tools/list en lugar de escribirlo directamente en el código. resources/read también acepta el URI sin v, y cualquier v anterior, y responde con el widget actual.
resources/list devuelve ese único recurso, incluida la política de seguridad de contenido que debe aplicar el asistente:
{
"resources": [
{
"uri": "ui://matchai/listing-cards.html?v=3f9a1c2b7d10",
"name": "listing-cards",
"title": "Listing cards",
"description": "Interactive cards for the listings a Matchai tool returned.",
"mimeType": "text/html;profile=mcp-app",
"_meta": {
"ui": {
"csp": {
"connectDomains": ["https://matchai.co"],
"resourceDomains": ["https://matchai.co", "https://media.example.com"]
},
"prefersBorder": true
}
}
}
]
}resources/read devuelve el widget como un único documento HTML autónomo en contents[0].text. No usa ningún framework ni ninguna fuente o script externos.
Qué hace el widget:
- Muestra el resultado según su tipo.
kind: "listings"se convierte en una fila desplazable de tarjetas,kind: "listing"en una tarjeta más grande con una descripción breve, ykind: "professional"en el nombre y el cargo del corredor con un enlace Visitar el sitio, sobre una fila de tarjetas. - Se adapta al asistente. Usa el tema de colores y el idioma del asistente (inglés, francés o español) y abre los enlaces a través del asistente.
- Gestiona los fallos. Un resultado con
isError: true, o sinstructuredContent, muestra "Nada que mostrar". - Informa que se vio una tarjeta. Cuando una tarjeta ha estado en pantalla el tiempo suficiente para leerse, el widget le indica a Matchai qué anuncios estuvieron visibles, durante cuánto tiempo y qué parte de cada uno, además del tipo general de plataforma del asistente (web, escritorio o móvil). Si el resultado no incluye un token para este informe, no se envía nada. Nunca envía texto de la conversación ni un identificador de usuario.
Un asistente que no renderiza MCP Apps ignora el widget. El texto de content y los datos de structuredContent contienen la respuesta completa. Si creas tus propias tarjetas, enlaza cada una a la url del anuncio.
Servidor MCP
Conecta un asistente de IA al servidor MCP de Matchai y busca anuncios. Endpoints, transporte, límites y configuración para Claude, ChatGPT y otros clientes.
Herramientas autenticadasPróximamente
Conecta Claude o ChatGPT a tu cuenta de Matchai con un clic. Herramientas personales previstas para anuncios, contactos, mensajes y calendario, con aprobación.