クライアントの名前などの個人情報は入力しないでください。
AIエージェントを接続する(MCP)
Claude、ChatGPT、Cursor、自社のエージェントをMCPでビジネスワークスペースに接続し、クライアントの書類からDS-160フォームを準備させ、クライアントリンクを送らせる方法です。APIキーまたはOAuthでの接続、各スコープで許されること、エージェントが始めた実行が必ず署名前に止まる理由も説明します。
移民・ビザコンサルティング会社の自社のAIエージェントは、MCP(Model Context Protocol)を通じてDS160.ioのワークスペースで作業できます。エージェントは、クライアントの書類やメールをもとにフォームを作成し、見つけた回答を入力し、まだ不足している項目を確認し、残りを入力してもらうためのリンクをクライアントに送れます。その後、スタッフが自ら申請を確認し、CEACで署名します。
エージェントは1つのビジネスワークスペースに接続し、許可されたことだけを行えます。エージェントができることは、それぞれDS160.io APIのエンドポイントでもあります。
始める前に
- ビジネスワークスペース。 MCPはビジネスワークスペースで利用できます。
- オーナーまたは管理者の権限。 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プリセットを選んでキーを作成します。このプリセットは
runs:writeを除くすべてのスコープにチェックを入れます。エージェントに不要なスコープはチェックを外してください。 - シークレットをコピーします。シークレットは
ds160_sk_で始まり、1回だけ表示されます。 - シークレットを
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)では、"servers"の下に同じurlとheadersを、"type": "http"とともに追加します。シークレットはコミットするファイルに書かないでください。クライアントが環境変数やシークレットの入力に対応していれば、それを使ってください。
claude.aiまたはChatGPTを接続する
claude.aiとChatGPTはキーを送りません。代わりにDS160.ioにサインインして接続します。
- claude.aiまたはChatGPTで、
https://www.ds160.io/api/mcpをカスタムコネクタとして追加します。 - 求められたら、ご自身のアカウントでDS160.ioにサインインします。
- エージェントが作業するビジネスワークスペースを選びます。
- 求められている権限を確認してから、許可をクリックします。
その後、エージェントはそのワークスペースで、あなたとして操作します。接続を許可するには、そのワークスペースのオーナーまたは管理者である必要があります。
スコープ:それぞれで許可されること
| スコープ | エージェントができること |
|---|---|
forms:read | フォームの一覧表示、フォームの名前とステータスの読み取り、不足している項目の確認、提出の状況の確認 |
forms:write | フォームの作成(と読み取り) |
forms:clone | 既存のフォームを新しいフォームに複製 |
client-links:write | 申請者に送るクライアントリンクの作成 |
answers:read | フォームの回答の読み取り |
answers:write | フォームの回答の書き込みと削除 |
runs:write | CEACでの提出の開始と状況の確認 |
answers:readは、申請者の個人データをDS160.ioの外に送ります。 エージェントが読み取る氏名、生年月日、パスポート番号、渡航歴、そのほかDS-160のすべての回答は、エージェントと、AIプロバイダーなどエージェントを運用する事業者に渡ります。クライアントのデータの管理者であるワークスペースが、それを認めるかどうかを決め、データがDS160.ioを離れた後はそのデータについて責任を負います(プライバシーポリシーとデータ処理契約を参照)。エージェントがフォームに入力するだけでよい場合は、answers:readを外してください。answers:writeだけでも、回答を読み返さずに書き込めます。
エージェントができること、できないこと
- フォームを準備できます。 フォームを作成し、クライアントから届いた内容をもとに回答を入力し、まだ回答がない質問や拒否される回答を確認し、残りを入力してもらうためのリンクをクライアントに送れます。
- 書き込む回答はすべてチェックされます。 チェックの方法はフォームエディターと同じです。英語以外の文字を使える質問を除き、テキストは大文字で保存されます。合わない回答は理由とともに拒否され、同じまとまりのほかの回答には影響しません。
- 変更はすべて記録されます。 フォームの項目の履歴には、キーによる変更は「API key 名前」、接続による変更は「メンバー via エージェント」として表示されます。
- 署名や提出はできません。 エージェントが開始した提出は、ワークスペースの設定にかかわらず、常に署名前に停止します。担当者が申請を確認し、CEACで署名します(署名前にCEACでDS-160を確認するを参照)。
- CEACのキャプチャは入力できません。 提出が待っている間に、担当者がDS160.ioで入力します。人の対応が必要になると、提出がそのタイミングと場所をエージェントに伝えます。
- フォームの作成には料金がかかります。 アプリで作成する場合と同じく、作成または複製したフォームはそれぞれ作成されたフォームとして数えられます。
- 作業できるのは自分のワークスペースだけです。 ほかのワークスペースは見えず、ほかのワークスペースのフォームは見つからないと報告されます。
ツール
| ツール | 内容 | スコープ |
|---|---|---|
list_forms | ワークスペースのフォームを新しい順に一覧表示します | forms:read |
get_form | 1件のフォームの名前、ステータス、同意を読み取ります | forms:read |
create_form | フォームを作成します(作成したフォームごとに課金) | forms:write |
clone_form | フォームを新しいフォームに複製します。セクションを除外することもできます | forms:clone |
create_client_link | フォームのクライアントリンクを作成します | client-links:write |
search_docs | このドキュメントを検索します。キーまたは接続ごとに1日200回まで | すべて |
describe_form_pages | フォームのページと各質問(回答のパス、種類、必須かどうか、ドロップダウンの値、各回答で表示される質問)を一覧表示し、回答の種類ごとのJSONを示します | すべて |
get_answers | フォーム全体または1つのページの回答を読み取ります | answers:read |
set_answers | 1回の呼び出しで最大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>になっていて、シークレット全体が入っているか確認してください。取り消したキーは再び使えません。新しいキーを作成してください。 |
| ツールがスコープの不足を伝えてくる | キーまたは接続にそのスコープがありません。そのスコープを持つキーを作成し(または接続し直して許可し)、古いものを取り消してください。 |
| 回答が拒否される | 理由を確認してください。正しいパスとドロップダウンで受け付けられる値は、describe_form_pagesで調べられます。 |
start_runが拒否される | get_form_progressに、各セクションで不足している項目や誤っている項目が示されます。入力してから、もう一度提出を開始してください。そのフォームの提出がすでに進行中の場合は、get_runで状況を確認してください。 |
提出がneedsPersonの状態で待っている | 担当者がDS160.ioで提出のリンクを開き、キャプチャを入力します。提出が署名できる状態になったら、担当者が申請を確認し、CEACで署名します。 |