Ne saisissez pas de données personnelles, comme le nom d'un client.
Connecter un agent d'IA (MCP)
Connectez Claude, ChatGPT, Cursor ou votre propre agent à votre workspace professionnel via MCP, pour qu'il prépare des formulaires DS-160 à partir des documents d'un client et envoie des liens clients.
L’agent d’IA d’un cabinet d’immigration peut travailler dans son workspace DS160.io via MCP (Model Context Protocol). À partir des documents ou des e-mails d’un client, l’agent peut créer un formulaire, remplir les réponses qu’il trouve, vérifier ce qui manque encore et envoyer au client un lien pour compléter le reste. Votre équipe vérifie ensuite la demande et la signe elle-même sur le CEAC.
L’agent se connecte à un seul workspace professionnel et ne peut faire que ce que vous lui permettez. Chacune de ses actions est aussi un endpoint de l’API de DS160.io.
Avant de commencer
- Un workspace professionnel. MCP est disponible sur les workspaces de type Business.
- Un accès Propriétaire ou Administrateur. Seuls les Propriétaires et Administrateurs d’un workspace peuvent créer des clés d’API ou autoriser une connexion.
- Un client MCP. Claude Code, Cursor, VS Code, Codex et Windsurf se connectent avec une clé d’API. claude.ai et ChatGPT se connectent en se connectant à DS160.io.
L’adresse du serveur est :
https://www.ds160.io/api/mcp
Utilisez cette adresse même si votre workspace a son propre domaine.
Se connecter avec une clé d’API
- Ouvrez Paramètres du workspace → Équipe et accès → Clés d’API et cliquez sur Créer une clé d’API.
- Nommez la clé d’après l’agent (par exemple Claude Code, équipe d’accueil), choisissez le préréglage MCP et créez la clé. Le préréglage coche tous les scopes sauf
runs:write; décochez ceux dont l’agent n’a pas besoin. - Copiez le secret. Il commence par
ds160_sk_et n’est affiché qu’une seule fois. - Ajoutez le serveur à votre client avec le secret dans un en-tête
Authorization. Dans Claude Code :
claude mcp add --transport http ds160 https://www.ds160.io/api/mcp --header "Authorization: Bearer ds160_sk_…"
Les autres clients prennent la même adresse et le même en-tête dans leurs paramètres. Dans Cursor (.cursor/mcp.json) :
{
"mcpServers": {
"ds160": {
"url": "https://www.ds160.io/api/mcp",
"headers": { "Authorization": "Bearer ds160_sk_…" }
}
}
}
Dans VS Code (.vscode/mcp.json), ajoutez les mêmes url et headers sous "servers" avec "type": "http". Ne laissez pas le secret dans des fichiers que vous versionnez : utilisez les variables d’environnement ou les entrées secrètes de votre client lorsqu’il en propose.
Connecter claude.ai ou ChatGPT
claude.ai et ChatGPT n’envoient pas de clé. Ils se connectent plutôt en se connectant à DS160.io :
- Dans claude.ai ou ChatGPT, ajoutez
https://www.ds160.io/api/mcpcomme connecteur personnalisé. - Lorsque c’est demandé, connectez-vous à DS160.io avec votre propre compte.
- Choisissez le workspace professionnel dans lequel l’agent travaillera.
- Vérifiez les autorisations demandées, puis cliquez pour autoriser.
L’agent agit alors en votre nom, dans ce workspace. Vous devez être Propriétaire ou Administrateur du workspace pour autoriser une connexion.
Scopes : ce que chacun permet
| Scope | Ce que l’agent peut faire |
|---|---|
forms:read | Lister les formulaires, lire le nom et le statut d’un formulaire, vérifier ce qui manque, suivre une soumission |
forms:write | Créer des formulaires (et les lire) |
forms:clone | Copier un formulaire existant dans un nouveau |
client-links:write | Créer des liens clients à envoyer aux demandeurs |
answers:read | Lire les réponses d’un formulaire |
answers:write | Écrire et supprimer les réponses d’un formulaire |
runs:write | Lancer une soumission sur le CEAC et la suivre |
answers:read fait sortir de DS160.io les données personnelles des demandeurs. Les noms, dates de naissance, numéros de passeport, historiques de voyage et toutes les autres réponses du DS-160 que lit l’agent sont transmis à l’agent et à celui qui le fait fonctionner, par exemple un fournisseur d’IA. Votre workspace, en tant que responsable du traitement des données de ses clients, décide si cela est autorisé, et est responsable de ces données une fois qu’elles ont quitté DS160.io (voir la politique de confidentialité et l’Accord de traitement des données). Si l’agent n’a besoin que de remplir des formulaires, ne lui donnez pas answers:read : avec answers:write seul, il peut écrire des réponses sans les relire.
Ce que l’agent peut et ne peut pas faire
- Il peut préparer un formulaire : le créer, remplir les réponses à partir de ce que le client a envoyé, voir quelles questions manquent encore ou seraient refusées, et envoyer au client un lien pour le reste.
- Chaque réponse qu’il écrit est contrôlée comme l’éditeur de formulaires la contrôle. Le texte est enregistré en majuscules sauf si la question accepte des lettres hors de l’alphabet anglais. Une réponse qui ne convient pas est refusée avec un motif, sans effet sur le reste du lot.
- Chaque modification est enregistrée. L’historique des modifications du formulaire affiche chaque modification sous la forme “API key nom” pour une clé, ou “membre via agent” pour une connexion.
- Il ne peut ni signer ni soumettre. Une soumission lancée par un agent s’arrête toujours avant la signature, quel que soit le paramètre du workspace : une personne vérifie la demande et la signe sur le CEAC (voir Relire un DS-160 sur le CEAC avant la signature).
- Il ne peut pas saisir les captchas du CEAC. Une personne les saisit dans DS160.io pendant que la soumission attend ; la soumission indique à l’agent quand quelqu’un est nécessaire, et où.
- La création d’un formulaire est facturée comme dans l’application : chaque formulaire créé, ou cloné, compte comme un formulaire créé.
- Il ne travaille que dans son propre workspace. Il ne peut pas voir les autres workspaces, et un formulaire d’un autre workspace est signalé comme introuvable.
Outils
| Outil | Ce qu’il fait | Scope |
|---|---|---|
list_forms | Liste les formulaires du workspace, du plus récent au plus ancien | forms:read |
get_form | Lit le nom, le statut et le consentement d’un formulaire | forms:read |
create_form | Crée un formulaire (facturé par formulaire créé) | forms:write |
clone_form | Copie un formulaire dans un nouveau, en omettant éventuellement des sections | forms:clone |
create_client_link | Crée un lien client pour un formulaire | client-links:write |
search_docs | Recherche dans cette documentation, 200 recherches par jour par clé ou par connexion | tous |
describe_form_pages | Liste les pages du formulaire et chaque question : son chemin de réponse, son type, si elle est obligatoire, les valeurs des listes déroulantes et les questions qu’ouvre chaque réponse, avec le JSON de chaque type de réponse | tous |
get_answers | Lit les réponses d’un formulaire, pour tout le formulaire ou une seule page | answers:read |
set_answers | Écrit jusqu’à 200 réponses par appel, dans l’ordre : chacune est écrite, supprimée (valeur null) ou refusée avec un code et un motif | answers:write |
get_form_progress | Pour chaque section : son statut, les questions obligatoires sans réponse et les problèmes par chemin ; et si le formulaire est complet | forms:read, answers:read ou answers:write |
start_run | Lance une soumission sur le CEAC pour le consulat choisi ; s’arrête avant la signature | runs:write |
get_run | Le statut d’une soumission, un résumé de son avancement, si une personne est nécessaire, et le lien vers elle | runs:write ou forms:read |
Révoquer l’accès
- Une clé : révoquez-la sous Paramètres du workspace → Équipe et accès → Clés d’API. L’appel suivant de l’agent est refusé.
- Une connexion (claude.ai, ChatGPT) : révoquez-la dans Compte et sécurité, ou pour tout le workspace dans Paramètres du workspace. Les deux listent les connexions existantes.
Révoquez immédiatement si une clé a pu fuiter ou si un agent n’est plus utilisé.
Limitez l’agent à ce que le demandeur a fourni
Un DS-160 est signé par le demandeur, qui déclare que chaque réponse est exacte. Demandez à votre agent de ne répondre qu’à partir de ce que le demandeur vous a fourni (ses documents, ses e-mails et ses réponses) et de ne jamais deviner ni inventer une réponse. En cas de doute, il doit laisser la question vide, afin que get_form_progress l’affiche comme manquante et que le client ou votre équipe y réponde. Relisez le formulaire avant que quiconque le signe.
Dépannage
| Problème | Que faire |
|---|---|
Le client indique qu’il ne peut pas se connecter, ou reçoit 401 | Vérifiez que l’adresse est https://www.ds160.io/api/mcp et que l’en-tête est Authorization: Bearer <secret>, avec le secret complet. Une clé révoquée ne peut pas être réutilisée : créez-en une nouvelle. |
| Un outil indique qu’un scope manque | La clé ou la connexion n’a pas ce scope. Créez une clé qui l’a (ou reconnectez-vous et autorisez-le), puis révoquez l’ancienne. |
| Une réponse est refusée | Lisez son motif. Utilisez describe_form_pages pour obtenir le bon chemin et les valeurs qu’accepte une liste déroulante. |
start_run est refusé | get_form_progress liste ce qui manque ou est incorrect dans chaque section. Complétez-le, puis relancez la soumission. Si une soumission du formulaire est déjà en cours, suivez-la avec get_run. |
La soumission attend avec needsPerson | Quelqu’un ouvre le lien de la soumission dans DS160.io et saisit le captcha. Une fois la soumission prête à signer, quelqu’un vérifie la demande et la signe sur le CEAC. |