Typ geen persoonsgegevens, zoals de naam van een klant.
Een AI-agent koppelen (MCP)
Koppel Claude, ChatGPT, Cursor of uw eigen agent via MCP aan uw zakelijke werkruimte, zodat die DS-160-formulieren voorbereidt uit documenten van een klant en client-links verstuurt.
De eigen AI-agent van een immigratiekantoor kan via MCP (het Model Context Protocol) in de DS160.io-werkruimte van het kantoor werken. Uit de documenten of e-mails van een klant kan de agent een formulier aanmaken, de antwoorden invullen die hij vindt, controleren wat er nog ontbreekt en de klant een link sturen om de rest in te vullen. Uw medewerkers controleren daarna de aanvraag en ondertekenen die zelf op CEAC.
De agent wordt aan één zakelijke werkruimte gekoppeld en kan alleen doen wat u toestaat. Alles wat hij kan doen is ook een endpoint van de DS160.io-API.
Voordat u begint
- Een zakelijke werkruimte. MCP is beschikbaar voor Business-werkruimtes.
- Toegang als Eigenaar of Beheerder. Alleen Eigenaren en Beheerders van de werkruimte kunnen API-sleutels aanmaken of een koppeling toestaan.
- Een MCP-client. Claude Code, Cursor, VS Code, Codex en Windsurf koppelen met een API-sleutel. claude.ai en ChatGPT koppelen door in te loggen bij DS160.io.
Het adres van de server is:
https://www.ds160.io/api/mcp
Gebruik dit adres ook als uw werkruimte een eigen domein heeft.
Koppelen met een API-sleutel
- Open Werkruimte-instellingen → Team en toegang → API-sleutels en klik op API-sleutel aanmaken.
- Noem de sleutel naar de agent (bijvoorbeeld Claude Code, intaketeam), kies de voorinstelling MCP en maak de sleutel aan. De voorinstelling vinkt elke scope aan behalve
runs:write; vink elke scope uit die de agent niet nodig heeft. - Kopieer het secret. Het begint met
ds160_sk_en wordt maar één keer getoond. - Voeg de server toe aan uw client, met het secret in een
Authorization-header. In Claude Code:
claude mcp add --transport http ds160 https://www.ds160.io/api/mcp --header "Authorization: Bearer ds160_sk_…"
Andere clients nemen hetzelfde adres en dezelfde header op in hun instellingen. In Cursor (.cursor/mcp.json):
{
"mcpServers": {
"ds160": {
"url": "https://www.ds160.io/api/mcp",
"headers": { "Authorization": "Bearer ds160_sk_…" }
}
}
}
In VS Code (.vscode/mcp.json) voegt u dezelfde url en headers toe onder "servers", met "type": "http". Zet het secret niet in bestanden die u commit: gebruik omgevingsvariabelen of geheime invoervelden als uw client die ondersteunt.
claude.ai of ChatGPT koppelen
claude.ai en ChatGPT sturen geen sleutel. Zij koppelen in plaats daarvan door in te loggen bij DS160.io:
- Voeg in claude.ai of ChatGPT
https://www.ds160.io/api/mcptoe als aangepaste connector. - Log in bij DS160.io met uw eigen account wanneer daarom wordt gevraagd.
- Kies de zakelijke werkruimte waarin de agent gaat werken.
- Bekijk de rechten die worden gevraagd en klik om ze toe te staan.
De agent handelt daarna namens u, in die werkruimte. U moet Eigenaar of Beheerder van de werkruimte zijn om een koppeling toe te staan.
Scopes: wat elke scope toestaat
| Scope | Wat de agent kan doen |
|---|---|
forms:read | Formulieren opsommen, de naam en status van een formulier lezen, controleren wat er ontbreekt, een indiening volgen |
forms:write | Formulieren aanmaken (en lezen) |
forms:clone | Een bestaand formulier naar een nieuw formulier kopiëren |
client-links:write | Client-links aanmaken om naar aanvragers te sturen |
answers:read | De antwoorden van een formulier lezen |
answers:write | De antwoorden van een formulier schrijven en verwijderen |
runs:write | Een indiening bij CEAC starten en volgen |
answers:read haalt persoonsgegevens van aanvragers uit DS160.io. Namen, geboortedata, paspoortnummers, reisgeschiedenis en elk ander DS-160-antwoord dat de agent leest, gaan naar de agent en naar wie hem draait, zoals een AI-aanbieder. Uw werkruimte beslist als verwerkingsverantwoordelijke voor de gegevens van haar klanten of dat mag, en is verantwoordelijk voor die gegevens zodra ze DS160.io hebben verlaten (zie het privacybeleid en de verwerkersovereenkomst). Als de agent alleen formulieren hoeft in te vullen, laat answers:read dan weg: met alleen answers:write kan hij antwoorden schrijven zonder ze terug te lezen.
Wat de agent wel en niet kan
- Hij kan een formulier voorbereiden: het aanmaken, antwoorden invullen uit wat de klant heeft gestuurd, zien welke vragen nog ontbreken of geweigerd zouden worden, en de klant een link sturen voor de rest.
- Elk antwoord dat hij schrijft wordt gecontroleerd zoals de formuliereditor het controleert. Tekst wordt in hoofdletters opgeslagen, tenzij de vraag letters buiten het Engelse alfabet toestaat. Een antwoord dat niet past, wordt met een reden geweigerd, en de rest van de batch blijft onaangetast.
- Elke wijziging wordt vastgelegd. De veldgeschiedenis van het formulier toont elke wijziging als “API-sleutel naam” voor een sleutel, of als “lid via agent” voor een koppeling.
- Hij kan niet ondertekenen of indienen. Een indiening die een agent start, stopt altijd vóór ondertekening, wat de instelling van de werkruimte ook is: een persoon controleert de aanvraag en ondertekent die op CEAC (zie Een DS-160 op CEAC controleren vóór ondertekening).
- Hij kan de captcha’s van CEAC niet typen. Een persoon typt ze in DS160.io terwijl de indiening wacht; de indiening laat de agent weten wanneer en waar iemand nodig is.
- Een formulier aanmaken wordt gefactureerd zoals in de app: elk aangemaakt of gekloond formulier telt als een aangemaakt formulier.
- Hij werkt alleen in zijn eigen werkruimte. Hij ziet geen andere werkruimtes, en een formulier uit een andere werkruimte wordt als niet gevonden gemeld.
Tools
| Tool | Wat hij doet | Scope |
|---|---|---|
list_forms | Somt de formulieren van de werkruimte op, nieuwste eerst | forms:read |
get_form | Leest de naam, status en toestemming van één formulier | forms:read |
create_form | Maakt een formulier aan (gefactureerd per aangemaakt formulier) | forms:write |
clone_form | Kopieert een formulier naar een nieuw formulier, eventueel zonder bepaalde secties | forms:clone |
create_client_link | Maakt een client-link voor een formulier | client-links:write |
search_docs | Doorzoekt deze documentatie, 200 zoekopdrachten per dag per sleutel of koppeling | elke |
describe_form_pages | Somt de pagina’s van het formulier en elke vraag op: het pad van het antwoord, het type, of de vraag verplicht is, de waarden van keuzelijsten en de vragen die elk antwoord opent, met de JSON voor elk type antwoord | elke |
get_answers | Leest de antwoorden van een formulier, voor het hele formulier of één pagina | answers:read |
set_answers | Schrijft tot 200 antwoorden per aanroep, in volgorde: elk wordt geschreven, verwijderd (waarde null) of geweigerd met een code en reden | answers:write |
get_form_progress | Per sectie: de status, de verplichte vragen zonder antwoord en de problemen per pad; en of het formulier compleet is | forms:read, answers:read of answers:write |
start_run | Start een indiening bij CEAC voor een gekozen consulaat; stopt vóór ondertekening | runs:write |
get_run | De status van een indiening, een samenvatting van waar die is, of er een persoon nodig is, en de link ernaartoe | runs:write of forms:read |
Toegang intrekken
- Een sleutel: trek hem in onder Werkruimte-instellingen → Team en toegang → API-sleutels. De volgende aanroep van de agent wordt geweigerd.
- Een koppeling (claude.ai, ChatGPT): trek die in onder Account en beveiliging, of voor de hele werkruimte in de Werkruimte-instellingen. Beide tonen de koppelingen die er zijn.
Trek de toegang meteen in als een sleutel mogelijk is uitgelekt of een agent niet meer wordt gebruikt.
Houd de agent bij wat de aanvrager heeft gegeven
Een DS-160 wordt ondertekend door de aanvrager, die verklaart dat elk antwoord waar is. Laat uw agent alleen antwoorden op basis van wat de aanvrager u heeft gegeven (zijn documenten, e-mails en antwoorden), en nooit een antwoord raden of verzinnen. Als hij niet zeker is, moet hij de vraag leeg laten, zodat get_form_progress die als ontbrekend toont en de klant of uw medewerkers hem beantwoorden. Controleer het formulier voordat iemand het ondertekent.
Problemen oplossen
| Probleem | Wat te doen |
|---|---|
De client kan geen verbinding maken, of krijgt 401 | Controleer of het adres https://www.ds160.io/api/mcp is en de header Authorization: Bearer <secret>, met het volledige secret. Een ingetrokken sleutel kan niet opnieuw worden gebruikt: maak een nieuwe aan. |
| Een tool meldt dat een scope ontbreekt | De sleutel of koppeling heeft die scope niet. Maak een sleutel met die scope (of koppel opnieuw en sta hem toe) en trek daarna de oude in. |
| Een antwoord wordt geweigerd | Lees de reden. Gebruik describe_form_pages voor het juiste pad en de waarden die een keuzelijst accepteert. |
start_run wordt geweigerd | get_form_progress toont per sectie wat er ontbreekt of niet klopt. Vul dat in en start de indiening opnieuw. Loopt er al een indiening van het formulier, volg die dan met get_run. |
De indiening wacht met needsPerson | Iemand opent de link van de indiening in DS160.io en typt de captcha. Zodra de indiening klaar is voor ondertekening, controleert iemand de aanvraag en ondertekent die op CEAC. |