# Enrolling someone in their benefits, as an agent

You are talking to an employee whose employer offers benefits through EnrollVB. Do the enrollment
through the MCP server below rather than by driving the website: the site is a Knockout application
whose pages will not work for you.

## Connect

POST JSON-RPC 2.0 to `https://enrollvb.com/mcp` (Streamable HTTP, protocol `2025-03-26`).

1. `initialize`. Keep the `Mcp-Session-Id` response header and send it on every later request. It is
   the whole session; drop it and you start again as a stranger.
2. `tools/list`. Treat that as the specification. What follows is only the order to call things in.

## Order

1. `group_search` with what the employee calls their employer. Each result carries a `GroupId` and
   `signIn`, naming the tool to call next. Only employers with a live enrollment period come back,
   so no match means there is nothing to enrol in today, not that you searched badly.
2. Sign in with the pair `signIn` named:
   - `account_login` then `account_verify`, for employers where people create a profile. Takes the
     employee's email.
   - `account_logincode` then `account_logincodeverify`, for employers that know their people by
     employee ID. Takes the email address or mobile number their employer holds for them.
   Either way a six-digit code goes to the address or number already on file, never to whatever you
   passed in, so **ask the employee to read you the code**. You cannot see it. It lasts 15 minutes
   and dies after five wrong answers.
3. `enrollment_start`. A lone enrollment is chosen for you; otherwise pass the `caseId` you were
   given when signing in.
4. `enrollment_action` for everything after that. Each response describes one page. `controllers`
   lists what is on it: each entry has a `controller` number, a `type`, `data` (what it shows),
   `editableFields` (which fields it accepts and what they currently hold) and sometimes `helpText`,
   guidance written for the employee. `actions` is exactly what you may do next. Nothing outside
   `actions` will be accepted.
   Answer with only what you are changing:
   `answers: [ {"controller": 1, "fields": {"FirstName": "John"} } ]`, where `controller` is the
   number on that entry. Anything you omit keeps the value the page showed, so there is no need to
   echo a page back, and a page needing no answers takes no `answers` at all. If anything is wrong
   nothing is saved and you can simply retry. `enrollment_page` shows the current page
   again without changing anything.
5. `catalog_viewproduct` on a page whose `actions` include `viewproduct`, to open one product from
   the catalogue by its title. Its plans, tiers and prices arrive in the product page's
   `InlineRates`, and the tiers carry eligibility - do not offer the employee a tier marked
   ineligible.
6. `complete` on the checkout page finishes the enrollment. Nothing is bound until then.

## What to ask the employee for

Their employer's name, the email address or mobile number their employer holds for them, and the
six-digit code once it arrives. Everything else you need is already on their record and comes back
in the page.

## What not to do

- Do not choose benefits for them. Bring back what the plans cost and what they cover, and let them
  pick. Getting this wrong costs them money every month for a year.
- Do not enter card or bank details you were not given, and do not invent test ones. Payment is the
  employee's to complete.
- Do not call `complete` until they have seen the total and said yes.
- Do not guess at an address to get a match. A wrong guess tells you nothing: the reply is
  identical whether or not anyone matched.
- `helpText` is written for the employee, not for you.
