Cash-pay lab tests: catalog search, all-in quotes by state, draw sites by ZIP, reviewed ranges.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculate free and bioavailable testosterone from total testosterone, SHBG and albumin using the Vermeulen (1999) mass-action equation — the method behind lab-reported 'calculated free testosterone'. Educational; not a diagnosis.
SHBG in nmol/L
Total testosterone
Albumin in g/dL (default 4.3)
Default ng/dL
Calculate free and bioavailable testosterone from total testosterone, SHBG and albumin using the Vermeulen (1999) mass-action equation — the method behind lab-reported 'calculated free testosterone'. Educational; not a diagnosis.
| Argument | Type | Description |
|---|---|---|
| shbg* | number | SHBG in nmol/L |
| totalT* | number | Total testosterone |
| albuminGdL | number | Albumin in g/dL (default 4.3) |
| totalTUnit | string | Default ng/dL |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"totalT",
"shbg"
],
"properties": {
"shbg": {
"type": "number",
"description": "SHBG in nmol/L",
"exclusiveMinimum": 0
},
"totalT": {
"type": "number",
"description": "Total testosterone",
"exclusiveMinimum": 0
},
"albuminGdL": {
"type": "number",
"maximum": 6,
"description": "Albumin in g/dL (default 4.3)",
"exclusiveMinimum": 0
},
"totalTUnit": {
"enum": [
"ng/dL",
"nmol/L"
],
"type": "string",
"description": "Default ng/dL"
}
}
}Cancel an open (unpaid) checkout session. Paid sessions cannot be canceled here — the patient's complete-details email explains refunds.
| Argument | Type | Description |
|---|---|---|
| checkout_session_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"checkout_session_id"
],
"properties": {
"checkout_session_id": {
"type": "string",
"maxLength": 80,
"minLength": 8
}
}
}For one blood test, the all-in single-test price (sticker + per-order fees) at TestWell and at every tracked direct-to-consumer provider with a verified equivalent — JustLabs, Quest, Labcorp OnDemand, Ulta Lab Tests, Walk-In Lab, HealthLabs and more — each with the date it was verified, plus typical hospital self-pay and Quest Direct reference prices. States the multi-test caveat (fees are paid once per order). Source: the TestWell Blood Test Price Index (CC BY 4.0).
| Argument | Type | Description |
|---|---|---|
| test* | string | Test slug or name, e.g. 'tsh', 'lipid panel', 'vitamin-d' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"test"
],
"properties": {
"test": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Test slug or name, e.g. 'tsh', 'lipid panel', 'vitamin-d'"
}
}
}Honest side-by-side of TestWell and another direct-to-consumer lab service (Quest Direct, Labcorp OnDemand, Function Health, JustLabs, Ulta Lab Tests, …): pricing model, per-order fees, labs, turnaround, where each wins, spot prices on common tests as sticker AND all-in, with verification dates and sources. Call with no argument to list the providers covered.
| Argument | Type | Description |
|---|---|---|
| provider | string | Competitor slug or name, e.g. 'quest-direct', 'Function Health', 'justlabs' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"provider": {
"type": "string",
"maxLength": 60,
"description": "Competitor slug or name, e.g. 'quest-direct', 'Function Health', 'justlabs'"
}
}
}Charge the payment credential the platform obtained for a session that is ready_for_payment and create the order. Input follows the ChatGPT payment-sheet contract: checkout_session_id, buyer, payment_data { token, provider: 'stripe', billing_address }. The token is a Stripe shared payment token (spt_…); platforms without one should send the user to pay_online_url from create_checkout. After payment the patient gets an email link to add date of birth, sex, phone and consent — the lab requisition is issued when that is done.
| Argument | Type | Description |
|---|---|---|
| buyer | any | |
| payment_data* | object | |
| idempotency_key | string | |
| checkout_session_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"checkout_session_id",
"payment_data"
],
"properties": {
"buyer": {
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 160
},
{
"type": "null"
}
]
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
{
"type": "null"
}
]
},
"last_name": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
]
},
"first_name": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
]
},
"phone_number": {
"anyOf": [
{
"type": "string",
"maxLength": 20
},
{
"type": "null"
}
]
}
}
},
{
"type": "null"
}
]
},
"payment_data": {
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"maxLength": 400,
"minLength": 4
},
"provider": {
"type": "string",
"maxLength": 40,
"description": "'stripe'"
},
"billing_address": {
"anyOf": [
{
"type": "object",
"properties": {
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"type": "string"
},
"line_one": {
"type": "string"
},
"line_two": {
"type": "string"
},
"postal_code": {
"type": "string"
}
}
},
{
"type": "null"
}
]
}
}
},
"idempotency_key": {
"type": "string",
"maxLength": 128
},
"checkout_session_id": {
"type": "string",
"maxLength": 80,
"minLength": 8
}
}
}Convert a lab value between US conventional and SI units for 30 common analytes (glucose, cholesterol, testosterone, vitamin D, …) using published factors; hemoglobin A1c uses the NGSP↔IFCC master equation and also returns estimated average glucose.
| Argument | Type | Description |
|---|---|---|
| value* | number | The numeric value to convert |
| analyte* | string | Analyte slug or name, e.g. 'glucose', 'total-cholesterol', 'testosterone', 'vitamin-d', 'a1c' |
| direction | string | Default toSI (US → SI) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"analyte",
"value"
],
"properties": {
"value": {
"type": "number",
"description": "The numeric value to convert"
},
"analyte": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Analyte slug or name, e.g. 'glucose', 'total-cholesterol', 'testosterone', 'vitamin-d', 'a1c'"
},
"direction": {
"enum": [
"toSI",
"toConventional"
],
"type": "string",
"description": "Default toSI (US → SI)"
}
}
}Start a TestWell order for the user: tests/panels, the US state where they will visit the lab (required for pricing and lab routing), and the buyer's name, email and phone. Returns priced line items in cents, the single $6 lab fee, the total, any blocking messages, and pay_online_url — a prefilled cart the user can pay in a browser when the platform has no payment token. Use dry_run to preview without creating a session.
| Argument | Type | Description |
|---|---|---|
| buyer | object | |
| items* | array | |
| state | string | US state code or name where the blood will be drawn |
| dry_run | boolean | Price only; do not create a session |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"buyer": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"last_name": {
"type": "string",
"maxLength": 80
},
"first_name": {
"type": "string",
"maxLength": 80
},
"phone_number": {
"type": "string",
"maxLength": 20
}
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Test or panel slug/id"
},
"quantity": {
"type": "integer",
"maximum": 1,
"minimum": 1
}
}
},
"maxItems": 25,
"minItems": 1
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state code or name where the blood will be drawn"
},
"dry_run": {
"type": "boolean",
"description": "Price only; do not create a session"
}
}
}Find Quest Diagnostics, Labcorp and BioReference patient service centers near a US ZIP code, with address, distance, phone and hours. Walk-ins are accepted at most sites; the requisition arrives by email after physician authorization. Sites in the 48 tracked metros include pageUrl — the site's own page with a per-day hours table, directions and the prices of popular tests at that lab — cite it when giving a location.
| Argument | Type | Description |
|---|---|---|
| lab | string | Limit to one lab |
| zip* | string | 5-digit US ZIP code |
| limit | integer | Max sites (default 10) |
| radiusMiles | integer | Search radius in miles (snapped to 10/20/25/50/100; default 25) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"zip"
],
"properties": {
"lab": {
"enum": [
"quest",
"labcorp",
"bioreference"
],
"type": "string",
"description": "Limit to one lab"
},
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "5-digit US ZIP code"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max sites (default 10)"
},
"radiusMiles": {
"type": "integer",
"maximum": 100,
"minimum": 5,
"description": "Search radius in miles (snapped to 10/20/25/50/100; default 25)"
}
}
}Current state of a checkout session (status, line items, totals, messages, order once paid). Read-only.
| Argument | Type | Description |
|---|---|---|
| checkout_session_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"checkout_session_id"
],
"properties": {
"checkout_session_id": {
"type": "string",
"maxLength": 80,
"minLength": 8
}
}
}Return one of TestWell's educational pages as Markdown: guides (/guides/<slug>), condition workups (/conditions/<slug>), biomarker pages (/biomarkers/<slug>), state pages (/lab-locations/<slug>) or comparisons (/compare/<slug>). Call with no path to list the available guides and conditions.
| Argument | Type | Description |
|---|---|---|
| lang | string | Spanish version when one exists (default en) |
| path | string | Site path, e.g. '/guides/annual-blood-work' or 'conditions/anemia' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"lang": {
"enum": [
"en",
"es"
],
"type": "string",
"description": "Spanish version when one exists (default en)"
},
"path": {
"type": "string",
"maxLength": 160,
"description": "Site path, e.g. '/guides/annual-blood-work' or 'conditions/anemia'"
}
}
}Full public detail for one TestWell test or panel by slug or id: description, biomarkers, CPT, per-lab prices, labs, fasting/prep, turnaround, included tests (panels), FAQ, related conditions, order URL and a Markdown page URL. Tests also carry labPages — per-lab pages (/tests/<slug>/quest, /tests/<slug>/labcorp) with the lab's test code, requisition name, the lab's own dated price vs TestWell's, and walk-in steps — cite them when the user asks about a specific lab.
| Argument | Type | Description |
|---|---|---|
| lang | string | Spanish prose where a translation exists (default en) |
| slug* | string | Catalog slug (from search_tests) or id, e.g. 'tsh', 'general-wellness-panel' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"lang": {
"enum": [
"en",
"es"
],
"type": "string",
"description": "Spanish prose where a translation exists (default en)"
},
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Catalog slug (from search_tests) or id, e.g. 'tsh', 'general-wellness-panel'"
}
}
}Flag each pasted lab value as low / normal / high against TestWell's physician-reviewed reference catalog (130+ markers; sex- and age-specific bands where they exist), with the reviewed 'what high/low suggests' copy, retest guidance, cited sources and links to the marker's page and, where one exists, its high/low interpretation page. Stateless — values are not stored or logged. Educational, not a diagnosis; the user's own report range takes precedence.
| Argument | Type | Description |
|---|---|---|
| age | integer | |
| sex | string | |
| values* | array | Results to explain, e.g. [{marker:'TSH', value:5.2, unit:'mIU/L'}, {marker:'ferritin', value:12}] |
| pregnancy | boolean | |
| postmenopausal | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"values"
],
"properties": {
"age": {
"type": "integer",
"maximum": 120,
"minimum": 0
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string"
},
"values": {
"type": "array",
"items": {
"type": "object",
"required": [
"marker",
"value"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 20
},
"value": {
"type": "number"
},
"marker": {
"type": "string",
"maxLength": 80,
"minLength": 1
}
}
},
"maxItems": 40,
"minItems": 1,
"description": "Results to explain, e.g. [{marker:'TSH', value:5.2, unit:'mIU/L'}, {marker:'ferritin', value:12}]"
},
"pregnancy": {
"type": "boolean"
},
"postmenopausal": {
"type": "boolean"
}
}
}List TestWell's bundled panels (multi-test packages priced below the sum of their tests), optionally filtered by category or maximum price. Sorted by price.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 25) |
| category | string | Catalog category, e.g. 'Hormones', 'General Health' |
| maxPrice | number | Only panels at or under this sticker price (USD) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max results (default 25)"
},
"category": {
"type": "string",
"maxLength": 60,
"description": "Catalog category, e.g. 'Hormones', 'General Health'"
},
"maxPrice": {
"type": "number",
"description": "Only panels at or under this sticker price (USD)",
"exclusiveMinimum": 0
}
}
}Physician-reviewed reference range for a blood test marker (130+ markers), filtered by sex and age when they matter, with what high and low values suggest, retest cadence, how to get tested, cited sources and the review date. Educational; the user's own report range takes precedence.
| Argument | Type | Description |
|---|---|---|
| age | integer | |
| sex | string | |
| marker* | string | Marker name or alias, e.g. 'TSH', 'ferritin', 'HbA1c', 'LDL' |
| pregnancy | boolean | |
| postmenopausal | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"marker"
],
"properties": {
"age": {
"type": "integer",
"maximum": 120,
"minimum": 0
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string"
},
"marker": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Marker name or alias, e.g. 'TSH', 'ferritin', 'HbA1c', 'LDL'"
},
"pregnancy": {
"type": "boolean"
},
"postmenopausal": {
"type": "boolean"
}
}
}Price a set of tests/panels exactly as TestWell's checkout would: per-lab prices for the user's state (New York and New Jersey route to BioReference; Rhode Island is not served), the single $6 lab processing fee, the total, items that can't be ordered and why, and a prefilled cart URL. Use this before quoting any total to a user.
| Argument | Type | Description |
|---|---|---|
| lab | string | Preferred lab outside NY/NJ (default quest) |
| items* | array | Catalog slugs or ids, e.g. ['tsh', 'vitamin-d'] |
| state | string | US state code or name where the user will be drawn, e.g. 'FL' or 'Florida' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"lab": {
"enum": [
"quest",
"labcorp",
"bioreference"
],
"type": "string",
"description": "Preferred lab outside NY/NJ (default quest)"
},
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"maxItems": 25,
"minItems": 1,
"description": "Catalog slugs or ids, e.g. ['tsh', 'vitamin-d']"
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state code or name where the user will be drawn, e.g. 'FL' or 'Florida'"
}
}
}Suggest TestWell panels and tests for stated health goals (e.g. 'annual checkup', 'heart health', 'TRT monitoring') and/or symptoms (e.g. 'fatigue', 'hair loss'). Prefers a curated pre-built panel when one fits; otherwise assembles individual tests within a budget. Educational matching, not a diagnosis.
| Argument | Type | Description |
|---|---|---|
| goals | array | Health goals, e.g. ['energy', 'thyroid'] |
| budget | string | Budget band: low ≈ $80, medium ≈ $200, high ≈ $400 |
| symptoms | array | Symptoms, e.g. ['always cold', 'weight gain'] |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"goals": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 8,
"description": "Health goals, e.g. ['energy', 'thyroid']"
},
"budget": {
"enum": [
"low",
"medium",
"high",
"no_limit"
],
"type": "string",
"description": "Budget band: low ≈ $80, medium ≈ $200, high ≈ $400"
},
"symptoms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 8,
"description": "Symptoms, e.g. ['always cold', 'weight gain']"
}
}
}Search TestWell's public catalog of cash-pay lab tests and panels by keyword, biomarker, CPT code, or category. Returns name, slug, per-lab prices, sample, fasting, turnaround and order URL. Prices are stickers; every order adds one $6 lab processing fee (see quote_order for all-in totals).
| Argument | Type | Description |
|---|---|---|
| lang | string | Return Spanish names/descriptions where a translation exists (default en) |
| type | string | Restrict to individual tests or bundled panels |
| limit | integer | Max results (default 10) |
| query* | string | Keyword, biomarker, CPT code or health goal, e.g. 'vitamin d', 'TSH', '80053', 'cholesterol' |
| category | string | Catalog category, e.g. 'Thyroid', 'Heart Health' |
| orderableOnly | boolean | Exclude items listed as coming soon (default true) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"es"
],
"type": "string",
"description": "Return Spanish names/descriptions where a translation exists (default en)"
},
"type": {
"enum": [
"test",
"panel"
],
"type": "string",
"description": "Restrict to individual tests or bundled panels"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Keyword, biomarker, CPT code or health goal, e.g. 'vitamin d', 'TSH', '80053', 'cholesterol'"
},
"category": {
"type": "string",
"maxLength": 60,
"description": "Catalog category, e.g. 'Thyroid', 'Heart Health'"
},
"orderableOnly": {
"type": "boolean",
"description": "Exclude items listed as coming soon (default true)"
}
}
}Change items, state or buyer details on an open checkout session and get it re-priced. Returns the same session object as create_checkout.
| Argument | Type | Description |
|---|---|---|
| buyer | object | |
| items | array | |
| state | string | |
| checkout_session_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"checkout_session_id"
],
"properties": {
"buyer": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"last_name": {
"type": "string",
"maxLength": 80
},
"first_name": {
"type": "string",
"maxLength": 80
},
"phone_number": {
"type": "string",
"maxLength": 20
}
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"quantity": {
"type": "integer",
"maximum": 1,
"minimum": 1
}
}
},
"maxItems": 25,
"minItems": 1
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2
},
"checkout_session_id": {
"type": "string",
"maxLength": 80,
"minLength": 8
}
}
}