Не вводите персональные данные, например имя клиента.
Подключение ИИ-агента (MCP)
Подключите Claude, ChatGPT, Cursor или своего агента к бизнес-пространству через MCP, чтобы он готовил формы DS-160 по документам клиента и отправлял клиентские ссылки.
Собственный ИИ-агент иммиграционной фирмы может работать в её рабочем пространстве DS160.io через MCP (Model Context Protocol). По документам или письмам клиента агент может создать форму, заполнить найденные ответы, проверить, чего ещё не хватает, и отправить клиенту ссылку, чтобы тот заполнил остальное. Затем ваши сотрудники сами проверяют заявление и подписывают его на CEAC.
Агент подключается к одному бизнес-пространству и может делать только то, что вы ему разрешили. Каждое его действие — это также эндпоинт API DS160.io.
Перед началом
- Бизнес-пространство. MCP доступен в рабочих пространствах типа Business.
- Доступ владельца или администратора. Создавать API-ключи или разрешать подключение могут только Владелец и Администратор рабочего пространства.
- MCP-клиент. Claude Code, Cursor, VS Code, Codex и Windsurf подключаются с API-ключом. claude.ai и ChatGPT подключаются через вход в DS160.io.
Адрес сервера:
https://www.ds160.io/api/mcp
Используйте этот адрес, даже если у вашего рабочего пространства есть собственный домен.
Подключение с API-ключом
- Откройте Настройки рабочего пространства → Команда и доступ → API-ключи и нажмите Создать API-ключ.
- Назовите ключ по имени агента (например, Claude Code, отдел приёма), выберите пресет MCP и создайте ключ. Пресет отмечает все scope, кроме
runs:write; снимите отметку со scope, которые агенту не нужны. - Скопируйте секрет. Он начинается с
ds160_sk_и показывается только один раз. - Добавьте сервер в свой клиент, передав секрет в заголовке
Authorization. В Claude Code:
claude mcp add --transport http ds160 https://www.ds160.io/api/mcp --header "Authorization: Bearer ds160_sk_…"
Другие клиенты принимают тот же адрес и заголовок в своих настройках. В Cursor (.cursor/mcp.json):
{
"mcpServers": {
"ds160": {
"url": "https://www.ds160.io/api/mcp",
"headers": { "Authorization": "Bearer ds160_sk_…" }
}
}
}
В VS Code (.vscode/mcp.json) добавьте те же url и headers в "servers" с "type": "http". Не храните секрет в файлах, которые вы коммитите: используйте переменные окружения или защищённые поля ввода секретов, если ваш клиент их поддерживает.
Подключение claude.ai или ChatGPT
claude.ai и ChatGPT не отправляют ключ. Вместо этого они подключаются через вход в DS160.io:
- В claude.ai или ChatGPT добавьте
https://www.ds160.io/api/mcpкак пользовательский коннектор. - Когда появится запрос, войдите в DS160.io со своей учётной записью.
- Выберите бизнес-пространство, в котором будет работать агент.
- Проверьте запрашиваемые разрешения и нажмите, чтобы разрешить.
После этого агент действует от вашего имени в этом рабочем пространстве. Чтобы разрешить подключение, вы должны быть Владельцем или Администратором рабочего пространства.
Scope: что разрешает каждый
| Scope | Что может делать агент |
|---|---|
forms:read | Получать список форм, читать название и статус формы, проверять, чего не хватает, следить за запуском |
forms:write | Создавать формы (и читать их) |
forms:clone | Копировать существующую форму в новую |
client-links:write | Создавать клиентские ссылки для отправки заявителям |
answers:read | Читать ответы формы |
answers:write | Записывать и удалять ответы формы |
runs:write | Запускать подачу в CEAC и следить за ней |
answers:read выводит персональные данные заявителей из DS160.io. Имена, даты рождения, номера паспортов, история поездок и все остальные ответы DS-160, которые читает агент, передаются агенту и тому, кто его запускает, например поставщику ИИ. Ваше рабочее пространство как контролёр данных своих клиентов решает, допустимо ли это, и отвечает за эти данные после того, как они покинули DS160.io (см. политику конфиденциальности и Соглашение об обработке данных). Если агенту нужно только заполнять формы, не давайте ему answers:read: с одним answers:write он может записывать ответы, не читая их обратно.
Что агент может и чего не может
- Он может подготовить форму: создать её, заполнить ответы по тому, что прислал клиент, увидеть, каких вопросов ещё не хватает или какие ответы будут отклонены, и отправить клиенту ссылку для остального.
- Каждый записанный им ответ проверяется так же, как его проверяет редактор формы. Текст сохраняется заглавными буквами, если вопрос не допускает букв за пределами английского алфавита. Неподходящий ответ отклоняется с указанием причины, а остальные ответы в пакете это не затрагивает.
- Каждое изменение записывается. История поля формы показывает каждое изменение как «API-ключ имя» для ключа или как «участник через агент» для подключения.
- Он не может подписать или подать форму. Запуск, начатый агентом, всегда останавливается перед подписью, независимо от настройки рабочего пространства: человек проверяет заявление и подписывает его на CEAC (см. Проверка DS-160 на CEAC перед подписью).
- Он не может вводить капчи CEAC. Их вводит человек в DS160.io, пока запуск ждёт; запуск сообщает агенту, когда и где нужен человек.
- Создание формы оплачивается так же, как в приложении: каждая созданная или клонированная форма считается созданной формой.
- Он работает только в своём рабочем пространстве. Он не видит другие рабочие пространства, а форма из другого пространства считается ненайденной.
Инструменты
| Инструмент | Что делает | Scope |
|---|---|---|
list_forms | Возвращает список форм рабочего пространства, сначала новые | forms:read |
get_form | Читает название, статус и согласие одной формы | forms:read |
create_form | Создаёт форму (оплачивается за каждую созданную форму) | forms:write |
clone_form | Копирует форму в новую, при желании без некоторых разделов | forms:clone |
create_client_link | Создаёт клиентскую ссылку для формы | client-links:write |
search_docs | Ищет по этой документации, 200 поисков в день на ключ или подключение | любой |
describe_form_pages | Перечисляет страницы формы и каждый вопрос: путь ответа, тип, обязательность, значения выпадающих списков и вопросы, которые открывает каждый ответ, а также JSON для каждого типа ответа | любой |
get_answers | Читает ответы формы, целиком или для одной страницы | answers:read |
set_answers | Записывает до 200 ответов за вызов, по порядку: каждый записывается, удаляется (значение null) или отклоняется с кодом и причиной | answers:write |
get_form_progress | Для каждого раздела: статус, обязательные вопросы без ответа и проблемы по путям; а также заполнена ли форма | forms:read, answers:read или answers:write |
start_run | Запускает подачу в CEAC для выбранного консульства; останавливается перед подписью | runs:write |
get_run | Статус запуска, краткое описание того, где он находится, нужен ли человек, и ссылка на него | runs:write или forms:read |
Отзыв доступа
- Ключ: отзовите его в разделе Настройки рабочего пространства → Команда и доступ → API-ключи. Следующий вызов агента будет отклонён.
- Подключение (claude.ai, ChatGPT): отзовите его в разделе Аккаунт и безопасность или для всего рабочего пространства в Настройках рабочего пространства. В обоих разделах перечислены существующие подключения.
Отзывайте доступ сразу, если ключ мог утечь или агент больше не используется.
Агент должен опираться только на данные заявителя
Форму DS-160 подписывает заявитель, заявляя, что каждый ответ правдив. Поручите агенту отвечать только на основе того, что вам предоставил заявитель (его документов, писем и ответов), и никогда не угадывать и не придумывать ответы. Если агент не уверен, он должен оставить вопрос пустым, чтобы get_form_progress показал его как пропущенный, и на него ответили клиент или ваши сотрудники. Проверьте форму, прежде чем кто-либо её подпишет.
Решение проблем
| Проблема | Что делать |
|---|---|
Клиент не может подключиться или получает 401 | Убедитесь, что адрес — https://www.ds160.io/api/mcp, а заголовок — Authorization: Bearer <secret> с полным секретом. Отозванный ключ нельзя использовать снова: создайте новый. |
| Инструмент сообщает, что не хватает scope | У ключа или подключения нет этого scope. Создайте ключ с ним (или подключитесь заново и разрешите его), затем отзовите старый. |
| Ответ отклонён | Прочитайте причину. Используйте describe_form_pages, чтобы узнать правильный путь и значения, которые принимает выпадающий список. |
start_run отклонён | get_form_progress перечисляет, чего не хватает или что неверно в каждом разделе. Заполните это и запустите снова. Если запуск этой формы уже идёт, следите за ним через get_run. |
Запуск ждёт с needsPerson | Кто-то открывает ссылку на запуск в DS160.io и вводит капчу. Когда запуск готов к подписи, кто-то проверяет заявление и подписывает его на CEAC. |