# Find an exact medication

Use this when a Medicare coverage, cost or ranking task needs an exact medication. Search the supplied name with strength, form and release type; show up to five returned choices and confirm them with the person, then selected_option. Reuse the returned medication reference. Broad ingredient/brand groups need refinement before pricing. Never invent a selection, substitute generic for brand, or change strength/release type. No ZIP or refill details are needed for identification. This does not check coverage, prices or clinical equivalence. 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

`find_medication`

## Input schema

```json
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "Medication name or partial name, including strength/form/release type already supplied. Reuse the returned query when confirming a displayed option."
    },
    "selected_option": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "description": "Internal option_id from the returned results, only after the person chooses that option. Never ask the user for this reference or invent it."
    }
  },
  "required": [
    "q"
  ],
  "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": "find_medication",
    "arguments": {
      "q": "metformin"
    }
  }
}
```

## Connection

POST JSON-RPC to https://tools.thepocketprotector.com/mcp with method `tools/call`, name `find_medication`, 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": "Find an exact medication",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
```

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