
# Mode serveur

Avec [`MCP_ENABLED=true`](/fr/docs/mcp-integration), Sovrium génère un jeu d'outils MCP à partir de votre configuration. Rien n'est exposé par défaut : une entité n'apparaît que si son schéma déclare `aiAccess`, et uniquement dans la forme que le rôle connecté a le droit de voir.

## Surfaces exposées

Quatre familles d'objets deviennent des outils.

| Surface                   | Nom d'outil                       | Ce qu'il fait                                                            |
| ------------------------- | --------------------------------- | ------------------------------------------------------------------------ |
| Tables utilisateur        | `{app}_{table}_{op}`              | Lire, lister, créer, mettre à jour, supprimer des enregistrements.       |
| Automatisations manuelles | `{app}_automation_{name}`         | Invoquer une automatisation à déclencheur manuel.                        |
| Modèles d'action          | `{app}_action_{name}`             | Exécuter un modèle d'action.                                             |
| Internes admin            | `{app}_auth_*` / `{app}_system_*` | Vues en lecture seule des tables auth et système, rôle admin uniquement. |

`tools/list` est filtré par connexion : un identifiant `viewer` n'apprend même jamais qu'un outil de suppression existe. Seules les automatisations à déclencheur manuel sont éligibles — une automatisation cron ou déclenchée par changement d'enregistrement n'a aucun appelant à exposer.

## Déclarer l'éligibilité

`aiAccess` est la déclaration d'intention de l'auteur du schéma. Elle est délibérément séparée de `MCP_ENABLED` : l'écrire n'expose rien, et l'interrupteur de l'opérateur n'expose rien que vous n'ayez écrit.

```yaml
tables:
  - name: contacts
    aiAccess: true
```

Ce booléen couvre le cas courant — exposer la table avec les valeurs par défaut. La forme objet prend le relais quand ces défauts ne conviennent pas, et **fournir un objet constitue en soi le signal d'activation** ; il n'y a pas de champ `enabled` à renseigner.

```yaml
tables:
  - name: contacts
    aiAccess:
      description: Customer contacts. Use this when the user asks about people.
      operations: [read, list, create, update]
      fieldExposure: permissioned
      annotations:
        readOnly: false
        destructive: false
```

| Propriété             | Signification                                                                                           |
| --------------------- | ------------------------------------------------------------------------------------------------------- |
| `description`         | La description d'outil que lit le modèle. Jusqu'à 2000 caractères.                                      |
| `operations`          | Sous-ensemble de `read`, `list`, `create`, `update`, `delete`. Les tables exposent les cinq par défaut. |
| `fieldExposure`       | `permissioned` (défaut), `all` ou `whitelist`.                                                          |
| `whitelistFields`     | Quels champs, quand `fieldExposure: whitelist`. Requis et non vide dans ce mode.                        |
| `annotations`         | Indications de risque — voir plus bas.                                                                  |
| `requireConfirmation` | Force l'indication destructive quel que soit le type d'opération.                                       |

Les automatisations et les modèles d'action acceptent le même bloc mais ignorent `operations` : chacun expose un unique outil d'invocation.

:::callout
**`description` est le champ au plus fort levier de cette page.** Le modèle choisit ses outils en les lisant. « Customer contacts. Use this when the user asks about people » produit un comportement nettement meilleur qu'un « Read from contacts » généré automatiquement, parce qu'il dit _quand_ recourir à l'outil et pas seulement ce qu'il touche. Investissez ici avant de régler quoi que ce soit d'autre.
:::

### Exposition des champs

| Mode           | Champs présents dans le schéma d'outil                                  |
| -------------- | ----------------------------------------------------------------------- |
| `permissioned` | Seulement ce que le rôle connecté peut lire ou écrire. Le défaut.       |
| `all`          | Tous les champs, toujours soumis au RBAC de champ au moment de l'appel. |
| `whitelist`    | Seulement les noms listés dans `whitelistFields`.                       |

`permissioned` convient presque toujours : un `viewer` et un `admin` connectés à la même table voient des schémas d'outil différents, sans que vous mainteniez deux déclarations. Recourez à `whitelist` quand une table porte des colonnes que le rôle peut lire mais qui ne regardent simplement pas l'IA.

## Annotations de risque

Les annotations sont compilées dans la définition d'outil MCP pour qu'un client décide d'exécuter un appel silencieusement ou de demander d'abord à son utilisateur. Elles correspondent une pour une aux indications du protocole :

| Annotation    | Indication MCP    | Signifie                                                          |
| ------------- | ----------------- | ----------------------------------------------------------------- |
| `readOnly`    | `readOnlyHint`    | Lecture seule — approbation automatique sans risque.              |
| `destructive` | `destructiveHint` | Détruit ou envoie quelque chose — demander d'abord.               |
| `idempotent`  | `idempotentHint`  | Appeler deux fois est sans danger ; pas d'effet de bord dupliqué. |
| `openWorld`   | `openWorldHint`   | Sort de l'application — API externe, appel réseau.                |

Non renseignées, des valeurs raisonnables sont déduites du type d'opération, et `MCP_CONFIRM_DESTRUCTIVE` (actif par défaut) marque en outre les outils de suppression et les automatisations non idempotentes comme destructifs.

Le cas qui mérite un réglage manuel est l'automatisation techniquement idempotente mais pratiquement irréversible — envoyer un courriel, débiter une carte. `requireConfirmation: true` force l'indication destructive sur celles-là, quoi qu'impliquerait le type d'opération.

## Pages associées

- [Présentation de MCP](/fr/docs/mcp-integration) — activer le serveur.
- [Connecter un client](/fr/docs/mcp-clients) — y diriger un assistant.
- [Authentification, RBAC et limites](/fr/docs/mcp-security) — l'application derrière le filtrage.
- [Vue d'ensemble des tables](/fr/docs/tables-overview) — où se place `aiAccess` sur une table.
- [Actions](/fr/docs/automation-actions-overview) — les modèles d'action en tant qu'outils.
