# Serveur MCP

> Connectez Claude Code, Cursor et d'autres outils d'IA à votre compte intoCHAT via son serveur MCP distant : le point de terminaison, les clés API et scopes, la configuration de chaque client, les outils et les limites.

intoCHAT dispose d'un serveur MCP distant. MCP (Model Context Protocol) est la méthode standard qui permet aux outils d'IA comme Claude Code et Cursor de se connecter à d'autres services. Une fois le vôtre connecté, vous pouvez lui demander en langage courant de lister vos agents, de lire leurs conversations et leurs leads, d'ajouter des extraits de texte et des paires de questions-réponses, de supprimer des sources ou d'envoyer un message de test à un agent, et il appelle intoCHAT pour vous.

Le serveur MCP utilise les mêmes clés API, scopes, offre et limite de débit que l'[API REST](/fr/docs/rest-api), et ses outils font exactement ce que font les points de terminaison REST correspondants.

## Point de terminaison

```text
https://www.intochat.ai/api/mcp
```

Le serveur utilise le transport Streamable HTTP. Chaque requête doit porter votre clé API dans l'en-tête `Authorization` :

```text
Authorization: Bearer ic_live_YOUR_KEY
```

Utilisez l'adresse avec `www`, comme ci-dessus.

> La connexion par OAuth n'est pas encore prise en charge. Les clients qui ne peuvent se connecter que par OAuth, comme les connecteurs personnalisés de Claude.ai et de l'application de bureau Claude, ou les connecteurs de ChatGPT, ne peuvent pas utiliser le serveur pour l'instant. Les clients qui permettent de définir un en-tête fonctionnent : Claude Code, Cursor, le MCP Inspector, et l'application de bureau Claude via un pont local (voir [Autres clients](#autres-clients)).

## Avant de commencer

Le serveur MCP est inclus dans les offres **Starter**, **Pro** et **Enterprise**, comme l'API REST. Avec l'offre **Free**, vous ne pouvez pas créer de clés API, et un compte qui repasse à l'offre Free reçoit une erreur à chaque requête jusqu'à ce qu'il soit de nouveau sur Starter ou une offre supérieure.

Il vous faut une clé API. Seuls le propriétaire du compte et les admins peuvent en créer une.

## Créer une clé API

1. Dans la barre latérale, sous **Settings**, cliquez sur **API keys**.
2. Sous **Create a key**, donnez à la clé un **Name**, par exemple `Claude Code`.
3. Sous **Access**, choisissez ce que l'outil d'IA peut faire. **Every scope, including ones added later** autorise tous les outils. Pour le limiter à la lecture, choisissez **Only the scopes I choose** et cochez uniquement les scopes `:read`. Consultez [Outils](#outils) pour le scope dont chaque outil a besoin.
4. Cliquez sur **Create key**, puis sur **Copy**, et cliquez sur **I've saved it**. La clé ne s'affiche qu'une seule fois.

Une clé fonctionne pour tous les agents du compte. Traitez-la comme un mot de passe : ne la mettez pas dans des fichiers que vous commitez ou partagez, et révoquez-la sur la page **API keys** si quelqu'un d'autre pourrait la connaître. Pour en savoir plus, consultez [Créer une clé API](/fr/docs/rest-api#creer-une-cle-api) dans la documentation de l'API REST.

## Connecter Claude Code

Exécutez ceci dans un terminal, en remplaçant `ic_live_YOUR_KEY` par votre clé :

```bash
claude mcp add --transport http intochat https://www.intochat.ai/api/mcp \
  --header "Authorization: Bearer ic_live_YOUR_KEY"
```

Cela ajoute le serveur pour le projet en cours, sur votre ordinateur uniquement. Pour l'utiliser dans tous vos projets, ajoutez `--scope user` avant `--transport`.

Pour partager la configuration avec votre équipe dans le fichier `.mcp.json` du projet sans la clé elle-même, lisez la clé depuis une variable d'environnement :

```json
{
  "mcpServers": {
    "intochat": {
      "type": "http",
      "url": "https://www.intochat.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${INTOCHAT_API_KEY}"
      }
    }
  }
}
```

Tapez ensuite `/mcp` dans Claude Code pour vérifier que **intochat** est connecté, puis demandez par exemple : « List my intoCHAT agents. »

## Connecter Cursor

Dans les réglages de Cursor, ouvrez la section MCP et ajoutez un serveur, ou modifiez `~/.cursor/mcp.json` (tous les projets) ou `.cursor/mcp.json` dans un projet :

```json
{
  "mcpServers": {
    "intochat": {
      "url": "https://www.intochat.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ic_live_YOUR_KEY"
      }
    }
  }
}
```

Les outils intoCHAT apparaissent alors dans la liste des outils MCP, et l'agent de Cursor peut les utiliser.

## Autres clients

Tout client MCP qui prend en charge le transport Streamable HTTP et permet d'ajouter un en-tête peut se connecter. Indiquez-lui le [point de terminaison](#point-de-terminaison) et l'en-tête `Authorization`.

**Application de bureau Claude.** Ses réglages **Connectors** nécessitent OAuth, qui n'est pas encore pris en charge. Ajoutez plutôt le serveur à `claude_desktop_config.json` via le pont open source `mcp-remote`, qui nécessite Node.js sur votre ordinateur :

```json
{
  "mcpServers": {
    "intochat": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://www.intochat.ai/api/mcp", "--header", "Authorization:${INTOCHAT_AUTH}"],
      "env": {
        "INTOCHAT_AUTH": "Bearer ic_live_YOUR_KEY"
      }
    }
  }
}
```

**MCP Inspector.** Exécutez `npx @modelcontextprotocol/inspector`, choisissez **Streamable HTTP**, saisissez le point de terminaison et ajoutez l'en-tête `Authorization`. Connectez-vous via le proxy de l'Inspector : le serveur refuse les requêtes envoyées directement depuis une page web d'un autre site.

**Tester avec curl.** Chaque requête est un message JSON-RPC dans un POST :

```bash
curl https://www.intochat.ai/api/mcp \
  -H "Authorization: Bearer ic_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
```

Le serveur parle les versions MCP `2026-07-28` et `2025-03-26` à `2025-11-25`, répond à chaque requête en JSON et ne conserve aucune session entre les requêtes.

## Outils

| Outil | Scope | Ce qu'il fait |
| --- | --- | --- |
| `list_agents` | `agents:read` | Liste les agents du compte avec leurs identifiants, leur statut d'entraînement et leurs compteurs. |
| `get_agent` | `agents:read` | Obtient un agent. |
| `chat_with_agent` | `chat` | Envoie un message à un agent et renvoie sa réponse. Chaque réponse compte comme un message de votre offre. |
| `list_conversations` | `conversations:read` | Liste les conversations d'un agent, les plus récentes en premier, sans transcriptions. |
| `get_conversation` | `conversations:read` | Obtient une conversation avec sa transcription. |
| `list_leads` | `leads:read` | Liste les leads collectés par un agent, les plus récents en premier. |
| `list_contacts` | `leads:read` | Liste les [contacts](/fr/docs/contacts) d'un agent, les plus récents en premier, ou en recherche un par `email` ou `external_id`. |
| `upsert_contact` | `contacts:write` | Crée ou met à jour un contact par `external_id`, sinon par `email`, avec `phone`, `name` et `attributes` (un objet ; `null` retire un attribut). |
| `list_sources` | `sources:read` | Liste les sources de connaissances d'un agent, la progression de son entraînement et les caractères qu'il utilise. |
| `add_text_source` | `sources:write` | Ajoute un extrait de texte avec un titre et lance l'entraînement. |
| `add_qa_pair` | `sources:write` | Ajoute une question et sa réponse et lance l'entraînement. Si l'agent a déjà la même question, sa réponse est remplacée. |
| `delete_source` | `sources:write` | Supprime une source et ce que l'agent en a appris. Cette action est irréversible. |

Chaque outil renvoie les mêmes données que son point de terminaison REST, en JSON. `list_conversations`, `list_leads` et `list_contacts` acceptent `limit` (de 1 à 100), `cursor` et `since`, tous facultatifs, comme décrit sous [Pagination](/fr/docs/rest-api#pagination).

Les outils sont marqués comme en lecture seule ou non, et `delete_source`, `add_qa_pair` et `upsert_contact` comme pouvant modifier ce qui existe déjà, pour que votre outil d'IA puisse vous demander votre accord avant de les utiliser. De nombreux outils d'IA demandent votre confirmation avant d'exécuter n'importe quel outil.

Si la clé n'a pas le scope dont un outil a besoin, l'outil répond par une erreur qui nomme le scope, et rien ne se passe. Un agent, une conversation ou une source d'un autre compte est « introuvable », comme un élément qui n'existe pas.

Il n'existe pas d'outils pour créer des agents ni pour modifier leurs réglages ou leurs instructions. Faites-le dans le tableau de bord.

## Discuter avec un agent

`chat_with_agent` envoie un vrai message, auquel répond le même code que le widget de chat, à partir des connaissances, des instructions et des actions de l'agent. Utilisez-le pour tester la façon dont un agent répond.

- Chaque réponse compte comme un message de votre offre et dans le [plafond mensuel de messages](/fr/docs/limits-and-access#plafond-mensuel-de-messages) de l'agent, si vous en avez défini un. Consultez [Ce qui compte comme message](/fr/docs/plans-and-limits#ce-qui-compte-comme-message).
- Omettez `conversationId` pour démarrer une nouvelle conversation. Pour en poursuivre une, transmettez le `conversationId` de la réponse précédente.
- Les conversations apparaissent dans l'onglet **Conversations** de l'agent comme toutes les autres.
- Un agent privé n'est pas joignable de cette façon. Consultez [Agents privés](/fr/docs/allowed-domains#agents-prives).

Demandez à votre outil d'IA de ne pas envoyer de nombreux messages à la suite, sauf si c'est voulu : chacun consomme les messages de votre offre.

## Limites

- **Offre :** Starter, Pro ou Enterprise. Avec l'offre Free, les requêtes sont refusées.
- **Limite de débit :** 60 requêtes par minute et par clé, partagées avec l'API REST. La connexion prend quelques requêtes, tout comme chaque appel d'outil. Au-delà de la limite, les requêtes sont refusées jusqu'à la fin de la minute. Une clé distincte pour votre outil d'IA l'empêche d'utiliser les requêtes de votre serveur.
- **Messages :** chaque réponse de `chat_with_agent` compte comme un message de votre offre. Une réponse doit se terminer en 55 secondes.
- **Connexion :** clés API uniquement. OAuth n'est pas encore pris en charge : les clients qui en ont besoin ne peuvent donc pas se connecter.
- **Sources :** extraits de texte et paires de questions-réponses uniquement. Ajoutez les pages de site, les fichiers et les pages Notion dans le tableau de bord.
- **Pas de mises à jour en direct :** le serveur répond à chaque requête et n'envoie pas de notifications.

Si votre client n'arrive pas à se connecter, vérifiez l'erreur qu'il affiche : une clé invalide ou révoquée est refusée avec `401`, un compte sur l'offre Free avec `403`, et un trop grand nombre de requêtes avec `429`.

## Étapes suivantes

- Appelez intoCHAT depuis votre propre code : [API REST](/fr/docs/rest-api).
- Recevez les leads et les transferts sur votre serveur au moment où ils se produisent : [Webhooks](/fr/docs/webhooks).
- Rédigez de bons extraits de texte et de bonnes paires de questions-réponses : [Texte et questions-réponses](/fr/docs/text-and-qa).
