---
title: "Serveur MCP"
description: "Connectez un assistant IA au serveur MCP de Matchai. Points de terminaison, transport, limites et configuration pour Claude, ChatGPT et les autres clients."
last_updated: "2026-10-21"
lang: "fr-CA"
canonical: "https://matchai.co/docs/fr/developers/mcp-server"
---

# 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.

Source: https://matchai.co/docs/fr/developers/mcp-server

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 [#endpoints]

| 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. |

<Callout title="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.
</Callout>

## Transport [#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é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](https://matchai.co/docs/fr/developers/mcp-server/public-tools), 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 [#access-data-and-limits]

- **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 [#discovery-documents]

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 [#connect-an-assistant]

<Callout title="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.
</Callout>

### Claude [#claude]

<Steps>
<Step>

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

</Step>
<Step>

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

</Step>
<Step>

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

</Step>
<Step>

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.

</Step>
</Steps>

Pour ajouter le serveur à Claude Code depuis un terminal :

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

### ChatGPT [#chatgpt]

<Steps>
<Step>

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

</Step>
<Step>

Choisissez **Créer** pour ajouter un connecteur.

</Step>
<Step>

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

</Step>
<Step>

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

</Step>
</Steps>

### Autres clients [#other-clients]

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

```json title="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 [#call-the-server-from-your-own-code]

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

<Steps>
<Step>

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

```bash
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 :

```json
{
  "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. …"
  }
}
```

</Step>
<Step>

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

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

</Step>
<Step>

**Lister les outils.**

```bash
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.

</Step>
<Step>

**Appeler un outil.**

<Tabs items={['curl', 'JavaScript']}>
<Tab value="curl">

```bash
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 }
    }
  }'
```

</Tab>
<Tab value="JavaScript">

```js
async function rpc(method, params, id = 1) {
  const response = await fetch('https://matchai.co/mcp', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/json, text/event-stream',
    },
    body: JSON.stringify({ jsonrpc: '2.0', id, method, params }),
  });
  return response.json();
}

const { result } = await rpc('tools/call', {
  name: 'search_listings',
  arguments: { query: '3 bedroom condo in Laval under 600k', limit: 3 },
});

if (result.isError) throw new Error(result.content[0].text);
for (const listing of result.structuredContent.listings) {
  console.log(`${listing.title} - ${listing.priceText} - ${listing.url}`);
}
```

</Tab>
</Tabs>

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](https://matchai.co/docs/fr/developers/mcp-server/public-tools) pour la structure de chacun.

</Step>
</Steps>

## Erreurs [#errors]

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. |

<Cards>
  <Card title="Outils publics" href="https://matchai.co/docs/fr/developers/mcp-server/public-tools">
    Entrées, sorties et exemples pour chaque outil, ainsi que le widget de fiches d'inscription.
  </Card>
  <Card title="Recherche d'inscriptions" href="https://matchai.co/docs/fr/developers/listing-search">
    La même recherche, sous forme de point de terminaison HTTP simple, sans MCP.
  </Card>
  <Card title="Pages lisibles par l'IA" href="https://matchai.co/docs/fr/developers/agent-readable-pages">
    Comment chaque site Matchai se décrit aux assistants IA.
  </Card>
</Cards>

## Sitemap

- [Toutes les pages de la documentation Matchai](https://matchai.co/docs/sitemap.md)
- [llms.txt](https://matchai.co/docs/fr/llms.txt)
