# Calculate Medicare enrollment dates

Use this when asked personal Part B start/delay questions while working or enrollment dates; no named-tool request needed. General enrollment education needs no call. Explain returned Medigap purchase protections before start/wait advice, then employer unknowns and dates. Request IEP and medigap_open_enrollment even without first Part B start. Reuse facts; omit unknowns. Employment/size alone does not establish qualifying_current_employment_coverage. Never invent enrollment, retirement or first Part B dates or turn hypotheticals into facts. Coverage starts need enrollment month; month-only birthdays need a first-day flag or eligibility month; calendars need a year. Supports age-65 IEP, IEP/GEP starts, federal Medigap, employer SEPs, creditable-drug-loss SEP, Part D gaps and annual windows. Preserve warnings/provenance. Retirement does not restart Medigap. Deadlines are not wait-until advice or birthday urgency. Verify employer coordination, Part B deferral and drug creditability separately. Two-month SEPs differ from the 63-day gap. No eligibility verification, penalties or enrollment. State/event rights, disability/ESRD and Part A retroactivity/HSA timing need separate review. Keep chat brief; choices in UI.

## Tool name

`calculate_medicare_enrollment_deadlines`

## Input schema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "windows": {
      "minItems": 1,
      "maxItems": 11,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "initial_enrollment",
          "initial_coverage_start",
          "medigap_open_enrollment",
          "employer_part_b_sep",
          "employer_plan_sep",
          "creditable_drug_sep",
          "part_d_gap",
          "annual_enrollment",
          "ma_open_enrollment",
          "general_enrollment",
          "general_coverage_start"
        ]
      },
      "description": "Only the timing calculations requested by the person. Unsupported state/event rules must not be substituted with another window."
    },
    "turns_65_on": {
      "description": "65th birthday as YYYY, YYYY-MM or YYYY-MM-DD, not date of birth. Do not invent missing precision.",
      "type": "string",
      "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
    },
    "birthday_on_first": {
      "description": "Only needed for a month-only 65th birthday: is the birthday on day 1? Omit if unknown.",
      "type": "boolean"
    },
    "age_65_eligibility_month": {
      "description": "Already established age-65 Medicare eligibility month, including any first-day birthday shift. Do not infer from disability/ESRD eligibility.",
      "type": "string",
      "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
    },
    "enrollment_month": {
      "description": "Month of the actual or proposed Part B/premium-Part A application. Not a plan year.",
      "type": "string",
      "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
    },
    "part_b_start": {
      "description": "First Part B effective month; never a restart month. Used only for federal age-65 Medigap open enrollment.",
      "type": "string",
      "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
    },
    "calendar_year": {
      "description": "Explicit calendar year for recurring AEP, MA OEP or GEP dates; never default from a plan catalogue or runtime clock.",
      "type": "integer",
      "minimum": 2023,
      "maximum": 2198
    },
    "currently_in_ma": {
      "description": "User-reported current Medicare Advantage enrollment for MA OEP; unknown is not false.",
      "type": "boolean"
    },
    "ma_oep_change_used": {
      "description": "Whether the person already used their one change in this annual MA OEP; omit if unknown.",
      "type": "boolean"
    },
    "employer": {
      "description": "Only the reported employer coverage facts needed for the requested SEP.",
      "type": "object",
      "properties": {
        "qualifying_current_employment_coverage": {
          "description": "Explicitly reported qualifying group coverage based on own/spouse current employment for age-65 Part B SEP, including required coverage history. Omit if not established: still working, employer size, having employer insurance or creditable drugs alone must never be converted to true. COBRA/retiree coverage alone is not qualifying. This is not verified eligibility.",
          "type": "boolean"
        },
        "employment_end": {
          "description": "When the qualifying employment ends or ended, not when COBRA ends.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "employment_ongoing": {
          "description": "Explicitly still employed; omission does not mean ongoing.",
          "type": "boolean"
        },
        "group_coverage_end": {
          "description": "When the active-employment group health plan coverage ends or ended.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "group_coverage_ongoing": {
          "description": "Explicitly still covered under the active-employment group plan.",
          "type": "boolean"
        },
        "plan_coverage_end": {
          "description": "End of employer/union coverage, including COBRA, for MA/Part D plan SEP; independent of Part B SEP.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        }
      },
      "additionalProperties": false
    },
    "drug": {
      "description": "Only the reported drug coverage facts needed for the requested SEP or continuous gap calculation.",
      "type": "object",
      "properties": {
        "involuntary_creditable_loss": {
          "description": "Reported involuntary loss of creditable drug coverage or change making it noncreditable.",
          "type": "boolean"
        },
        "creditable_coverage_end": {
          "description": "Last date/month of creditable drug coverage.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "loss_notice": {
          "description": "Notification date/month that coverage is no longer creditable; needed to account for a later notice.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "uncovered_start": {
          "description": "First day of a reported continuous period without Part D AND without other creditable drug coverage.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "coverage_resumes": {
          "description": "First day drug coverage resumes; excluded from uncovered-day count.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "as_of": {
          "description": "Count an ongoing reported gap through this date, inclusive. Required if coverage_resumes is unknown.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "part_d_iep_end": {
          "description": "Actual Part D initial enrollment period end; do not assume it equals age-65 Part A/B IEP.",
          "type": "string",
          "pattern": "^(19|20|21)\\d{2}(?:-(0[1-9]|1[0-2])(?:-(0[1-9]|[12]\\d|3[01]))?)?$"
        },
        "eligible_throughout_gap": {
          "description": "Reported Part D eligibility throughout the counted gap; do not infer it from age.",
          "type": "boolean"
        },
        "extra_help": {
          "description": "Reported Extra Help status for interpreting potential penalty exposure; never inferred.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "windows"
  ],
  "additionalProperties": false
}
```

## Example request

Minimal synthetic request after initialization. A missing-input clarification is a valid result; do not invent personal facts to complete it. For content retrieval, replace the illustrative fixture ID with an ID returned by search.

```json
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "calculate_medicare_enrollment_deadlines",
    "arguments": {
      "windows": [
        "annual_enrollment"
      ],
      "calendar_year": 2027
    }
  }
}
```

## Connection

POST JSON-RPC to https://tools.thepocketprotector.com/mcp with method `tools/call`, name `calculate_medicare_enrollment_deadlines`, and arguments matching the schema above. Call `tools/list` to verify deployed availability.

## Results and errors

Read both `content` and `structuredContent`. Follow returned clarification or continuation steps. Preserve source attribution, dates, uncertainty and scope. `isError: true` means the lookup did not complete. HTTP 429 requires waiting for `Retry-After`; never repeatedly retry an unavailable lookup.

## Tool annotations

```json
{
  "title": "Calculate Medicare enrollment dates",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
```

Authentication: public, no account or API key required. Public tools perform no enrollment or account writes.
