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
| URL | Utilisation |
|---|---|
https://matchai.co/mcp | Le 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/claude | Le même serveur, pour les applications Claude, afin que les fiches d'inscription s'affichent dans la conversation. |
https://matchai.co/mcp/server-card | Une 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
200avec un corpsapplication/json. Une notification reçoit202sans corps. - Aucune session. Le serveur n'émet aucun
Mcp-Session-Idet 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.
GETetDELETErépondent405, ce qui est la bonne réponse pour un serveur qui n'a rien à pousser.OPTIONSrépond204pour CORS. - Aucun lot. Envoyez un seul message par requête. Un tableau est refusé avec
-32600. - Versions du protocole :
2025-11-25,2025-06-18et2025-03-26.initializerenvoie votre version quand le serveur la parle, et la plus récente sinon. Si vous envoyez un en-têteMCP-Protocol-Versionaprèsinitialize, il doit s'agir de l'une de ces versions, sinon la requête échoue avec400. - Taille. Le corps d'une requête peut atteindre 256 Ko.
Le serveur répond à ces méthodes :
| Méthode | Réponse |
|---|---|
initialize | La version du protocole, les fonctionnalités offertes (tools et resources), serverInfo et des instructions d'utilisation pour le modèle. Exige params.protocolVersion. |
ping | Un résultat vide. |
tools/list | Les trois outils publics, avec leurs schémas d'entrée et de sortie. |
tools/call | Exécute un outil. |
resources/list | Une ressource : le widget de fiches d'inscription. |
resources/templates/list | Une liste vide. |
resources/read | Le document du widget de fiches d'inscription. |
notifications/initialized, notifications/cancelled | Accepté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.jsondéclareauthentication.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/callpar minute. Au-delà, l'appel renvoie un résultat d'outil avecisError: trueet 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.
| URL | Description |
|---|---|
https://matchai.co/mcp/server-card | La 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.json | Une 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.json | Un 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-catalog | Un catalogue d'API selon la RFC 9727, qui liste les points de terminaison publics. |
https://matchai.co/openapi.json | Un 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/mcpChatGPT
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 :
{
"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.
| Situation | Réponse |
|---|---|
| Le corps n'est pas du JSON valide | HTTP 400, erreur -32700 |
| Ce n'est pas un message JSON-RPC 2.0, c'est un lot, ou il n'y a aucune méthode | HTTP 400, erreur -32600 |
| Le corps dépasse 256 Ko | HTTP 413, erreur -32600 |
En-tête MCP-Protocol-Version non pris en charge | HTTP 400, erreur -32600 |
| Méthode inconnue | HTTP 200, erreur -32601 |
| Paramètres manquants ou invalides, ou nom d'outil inconnu | HTTP 200, erreur -32602 |
resources/read pour un URI que le serveur n'a pas | HTTP 200, erreur -32002 |
GET ou DELETE | HTTP 405, avec Allow: POST, OPTIONS |
| Un argument d'outil qui échoue à la validation | HTTP 200, résultat avec isError: true |
Rien ne correspond à une consultation get_listing ou get_professional | HTTP 200, résultat avec isError: true |
| Limite de débit dépassée, ou défaillance temporaire | HTTP 200, résultat avec isError: true. Réessayez sous peu. |
Se connecter avec MatchaiBientôt disponible
Laissez un professionnel connecter son compte Matchai à votre application avec OAuth 2.1 et PKCE. Points de terminaison, autorisation, jetons, code TypeScript.
Outils publics
Référence des outils MCP de Matchai search_listings, get_listing et get_professional. Entrées, sorties, exemples et widget de fiches d'inscription.