Medprice

io.github.CloudCorpRecords由 GitHub 帳號 CloudCorpRecords 發布v0.1.0更新於 Nov 7, 2026

Compare US prescription prices by pharmacy, find nearby pharmacies and drug equivalents.

已驗證STDIO僅桌面位置與生活金融

概覽

AI 產生的概覽

連接 FineRx 處方藥價格服務的本地橋接,讓助理比較美國各藥局的折扣卡價格、尋找附近藥局,並把國外藥品品牌對應到美國產品。

可以做什麼
  • 依名稱、品牌、拼字錯誤或其他文字檢索藥品,取得劑型、規格與包裝資訊
  • 比較單一藥品或兩到六種藥品組合在美國各連鎖藥局、指定郵遞區號或地點附近的折扣卡價格
  • 依連鎖列出 30 英里內的藥局門市,給定藥品時附上卡價
  • 取得處方轉移步驟、尚無處方時的領藥途徑,以及免費 FineRx 折扣卡資訊
  • 把國外品牌名對應到美國同類藥品並反向查詢,以及查看資料涵蓋範圍與更新時效
適用情境
適合在使用者詢問美國處方藥價格、哪裡較便宜、附近有哪些藥局、如何轉移處方,或國外買到的藥在美國叫什麼時使用。它只做價格查詢,不提供診療或開立處方建議。
執行需求
以 Node.js 本地程序透過 npx 執行,或以 Docker 容器執行,皆使用 stdio。呼叫會經網路轉送到 FineRx 託管端點。可選環境變數 FINERX_MCP_URL(覆寫端點)與 FINERX_API_KEY(以 Bearer 標頭轉送);預設不需帳號。
安裝前請注意
每次工具呼叫都會轉送給第三方託管服務,因此你提供的藥品名、郵遞區號或地點會離開本機。若設定 FINERX_API_KEY,該金鑰會以 Bearer 權杖送往上游。價格是附觀測日期的折扣卡估算而非報價,上游錯誤會原樣回傳。上游有一個寄送折扣卡郵件到任意位址的工具被刻意排除。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Medprice,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

medprice

medprice is a small local bridge to FineRx's hosted MCP server, a prescription-price service for the US: it knows what a medicine costs with a free discount card at the major pharmacy chains, which stores sit near a ZIP code, and what a medicine sold under a foreign brand name is called in the US.

The bridge keeps no drug or price data of its own. It serves the upstream server's tool list locally, exactly as captured from the live endpoint, and forwards each tool call upstream, returning the result untouched.

Labelled subset: 18 of 19 tools

The live capture held 19 tools. This rebuild serves 18 of them. One tool is deliberately omitted:

  • email_savings_card — omitted. It sends email to an arbitrary address supplied by the caller, an external-sending action outside this server's price-read core, so it is excluded under the program's safety rule. It is not registered, not forwarded, and the test suite asserts its absence from both the local registry and the served MCP tools/list.

One nearby tool is kept on purpose:

  • get_savings_card — kept. It returns the FineRx program's own free discount card: the shared program codes printed on every card the service distributes publicly, with usage steps. That is published program data, not a user's payment-card data, and it creates no payment instrument — a read like the price reads around it.

Tools

  • compare_prices — one medicine's card price at US pharmacy chains, near a place. Optional: drug, strength, form, quantity, zip, ndc, locale, channel, compare_to.
  • ui_prices — the same price answer for a package and place picked inside the FineRx card. Required: slug.
  • find_nearby_pharmacies — pharmacy stores within 30 miles, per chain, with the card price when a drug is given. All arguments optional.
  • ui_nearby — nearby pharmacies for the package on screen, called by the card itself. All optional.
  • get_transfer_steps — how to move a prescription to another chain. All arguments optional.
  • compare_basket — card prices for several medicines at once, and which chain was seen pricing the whole list. Required: drugs.
  • ui_basket — the same basket for another place, called by the card itself. Required: slugs.
  • open_price_finder — open the FineRx search inside the card. Optional: query, locale.
  • ui_suggest — medicines matching what is being typed in the FineRx search. Required: q.
  • get_savings_card — the free FineRx discount card: its codes, how to use it, how to keep it. See the subset note above. All arguments optional.
  • search_drugs — find a medicine by name (brand, generic, misspelled or in another script) and get its slug. Required: query.
  • get_drug — strengths, forms and pack sizes of one medicine that have a card price. Required: slug.
  • get_dataset_info — what FineRx covers: chains, freshness, store counts, terms. No arguments.
  • get_prescription_options — routes to filling a prescription, including having none yet. All optional.
  • find_us_equivalent — what a medicine from another country is in the US, and its card price here. Required: brand.
  • find_us_equivalents — the same for several foreign medicines at once. Required: brands.
  • ui_equivalent — one foreign brand picked in the FineRx search, called by the card itself. Required: brand_slug.
  • foreign_brands_for_drug — what a US drug is called abroad. Required: slug.

Configuration

  • FINERX_MCP_URL (optional) — override the upstream endpoint. Defaults to https://www.finerxfinder.com/mcp. (The override hook is this rebuild's own labelled reconstruction.)
  • FINERX_API_KEY (optional) — when set, every upstream request carries an Authorization: Bearer <key> header. When it is not set, no auth header is sent. (This forwarding is also a labelled reconstruction; the original surface was captured keyless.)

Forwarding mechanics

On the first tool call the client opens a streamable HTTP session with the upstream: a JSON-RPC initialize request (protocolVersion 2025-03-26, clientInfo name medprice), then a notifications/initialized notification, then the tools/call request carrying the caller's arguments unchanged. When the upstream answers initialize with an Mcp-Session-Id header, that value rides on every later request of the session, which is reused for the life of the process. Replies may arrive as plain JSON or as server-sent events; both are read.

Successful upstream results pass through verbatim, including any isError flag the upstream sets. Failures — a JSON-RPC error, a non-2xx status, an unreadable response, or a request that cannot be completed — come back as an isError result whose text starts with medprice error: (this rendering is this rebuild's own labelled reconstruction).

CLI

Each tool is also a subcommand taking one JSON argument string (omit it for tools that take none):

bash
npx @reneturcios/medprice search_drugs '{"query":"lisinopril"}'npx @reneturcios/medprice compare_prices '{"drug":"lisinopril","zip":"94110"}'npx @reneturcios/medprice compare_basket '{"drugs":["lisinopril","metformin"]}'npx @reneturcios/medprice find_us_equivalent '{"brand":"No-Spa"}'npx @reneturcios/medprice get_dataset_infonpx @reneturcios/medprice --version

Exit codes: 0 on success, 1 on an isError result, 2 on a usage error.

MCP server

bash
npx -y @reneturcios/medprice mcp

MCP client config:

json
{  "mcpServers": {    "medprice": {      "command": "npx",      "args": ["-y", "@reneturcios/medprice", "mcp"]    }  }}

Docker

bash
docker run -i ghcr.io/cloudcorprecords/medpricedocker run --rm ghcr.io/cloudcorprecords/medprice --version

The container's default command is mcp, so the first form is a stdio MCP server; any other arguments reach the CLI normally.

Development

bash
npm installnpm run buildnpm testnpm run dev

The test suite runs entirely against a stubbed JSON-RPC upstream — no live network calls.

License

MIT — see LICENSE.

來源:README.md,提交 7ffcb8d

工具

18

compare_prices

Price of one medicine with the free FineRx card at US pharmacy chains, near a place. Use when the person asks what a medicine costs, where it costs less, or its price near them or in a ZIP code. ``drug`` is a name as typed or a slug from search_drugs; ``strength`` ("10 mg"), ``form`` ("tablet") and ``quantity`` are optional (the package with the most chains priced is used). ``zip`` is a 5-digit US ZIP — pass it only when the person gave one; without it the host's approximate location is used when there is one, else the answer is national and asks for a ZIP. ``ndc`` (+ ``quantity``) is accepted for older callers. ``compare_to`` is a dollar amount the person named for THIS package — their insurance copay, what they pay now, or a price they want to hear about — and the answer then says how many chains were seen below it. Returns the package, every chain's card price with its observation date (Walmart per state), the nearest store of each chain with a store nearby, chains with a card price but no store nearby, coverage (``other_quantities`` lists the pack sizes that were seen), and the card: codes, the dated price with the card, and the card sentence. Next: quote each price with its date and chain; say the price is set per chain; then the card sentence and codes.

輸入參數ndczipdrugformlocalechannelquantitystrengthcompare_to

ui_prices

Card prices for another dose, quantity or place — called by the FineRx card itself. Same answer as compare_prices, for the package and place picked inside the card. ``where`` is the place as typed in the card (a ZIP, a city or an address): used for this one request, never stored. Not for the model.

輸入參數zipformslug必填wherelocalequantitystrengthcompare_to

find_nearby_pharmacies

Pharmacy stores within 30 miles, per chain — with the card price when a drug is given. Use when the person asks where the pharmacies are near a ZIP or near them. ``zip`` is a 5-digit US ZIP (leave it out to use the host's approximate location when there is one). ``family`` is a comma-separated list of chain codes: walmart, cvs, walgreens, kroger, albertsons, costco, publix, heb, hyvee, meijer, wegmans, shoprite, bigy, gianteagle, kinney (``chains`` is the older name of the same filter). With ``drug`` (+ optional strength, form, quantity) each store carries its chain's card price and observation date. Returns stores (chain, address, city, distance, whether it is a pharmacy or a store with a pharmacy inside — not verified) and the card. Stock is not visible: suggest calling ahead. Coordinates © OpenStreetMap contributors.

輸入參數zipdrugformlimitchainsfamilylocalequantitystrength

ui_nearby

Pharmacies near a place for the package on screen — called by the FineRx card itself. ``where`` is the place as typed in the card (a ZIP, a city or an address): used for this one request, never stored. Not for the model.

輸入參數zipformslugwherefamilylocalequantitystrength

get_transfer_steps

How to move a prescription from the pharmacy that has it to the one the person wants to use. Use when the person says their prescription is at another pharmacy, asks how to switch pharmacies, or picked a chain from the card prices and their prescription is elsewhere. ``chain`` is the chain they want to move TO, as a code: walmart, cvs, walgreens, kroger, albertsons, costco, publix, heb, hyvee, meijer, wegmans, shoprite, bigy, gianteagle, kinney. Optional ``drug`` (+ strength, form, quantity) adds that chain's card price with its date. ``zip`` is a 5-digit US ZIP — pass it only when the person gave one. Returns the steps in order (what to say and what to have ready), three notes (it is free; no refills left means a new prescription; some medicines have stricter rules), the nearest stores of that chain when a place is known, and the card. For controlled or age-restricted medicines it returns only ``restricted: true``. Not medical advice. Next: read the steps out as written; then the card sentence and codes.

輸入參數zipdrugformchainlocalequantitystrength

compare_basket

Card prices for several medicines at once: which pharmacy chain was seen pricing the whole list, and the sum there. Use when the person names two or more medicines and asks what they cost together, or which one pharmacy to use for all of them. ``drugs`` is two to six names as typed or slugs; a dose and a pack size may ride in each name ("atorvastatin 40 mg 90"). ``zip`` is a 5-digit US ZIP — pass it only when the person gave one; without it the host's approximate location is used when there is one, else the chains are listed nationally. Returns the package used for each medicine, then one row per chain: its card price for each medicine with the observation date, and — only when every medicine was seen with a price there — their sum with the dates the prices were observed. When taking each medicine at a different chain comes to less than every one-chain sum, that is given too. Names that matched no medicine are counted and left out. A sum is an addition of observed card prices, never a quote: the pharmacy sets the final price. Next: read out the chains with a sum and its dates; then the card sentence and codes. One medicine only: use compare_prices.

輸入參數zipdrugs必填localechannel

ui_basket

The same list of medicines for another place — called by the FineRx card itself. ``slugs`` with their packages in parallel lists (an empty string or 0 = not set). ``where`` is the place as typed in the card: used for this one request, never stored. Not for the model.

輸入參數zipformsslugs必填wherelocalestrengthsquantities

open_price_finder

Open the FineRx search inside the card, so the person can look a medicine up themselves. Use when the person asks to open FineRx, wants to search or browse on their own, or is not sure of the name. Optional ``query`` pre-fills the search (a medicine, a brand from another country, a misspelling). The card then suggests matches as they type, each with where its card prices start and the date, and a pick shows card prices by chain near a place they choose. Returns the matches for ``query`` (if any), foreign brands that matched, a few often-searched medicines, and the card. What the person picks in the card reaches you as context. Hosts without MCP Apps get the matches as text.

輸入參數querylocale

ui_suggest

Medicines matching what the person is typing in the FineRx search — called by the card itself. Up to eight matches with where their card prices start (dated), and foreign brands that matched. Not for the model.

輸入參數q必填locale

get_savings_card

The free FineRx discount card: its codes, how to use it, how to keep it. Use when the person asks for the card, how to pay less at the pharmacy, or right after you quoted a card price. Optional ``drug`` (a slug from search_drugs) adds that drug's card price for its most-priced package, with the date it was observed. ``locale`` is a language code (the host's own is used when left out). Returns the three codes to read at the counter, the steps, the sentence to say to the pharmacist, the links to the card page and the printable sheet, and the card sentence with the small print. Hosts with MCP Apps show it as an interactive card; write the three codes in your answer anyway. The card is free, needs no signup and is not insurance.

輸入參數druglocalechannel

search_drugs

Find a medicine by name (brand, generic, misspelled or in another script) and get its slug. Not needed before compare_prices, compare_basket or get_transfer_steps: they take a name as typed. Use it when the person asks what FineRx has, or a name is ambiguous. Returns candidates with ``slug`` (for get_drug and compare_prices), ``kind`` (generic/brand) and ``fromCardPrice`` — where its card prices start: the amount, the package it is for and the observation date. ``foreignBrands`` lists home-country brands that matched the same text (Нурофен, No-Spa): when ``results`` is empty and ``foreignBrands`` is not, call find_us_equivalent. Several candidates: ask which one — brand and generic are different products.

輸入參數limitquery必填locale

get_drug

Strengths, forms and pack sizes of one medicine that have a card price, and its default package. Use when you have a slug and need to know which strengths and quantities exist before quoting a price. Returns ``configs`` (strength × form, each with quantities, where the card prices for that pack start, with the date, and how many chains priced it), ``defaultConfig`` (the package the most chains price), ``fromCardPrice``, the card prices of the default package per chain, and the card. Next: compare_prices for the package the person takes.

輸入參數slug必填localechannel

get_dataset_info

What FineRx covers: pharmacy chains with card prices, how fresh they are, stores on the map, terms. Use when the person asks what FineRx is, how big or current the data is, or how to cite it. Returns the pharmacy chain families we hold card prices for, their store banners, the newest observation date, how many stores we can place on a map, the catalog size, and the attribution terms.

無需輸入參數。

get_prescription_options

Routes to filling a prescription, including having none yet. Use when the person says they have no prescription, asks how to get one, or says the brand costs too much. Optional ``drug`` is a slug from search_drugs (a name works too). Returns three sections — havePrescription (steps), noPrescription (clinics and telehealth, each with the disclosure to read out when FineRx earns anything), brandCostly — plus a Medicaid note, where the drug's card prices start (dated), and the card. For controlled or age-restricted medicines it returns only ``restricted: true``: FineRx shows card prices and the card for them, nothing else. Not medical advice: never say what to take or at what dose.

輸入參數druglocale

find_us_equivalent

What a medicine from another country is in the US, and its card price here. Use when the person names a medicine that is not a US product — a brand from home (No-Spa, Nurofen, Dolo-Neurobion, 999 Ganmaoling), a name in another script (Но-шпа, 泰诺), or an ingredient the US calls something else (paracetamol) — or asks "what is this called in the US?". Optional ``country`` picks between brands of the same name sold in different places. Returns the reviewed entry: ``usClass`` (``same_inn`` = the same active ingredient is sold here, ``rx_alternative`` = it is not and the closest US options need a prescription, ``no_equivalent`` = nothing here matches), ``guidance`` (ONE vetted sentence, to be quoted word for word), ``guidanceDisclaimer``, ``inn``, ``usGeneric``, ``usBrands``, ``rxStatus``, ``usDrug`` (slug and the card price from which it was seen, with the date), ``otherMatches`` for the same brand name in other countries, and the card. ``found`` is false when nothing matched. Next: quote ``guidance`` as written, then ``guidanceDisclaimer``. With a ``usDrug``, compare_prices for its slug. Do not call the US drug the same product or suggest swapping; for ``rx_alternative`` and ``no_equivalent`` name no substitute — send the person to a pharmacist or a doctor.

輸入參數brand必填localechannelcountry

find_us_equivalents

What several medicines from another country are in the US — the list a person brought from home. Use when the person names two or more medicines that are not US products (brands from home, names in another script) and asks what they are here. ``brands`` is two to six names as typed; optional ``country`` picks between brands of the same name sold in different places. One medicine: use find_us_equivalent. Returns one entry per medicine found, each exactly as find_us_equivalent gives it: ``usClass``, the reviewed ``guidance`` sentence (quote it word for word), the US product and where its card prices start ONLY when it has the same active ingredient, and the card. Names that matched nothing are counted and left out — never guess what they are. Next: for each entry quote ``guidance``; name no substitute for ``rx_alternative`` and ``no_equivalent``; then offer compare_basket for the US products that have the same active ingredient.

輸入參數brands必填localechannelcountry

ui_equivalent

One foreign brand the person picked in the FineRx search — called by the card itself. The same answer as find_us_equivalent for exactly that brand (its ``brandSlug`` from ui_suggest): the reviewed guidance, word for word, and the US product only when it has the same active ingredient. Not for the model.

輸入參數localebrand_slug必填

foreign_brands_for_drug

What a US drug is called abroad — the reverse of find_us_equivalent. Use when the person has the US name and wants the home-country one ("what is lisinopril called in Mexico?"). ``slug`` comes from search_drugs. Returns the reviewed brands that resolve to this drug: ``brand``, ``brandScript``, ``countries``, ``inn`` and ``usClass`` (an ``rx_alternative`` entry is a DIFFERENT medicine used for the same complaint — say so if you mention it), and the card. Do not present any of these as interchangeable with the US drug, and do not tell anyone to buy or import one.

輸入參數slug必填

版本歷史

1
  1. v0.1.0最新Nov 5, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分