{"id":"31cfd832-6f83-4601-9c78-477c4c42c078","slug":"medprice","kind":"mcp","name":"medprice","summary":"Compare US prescription prices by pharmacy, find nearby pharmacies and drug equivalents.","owner":"CloudCorpRecords","repoUrl":"https://github.com/CloudCorpRecords/medprice","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-11-04T18:22:18.000Z","addedAt":"2026-11-05T20:06:06.249Z","logoUrl":"https://avatars.githubusercontent.com/u/95189389?u=8e277e1a24ff84ae7b49c89e6897fa44178a5c34&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-11-05T21:24:58.077Z","sample":false,"url":"https://conduits.dev/tools/medprice","language":"TypeScript","transports":["stdio"],"install":{"npm":"@reneturcios/medprice"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# medprice\n\nmedprice is a small local bridge to FineRx's hosted MCP\nserver, a prescription-price service for the US: it knows\nwhat a medicine costs with a free discount card at the\nmajor pharmacy chains, which stores sit near a ZIP code,\nand what a medicine sold under a foreign brand name is\ncalled in the US.\n\nThe bridge keeps no drug or price data of its own. It\nserves the upstream server's tool list locally, exactly\nas captured from the live endpoint, and forwards each\ntool call upstream, returning the result untouched.\n\n## Labelled subset: 18 of 19 tools\n\nThe live capture held 19 tools. This rebuild serves 18\nof them. One tool is deliberately omitted:\n\n- `email_savings_card` — **omitted**. It sends email to\n  an arbitrary address supplied by the caller, an\n  external-sending action outside this server's\n  price-read core, so it is excluded under the program's\n  safety rule. It is not registered, not forwarded, and\n  the test suite asserts its absence from both the local\n  registry and the served MCP tools/list.\n\nOne nearby tool is kept on purpose:\n\n- `get_savings_card` — **kept**. It returns the FineRx\n  program's own free discount card: the shared program\n  codes printed on every card the service distributes\n  publicly, with usage steps. That is published program\n  data, not a user's payment-card data, and it creates\n  no payment instrument — a read like the price reads\n  around it.\n\n## Tools\n\n- `compare_prices` — one medicine's card price at US\n  pharmacy chains, near a place. Optional: `drug`,\n  `strength`, `form`, `quantity`, `zip`, `ndc`, `locale`,\n  `channel`, `compare_to`.\n- `ui_prices` — the same price answer for a package and\n  place picked inside the FineRx card. Required: `slug`.\n- `find_nearby_pharmacies` — pharmacy stores within\n  30 miles, per chain, with the card price when a drug\n  is given. All arguments optional.\n- `ui_nearby` — nearby pharmacies for the package on\n  screen, called by the card itself. All optional.\n- `get_transfer_steps` — how to move a prescription to\n  another chain. All arguments optional.\n- `compare_basket` — card prices for several medicines\n  at once, and which chain was seen pricing the whole\n  list. Required: `drugs`.\n- `ui_basket` — the same basket for another place,\n  called by the card itself. Required: `slugs`.\n- `open_price_finder` — open the FineRx search inside\n  the card. Optional: `query`, `locale`.\n- `ui_suggest` — medicines matching what is being typed\n  in the FineRx search. Required: `q`.\n- `get_savings_card` — the free FineRx discount card:\n  its codes, how to use it, how to keep it. See the\n  subset note above. All arguments optional.\n- `search_drugs` — find a medicine by name (brand,\n  generic, misspelled or in another script) and get its\n  slug. Required: `query`.\n- `get_drug` — strengths, forms and pack sizes of one\n  medicine that have a card price. Required: `slug`.\n- `get_dataset_info` — what FineRx covers: chains,\n  freshness, store counts, terms. No arguments.\n- `get_prescription_options` — routes to filling a\n  prescription, including having none yet. All optional.\n- `find_us_equivalent` — what a medicine from another\n  country is in the US, and its card price here.\n  Required: `brand`.\n- `find_us_equivalents` — the same for several foreign\n  medicines at once. Required: `brands`.\n- `ui_equivalent` — one foreign brand picked in the\n  FineRx search, called by the card itself. Required:\n  `brand_slug`.\n- `foreign_brands_for_drug` — what a US drug is called\n  abroad. Required: `slug`.\n\n## Configuration\n\n- `FINERX_MCP_URL` (optional) — override the upstream\n  endpoint. Defaults to `https://www.finerxfinder.com/mcp`.\n  (The override hook is this rebuild's own labelled\n  reconstruction.)\n- `FINERX_API_KEY` (optional) — when set, every\n  upstream request carries an\n  `Authorization: Bearer <key>` header. When it is not\n  set, no auth header is sent. (This forwarding is also\n  a labelled reconstruction; the original surface was\n  captured keyless.)\n\n### Forwarding mechanics\n\nOn the first tool call the client opens a streamable\nHTTP session with the upstream: a JSON-RPC `initialize`\nrequest (protocolVersion `2025-03-26`, clientInfo name\n`medprice`), then a `notifications/initialized`\nnotification, then the `tools/call` request carrying\nthe caller's arguments unchanged. When the upstream\nanswers `initialize` with an `Mcp-Session-Id` header,\nthat value rides on every later request of the session,\nwhich is reused for the life of the process. Replies\nmay arrive as plain JSON or as server-sent events;\nboth are read.\n\nSuccessful upstream results pass through verbatim,\nincluding any `isError` flag the upstream sets.\nFailures — a JSON-RPC error, a non-2xx status, an\nunreadable response, or a request that cannot be\ncompleted — come back as an `isError` result whose\ntext starts with `medprice error:` (this rendering\nis this rebuild's own labelled reconstruction).\n\n## CLI\n\nEach tool is also a subcommand taking one JSON argument\nstring (omit it for tools that take none):\n\n```bash\nnpx @reneturcios/medprice search_drugs '{\"query\":\"lisinopril\"}'\nnpx @reneturcios/medprice compare_prices '{\"drug\":\"lisinopril\",\"zip\":\"94110\"}'\nnpx @reneturcios/medprice compare_basket '{\"drugs\":[\"lisinopril\",\"metformin\"]}'\nnpx @reneturcios/medprice find_us_equivalent '{\"brand\":\"No-Spa\"}'\nnpx @reneturcios/medprice get_dataset_info\nnpx @reneturcios/medprice --version\n```\n\nExit codes: `0` on success, `1` on an `isError`\nresult, `2` on a usage error.\n\n## MCP server\n\n```bash\nnpx -y @reneturcios/medprice mcp\n```\n\nMCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"medprice\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@reneturcios/medprice\", \"mcp\"]\n    }\n  }\n}\n```\n\n## Docker\n\n```bash\ndocker run -i ghcr.io/cloudcorprecords/medprice\ndocker run --rm ghcr.io/cloudcorprecords/medprice --version\n```\n\nThe container's default command is `mcp`, so the first\nform is a stdio MCP server; any other arguments reach\nthe CLI normally.\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\nnpm run dev\n```\n\nThe test suite runs entirely against a stubbed\nJSON-RPC upstream — no live network calls.\n\n## License\n\nMIT — see `LICENSE`.\n"}