Matchai Docs

Serveur MCP

Connectez un assistant IA au serveur MCP de Matchai. Points de terminaison, transport, limites et configuration pour Claude, ChatGPT et les autres clients.

Le serveur MCP de Matchai permet à un assistant IA de chercher parmi les inscriptions que des professionnels de l'immobilier ont publiées sur Matchai, d'ouvrir une inscription et de trouver un courtier. MCP, le Model Context Protocol, est la norme ouverte qu'utilisent les assistants pour appeler des outils externes.

Le serveur est public et en lecture seule. Il ne demande ni compte, ni clé d'API, ni connexion, et il ne renvoie que des données publiées.

Points de terminaison

URLUtilisation
https://matchai.co/mcpLe point de terminaison par défaut. Utilisez-le pour ChatGPT, Claude Code, le MCP Inspector, les scripts et tous les autres clients.
https://matchai.co/mcp/claudeLe même serveur, pour les applications Claude, afin que les fiches d'inscription s'affichent dans la conversation.
https://matchai.co/mcp/server-cardUne description JSON du serveur pour les répertoires et les outils d'analyse.

Pourquoi il y a deux URL de connecteur

Les deux URL exécutent le même serveur et renvoient les mêmes outils et les mêmes données. Elles ne diffèrent que par un réglage du widget, sur lequel les deux assistants ne s'entendent pas : ChatGPT veut qu'un domaine dédié au widget soit déclaré, et Claude n'affiche pas un widget dont le domaine déclaré ne correspond pas à sa propre URL de connecteur. Deux URL permettent à chaque assistant d'obtenir ce dont il a besoin.

Transport

Le serveur parle MCP sur Streamable HTTP, dans sa forme sans état, avec des messages JSON-RPC 2.0.

  • POST : envoyez un seul message JSON-RPC au point de terminaison. Une requête reçoit 200 avec un corps application/json. Une notification reçoit 202 sans corps.
  • Aucune session. Le serveur n'émet aucun Mcp-Session-Id et ne garde rien en mémoire d'une requête à l'autre, alors chaque requête peut recevoir une réponse à elle seule. Suivez quand même la séquence d'initialisation standard, pour que votre client fonctionne aussi avec d'autres serveurs.
  • Aucun flux d'événements. GET et DELETE répondent 405, ce qui est la bonne réponse pour un serveur qui n'a rien à pousser. OPTIONS répond 204 pour CORS.
  • Aucun lot. Envoyez un seul message par requête. Un tableau est refusé avec -32600.
  • Versions du protocole : 2025-11-25, 2025-06-18 et 2025-03-26. initialize renvoie votre version quand le serveur la parle, et la plus récente sinon. Si vous envoyez un en-tête MCP-Protocol-Version après initialize, il doit s'agir de l'une de ces versions, sinon la requête échoue avec 400.
  • Taille. Le corps d'une requête peut atteindre 256 Ko.

Le serveur répond à ces méthodes :

MéthodeRéponse
initializeLa version du protocole, les fonctionnalités offertes (tools et resources), serverInfo et des instructions d'utilisation pour le modèle. Exige params.protocolVersion.
pingUn résultat vide.
tools/listLes trois outils publics, avec leurs schémas d'entrée et de sortie.
tools/callExécute un outil.
resources/listUne ressource : le widget de fiches d'inscription.
resources/templates/listUne liste vide.
resources/readLe document du widget de fiches d'inscription.
notifications/initialized, notifications/cancelledAcceptées avec 202.

Toute autre méthode répond -32601 (méthode introuvable). Le serveur n'offre ni invites (prompts), ni journalisation, ni complétion.

serverInfo.name vaut matchai-listings, et serverInfo.version est un numéro de version sémantique. Il change quand un outil ou un champ est ajouté ou change de forme.

Accès, données et limites

  • Authentification. Aucune. /.well-known/mcp.json déclare authentication.required: false, et le serveur ne demande aucune clé, aucun jeton ni aucune connexion.
  • Données. Les inscriptions publiées, et le profil public des courtiers qui ont publié un site, une Page Matchai ou une carte professionnelle. Le numéro de téléphone et l'adresse courriel d'un courtier n'apparaissent que s'ils sont publiés sur cette carte professionnelle.
  • Ordre des résultats. Selon la pertinence pour la requête et la date de la dernière mise à jour de l'inscription. Aucun courtier ne peut payer pour changer l'ordre ou pour y figurer.
  • Limite de débit. Chaque adresse appelante peut faire 600 requêtes tools/call par minute. Au-delà, l'appel renvoie un résultat d'outil avec isError: true et un message qui vous invite à réessayer dans une minute. La limite s'applique seulement à tools/call. C'est une protection contre les abus, fixée assez haut pour qu'une plateforme d'assistant très sollicitée ne l'atteigne pas.
  • CORS. Ouvert à toutes les origines, pour que les outils qui s'exécutent dans un navigateur, comme le MCP Inspector, fonctionnent. Le serveur ne lit aucun témoin (cookie) ni aucun identifiant de connexion. Les réponses aux requêtes de pré-vérification peuvent être mises en cache pendant 24 heures.
  • Mise en cache. Les réponses sont envoyées avec Cache-Control: no-store.

Documents de découverte

Matchai publie des descriptions du serveur lisibles par machine. Toutes sont en JSON, envoient un ETag, respectent If-None-Match et autorisent les lectures multi-origines.

URLDescription
https://matchai.co/mcp/server-cardLa fiche du serveur MCP : le nom co.matchai/listings, la version, la description, le point de terminaison et les versions du protocole prises en charge. Aussi servie à /.well-known/mcp/server-card.json.
https://matchai.co/.well-known/mcp.jsonUne description plus complète : les deux points de terminaison, authentication.required: false, les outils avec leurs annotations et la ressource du widget.
https://matchai.co/.well-known/ai-catalog.jsonUn catalogue à l'échelle du domaine qui pointe vers la fiche du serveur, le document OpenAPI de l'hôte et son llms.txt.
https://matchai.co/.well-known/api-catalogUn catalogue d'API selon la RFC 9727, qui liste les points de terminaison publics.
https://matchai.co/openapi.jsonUn document OpenAPI 3.1 pour les points de terminaison publics.

Les sites de courtiers et les Pages Matchai servent leurs propres copies de ces documents. Elles pointent vers le même serveur MCP sur matchai.co.

Connecter un assistant

Forfaits et paramètres

La possibilité d'ajouter un connecteur personnalisé dépend de votre forfait et, dans un espace de travail d'équipe, de votre administrateur. Les noms des menus peuvent changer d'une version de l'application à l'autre.

Claude

Ouvrez Claude et allez dans Paramètres → Connecteurs, puis choisissez Ajouter un connecteur personnalisé.

Entrez le nom Matchai et l'URL du serveur https://matchai.co/mcp/claude.

Laissez vides les options d'authentification. Le serveur ne demande aucune connexion.

Enregistrez le connecteur, commencez une nouvelle conversation et demandez quelque chose de précis, comme « Trouvez un condo de 3 chambres à vendre à Laval à moins de 600 000 $ ». Claude appelle search_listings et affiche les résultats sous forme de fiches d'inscription.

Pour ajouter le serveur à Claude Code depuis un terminal :

claude mcp add --transport http matchai https://matchai.co/mcp

ChatGPT

Ouvrez ChatGPT et allez dans Paramètres → Applications et connecteurs → Paramètres avancés, puis activez le mode développeur.

Choisissez Créer pour ajouter un connecteur.

Entrez le nom Matchai et l'URL du serveur https://matchai.co/mcp, et ne configurez aucune authentification.

Enregistrez-le, activez le connecteur dans une nouvelle conversation et demandez des inscriptions dans vos propres mots.

Autres clients

La plupart des clients qui prennent en charge les serveurs MCP distants acceptent une URL dans un fichier de configuration :

mcp.json
{
  "mcpServers": {
    "matchai": {
      "url": "https://matchai.co/mcp"
    }
  }
}

Les clients qui demandent un type de transport doivent utiliser Streamable HTTP, sans authentification.

Appeler le serveur depuis votre propre code

Les exemples utilisent curl. Chaque requête est un seul message JSON-RPC.

Initialiser. Envoyez initialize avec la version du protocole que vous voulez.

curl -s https://matchai.co/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-11-25",
      "capabilities": {},
      "clientInfo": { "name": "my-client", "version": "0.1.0" }
    }
  }'

Une réponse abrégée :

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-11-25",
    "capabilities": { "tools": {}, "resources": {} },
    "serverInfo": {
      "name": "matchai-listings",
      "title": "Matchai",
      "version": "1.0.0",
      "websiteUrl": "https://matchai.co"
    },
    "instructions": "Matchai is a real estate platform where licensed brokers in Québec and across Canada publish their listings. …"
  }
}

Confirmer. Envoyez la notification initialized. Le serveur répond 202 sans corps.

curl -s -i https://matchai.co/mcp \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "notifications/initialized" }'

Lister les outils.

curl -s https://matchai.co/mcp \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }'

Le résultat contient un tableau tools avec search_listings, get_listing et get_professional. Chaque entrée porte un name, un title, une description, un inputSchema, un outputSchema et des annotations qui indiquent que l'outil est en lecture seule.

Appeler un outil.

curl -s https://matchai.co/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search_listings",
      "arguments": { "query": "3 bedroom condo in Laval under 600k", "limit": 3 }
    }
  }'

Le résultat contient du texte lisible dans content, des données typées dans structuredContent et un objet _meta pour le widget de fiches d'inscription. Consultez les outils publics pour la structure de chacun.

Erreurs

Les problèmes liés au message lui-même sont des erreurs JSON-RPC. Les problèmes qu'un modèle peut corriger, comme un argument erroné ou une URL qui ne correspond à aucune inscription, reviennent sous forme de résultat d'outil avec isError: true et un message que le modèle peut lire.

SituationRéponse
Le corps n'est pas du JSON valideHTTP 400, erreur -32700
Ce n'est pas un message JSON-RPC 2.0, c'est un lot, ou il n'y a aucune méthodeHTTP 400, erreur -32600
Le corps dépasse 256 KoHTTP 413, erreur -32600
En-tête MCP-Protocol-Version non pris en chargeHTTP 400, erreur -32600
Méthode inconnueHTTP 200, erreur -32601
Paramètres manquants ou invalides, ou nom d'outil inconnuHTTP 200, erreur -32602
resources/read pour un URI que le serveur n'a pasHTTP 200, erreur -32002
GET ou DELETEHTTP 405, avec Allow: POST, OPTIONS
Un argument d'outil qui échoue à la validationHTTP 200, résultat avec isError: true
Rien ne correspond à une consultation get_listing ou get_professionalHTTP 200, résultat avec isError: true
Limite de débit dépassée, ou défaillance temporaireHTTP 200, résultat avec isError: true. Réessayez sous peu.

Sur cette page