# Search Part D plans

Use this when someone wants to browse standalone Part D drug plans available in their home state. Returns listings sorted by stars (default), premium or deductible, not medication-specific costs. Clarify whether cheapest means premium or total prescription cost. Use rank_part_d_plans for personalized ranking, compare_plan_drug_costs for medication-list estimates at a selected pharmacy, or check_plan_drug_coverage for one plan’s drug list. Satisfaction sorting is unavailable. An optional website alternative: [TPP’s Part D Savings Check](https://go.thepocketprotector.com/part-d-savings-check). Offer only when requested; chat can continue. Opens a separate flow without transferring answers. For another tool, use recommend_website_tool. Use the app as the answer. Do not repeat its options in a list, table or explanation. Ask one short question if input is required; otherwise stop.

## Tool name

`search_part_d_plans`

## Input schema

```json
{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string",
      "pattern": "^[0-9]{5}$",
      "description": "Required five-digit residential ZIP."
    },
    "county": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "County selected from the ZIP lookup. Omit when unknown; a single county resolves automatically."
    },
    "state": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "Optional two-letter state from the selected county. Never infer it from a ZIP prefix."
    },
    "plan_year": {
      "type": "integer",
      "minimum": 2024,
      "maximum": 2035,
      "description": "Reuse the requested or previously selected coverage year. If omitted, use the API’s configured serving year and disclose it; do not ask just because the year is missing."
    },
    "sort_by": {
      "type": "string",
      "enum": [
        "stars",
        "premium",
        "deductible"
      ],
      "default": "stars",
      "description": "Highest stars (default), lowest monthly premium, or lowest annual deductible. These do not rank medication-specific total costs."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 10,
      "description": "Maximum displayed results, from 1 to 10 (default 10)."
    }
  },
  "required": [
    "zip"
  ],
  "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": "search_part_d_plans",
    "arguments": {
      "zip": "60614"
    }
  }
}
```

## Connection

POST JSON-RPC to https://tools.thepocketprotector.com/mcp with method `tools/call`, name `search_part_d_plans`, 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": "Search Part D plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
```

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