Search source-labeled hospital prices, CPT codes, providers, and healthcare cost estimates.
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.
Compare hospitals near a ZIP code for one procedure code, ranked by price (or distance) only. answer gives the lowest cash price in the radius, the lowest rate for the named insurer, a cash-or-insurance verdict, the next question to ask the user, and a Loa search link; lead with it. answer prices are single published prices; an option's price is the middle of a hospital's published prices when it lists several. Without insurer, price is the published cash (self-pay) price. With insurer, price is that insurer's negotiated rate, which is not the patient's out-of-pocket cost. Each option says what the price includes, its source and date, distance in miles, and loa_link for booking or contact. Every priced hospital in the radius is ranked before limit applies. Hospitals with no price for the code are counted in hospitals_without_price; hospitals without a matching cash price or insurer rate are listed last with price null. Get the code from search_cpt_codes first. Do not send member IDs or other personal details.
One CPT or HCPCS code, e.g. "73721" for a knee MRI
5-digit US ZIP code to search around
Order by price (default) or distance
Maximum hospitals to return (default 10, max 20)
Insurance company name only, e.g. "Aetna" or "Blue Cross"; no member IDs
Search radius in miles (default 25, max 100)
Whether the user has met this year's deductible; refines answer.verdict
Tool list last changed Oct 23, 2026.
Compare hospitals near a ZIP code for one procedure code, ranked by price (or distance) only. answer gives the lowest cash price in the radius, the lowest rate for the named insurer, a cash-or-insurance verdict, the next question to ask the user, and a Loa search link; lead with it. answer prices are single published prices; an option's price is the middle of a hospital's published prices when it lists several. Without insurer, price is the published cash (self-pay) price. With insurer, price is that insurer's negotiated rate, which is not the patient's out-of-pocket cost. Each option says what the price includes, its source and date, distance in miles, and loa_link for booking or contact. Every priced hospital in the radius is ranked before limit applies. Hospitals with no price for the code are counted in hospitals_without_price; hospitals without a matching cash price or insurer rate are listed last with price null. Get the code from search_cpt_codes first. Do not send member IDs or other personal details.
| Argument | Type | Description |
|---|---|---|
| sort | string | Order by price (default) or distance |
| limit | integer | Maximum hospitals to return (default 10, max 20) |
| insurer | string | Insurance company name only, e.g. "Aetna" or "Blue Cross"; no member IDs |
| cpt_code* | string | One CPT or HCPCS code, e.g. "73721" for a knee MRI |
| zip_code* | string | 5-digit US ZIP code to search around |
| radius_miles | integer | Search radius in miles (default 25, max 100) |
| deductible_met | string | Whether the user has met this year's deductible; refines answer.verdict |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"cpt_code",
"zip_code"
],
"properties": {
"sort": {
"enum": [
"price",
"distance"
],
"type": "string",
"description": "Order by price (default) or distance"
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum hospitals to return (default 10, max 20)"
},
"insurer": {
"type": "string",
"maxLength": 60,
"description": "Insurance company name only, e.g. \"Aetna\" or \"Blue Cross\"; no member IDs"
},
"cpt_code": {
"type": "string",
"description": "One CPT or HCPCS code, e.g. \"73721\" for a knee MRI"
},
"zip_code": {
"type": "string",
"description": "5-digit US ZIP code to search around"
},
"radius_miles": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Search radius in miles (default 25, max 100)"
},
"deductible_met": {
"enum": [
"yes",
"no",
"not_sure"
],
"type": "string",
"description": "Whether the user has met this year's deductible; refines answer.verdict"
}
}
}Explain the source labels, provenance, confidence, and caveats behind Loa prices for one hospital or provider entity. Use this when an agent needs to tell a user why prices are MRF-published, Loa-reviewed, estimated, or unavailable.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Exact Loa entity slug from search_entities. |
| limit | number | Maximum number of prices to inspect, default 50, max 100. |
| cpt_codes | array | Optional CPT codes to explain. If omitted, explains current indexed prices. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Exact Loa entity slug from search_entities."
},
"limit": {
"type": "number",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of prices to inspect, default 50, max 100."
},
"cpt_codes": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 25,
"minItems": 1,
"description": "Optional CPT codes to explain. If omitted, explains current indexed prices."
}
}
}Return source-labeled prices for a Loa hospital or provider entity slug using the shared resolver. Use search_entities first if the slug is unknown. Results include provenance and explicit unavailable rows for requested CPT codes with no current price.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Exact Loa entity slug from search_entities or a Loa SEO page. |
| limit | number | Maximum number of prices, default 50, max 100. |
| cpt_codes | array | Optional CPT codes to filter. If omitted, returns current indexed prices up to the limit. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Exact Loa entity slug from search_entities or a Loa SEO page."
},
"limit": {
"type": "number",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of prices, default 50, max 100."
},
"cpt_codes": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 25,
"minItems": 1,
"description": "Optional CPT codes to filter. If omitted, returns current indexed prices up to the limit."
}
}
}Return one Loa hospital or provider entity profile by exact slug or entity_pages.id. Includes profile-field provenance so agents can distinguish source-file fields from Loa-reviewed overrides.
| Argument | Type | Description |
|---|---|---|
| slug_or_id* | string | Exact Loa entity slug or entity_pages.id from search_entities. |
| entity_type | string | Optional disambiguation when slug_or_id is a slug. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug_or_id"
],
"properties": {
"slug_or_id": {
"type": "string",
"minLength": 1,
"description": "Exact Loa entity slug or entity_pages.id from search_entities."
},
"entity_type": {
"enum": [
"hospital",
"provider"
],
"type": "string",
"description": "Optional disambiguation when slug_or_id is a slug."
}
}
}Hospital-specific pricing tool for source-labeled Loa runtime data. Returns source-labeled Published MRF prices and Loa Verified Provider Price overlays for CPT codes. cash_price is the cash/self-pay price, list_price is the gross charge before discounts (most patients pay less), and insurance_prices are payer-negotiated rates for the named plan, not out-of-pocket costs. Any of these can be null when the hospital did not publish that price. Use this when comparing named hospitals or checking a quoted hospital price against available source rows.
| Argument | Type | Description |
|---|---|---|
| cpt_codes* | array | CPT procedure codes to look up pricing for |
| hospital_ids* | array | Hospital IDs from search_hospitals results |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"hospital_ids",
"cpt_codes"
],
"properties": {
"cpt_codes": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "CPT procedure codes to look up pricing for"
},
"hospital_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "Hospital IDs from search_hospitals results"
}
}
}Preferred benchmark pricing tool. Returns hospital-level market statistics for CPT codes from Loa's published hospital price-transparency data: cash/self-pay prices, list prices (gross charges before discounts), overall insurer-negotiated rates, and rates for the most common insurers. Each hospital counts once. Lead with the median and the p25-p75 range rather than min or max. Figures are statewide or national, never local to a ZIP code. When status is insufficient_data, say Loa doesn't have enough data instead of estimating, and always relay the limitations. Negotiated rates are not out-of-pocket costs.
| Argument | Type | Description |
|---|---|---|
| state | string | State for regional pricing (e.g. "CA", "New York"). Unknown states return McpToolInvalidInput. When fewer than 5 hospitals in the state published a price, national figures are returned with a limitation. |
| zip_code | string | ZIP code, used only to pick the state when state is omitted |
| cpt_codes* | array | CPT codes to look up (e.g. ["99213", "93000"]) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"cpt_codes"
],
"properties": {
"state": {
"type": "string",
"description": "State for regional pricing (e.g. \"CA\", \"New York\"). Unknown states return McpToolInvalidInput. When fewer than 5 hospitals in the state published a price, national figures are returned with a limitation."
},
"zip_code": {
"type": "string",
"description": "ZIP code, used only to pick the state when state is omitted"
},
"cpt_codes": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "CPT codes to look up (e.g. [\"99213\", \"93000\"])"
}
}
}Quick cash-price ballpark for one or more CPT codes, using the median cash price across hospitals in the state (from zip_code) or nationally. priceRange is the typical range (25th to 75th percentile of hospitals). Codes without enough data return insufficient_data and are listed in missingCodes; the total is null unless every code has data. Never fill gaps with your own estimate. For insurer rates or hospital-specific prices, use get_market_pricing or get_hospital_pricing.
| Argument | Type | Description |
|---|---|---|
| zip_code | string | ZIP code used to pick the state (omit for national figures) |
| procedure_codes* | array | CPT procedure codes to price (e.g. ["99213", "85025"]) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"procedure_codes"
],
"properties": {
"zip_code": {
"type": "string",
"description": "ZIP code used to pick the state (omit for national figures)"
},
"procedure_codes": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "CPT procedure codes to price (e.g. [\"99213\", \"85025\"])"
}
}
}Canonical code-lookup tool for this server. Search Loa's CPT/HCPCS index using exact codes, clinical terms, or consumer phrases. Use this first when the user does not already know the CPT code, before calling pricing tools.
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum number of results (default 10, max 25) |
| query* | string | Concise procedure name, medical term, or candidate CPT code; omit personal narratives and identifiers (e.g. "knee MRI", "blood work", "99213") |
| category | string | Filter by category: "evaluation_management", "laboratory", "radiology", "surgery", "preventive" |
| specialty | string | Filter by medical specialty (e.g. "cardiology", "dermatology") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Maximum number of results (default 10, max 25)"
},
"query": {
"type": "string",
"description": "Concise procedure name, medical term, or candidate CPT code; omit personal narratives and identifiers (e.g. \"knee MRI\", \"blood work\", \"99213\")"
},
"category": {
"type": "string",
"description": "Filter by category: \"evaluation_management\", \"laboratory\", \"radiology\", \"surgery\", \"preventive\""
},
"specialty": {
"type": "string",
"description": "Filter by medical specialty (e.g. \"cardiology\", \"dermatology\")"
}
}
}Search Loa runtime hospital and provider entity pages by name or state. Use this before get_entity_prices when the user names a hospital or provider but does not know the exact Loa slug.
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum number of results, default 20, max 50. |
| query | string | Hospital or provider name to search for. |
| state | string | Two-letter state code or full state name, e.g. CA or New York. |
| entity_type | string | Optional filter for hospital or provider entities. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results, default 20, max 50."
},
"query": {
"type": "string",
"description": "Hospital or provider name to search for."
},
"state": {
"type": "string",
"description": "Two-letter state code or full state name, e.g. CA or New York."
},
"entity_type": {
"enum": [
"hospital",
"provider"
],
"type": "string",
"description": "Optional filter for hospital or provider entities."
}
}
}Search Loa's hospital directory by name or location and return hospital IDs plus address details. Use the returned hospital_ids with get_hospital_pricing to fetch source-labeled Published MRF and reviewed overlay prices.
| Argument | Type | Description |
|---|---|---|
| city | string | City name |
| name | string | Hospital name to search for |
| limit | number | Max results (default 20) |
| state | string | Two-letter state code or full state name, e.g. "CA" or "New York". |
| zip_code | string | ZIP code |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
"name": {
"type": "string",
"description": "Hospital name to search for"
},
"limit": {
"type": "number",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Max results (default 20)"
},
"state": {
"type": "string",
"description": "Two-letter state code or full state name, e.g. \"CA\" or \"New York\"."
},
"zip_code": {
"type": "string",
"description": "ZIP code"
}
}
}Search public CMS NPI Registry data for clinicians and healthcare organizations by specialty, name, or location. Use returned provenance to understand the registry source and scope. Use this for provider lookup, not pricing.
| Argument | Type | Description |
|---|---|---|
| name | string | Provider name to search for (e.g. "John Smith") |
| limit | number | Max results (default 20) |
| location | object | Location to search in |
| specialty | string | Medical specialty (e.g. "Cardiology", "Family Medicine") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"description": "Provider name to search for (e.g. \"John Smith\")"
},
"limit": {
"type": "number",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Max results (default 20)"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
"state": {
"type": "string",
"description": "State code or full name (e.g. \"CA\", \"California\")"
},
"zip_code": {
"type": "string",
"description": "ZIP code"
}
},
"description": "Location to search in"
},
"specialty": {
"type": "string",
"description": "Medical specialty (e.g. \"Cardiology\", \"Family Medicine\")"
}
}
}Submit a profile, listing, or price correction for Loa review without requiring a provider portal. This is the only mutating provider/entity tool. It requires OAuth, captures submitter and source evidence, records linked-provider status when available, and never changes public data until Loa approves the request.
| Argument | Type | Description |
|---|---|---|
| attestation | string | How the submitter is connected to the submitted evidence. |
| entity_slug | string | Exact Loa entity slug if entity_page_id is not available. |
| entity_type | string | Entity kind for the requested update; use unknown only when it cannot be determined. |
| price_items | array | Optional structured price rows proposed for Loa review. |
| source_urls | array | Optional public URLs reviewers can use to verify the submitted change. |
| request_type* | string | Type of reviewed change being requested. |
| source_notes | string | Short verification notes, source context, or callback instructions. |
| entity_page_id | string | Loa entity_pages.id for the provider or hospital. |
| submitter_name | string | Name of the person submitting the request. |
| submitter_role | string | Submitter role, such as billing manager or authorized agent. |
| idempotency_key | string | Optional stable retry key. Loa derives one from the payload if omitted. |
| submitter_email* | string | Work email for the submitting representative. |
| submitter_phone | string | Optional callback phone number for reviewer follow-up. |
| proposed_changes | object | Structured profile or listing fields proposed for Loa review. |
| uploaded_file_url | string | Optional public URL for an uploaded evidence file. |
| submitter_organization | string | Provider, hospital, or agent organization represented by the submitter. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"submitter_email",
"request_type"
],
"properties": {
"attestation": {
"enum": [
"provider_representative",
"authorized_agent",
"public_source",
"other"
],
"type": "string",
"description": "How the submitter is connected to the submitted evidence."
},
"entity_slug": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "Exact Loa entity slug if entity_page_id is not available."
},
"entity_type": {
"enum": [
"hospital",
"provider",
"unknown"
],
"type": "string",
"default": "unknown",
"description": "Entity kind for the requested update; use unknown only when it cannot be determined."
},
"price_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"cpt_code"
],
"properties": {
"setting": {
"type": "string",
"maxLength": 100
},
"cpt_code": {
"type": "string",
"maxLength": 20,
"minLength": 3
},
"code_type": {
"type": "string",
"default": "CPT",
"maxLength": 20,
"minLength": 1
},
"component": {
"enum": [
"global",
"professional",
"facility",
"unknown"
],
"type": "string",
"default": "unknown"
},
"plan_name": {
"type": "string",
"maxLength": 300
},
"exclusions": {
"type": "string",
"maxLength": 1000
},
"payer_name": {
"type": "string",
"maxLength": 300
},
"price_kind": {
"enum": [
"cash",
"discounted_cash",
"package_cash",
"payer_negotiated"
],
"type": "string",
"default": "cash"
},
"price_notes": {
"type": "string",
"maxLength": 1000
},
"service_name": {
"type": "string",
"maxLength": 300
},
"billing_class": {
"type": "string",
"maxLength": 100
},
"included_services": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
}
},
"proposed_price_cents": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
}
},
"default": [],
"maxItems": 100,
"description": "Optional structured price rows proposed for Loa review."
},
"source_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"default": [],
"maxItems": 10,
"description": "Optional public URLs reviewers can use to verify the submitted change."
},
"request_type": {
"enum": [
"price_update",
"profile_correction",
"new_listing",
"remove_listing",
"other"
],
"type": "string",
"description": "Type of reviewed change being requested."
},
"source_notes": {
"type": "string",
"maxLength": 2000,
"description": "Short verification notes, source context, or callback instructions."
},
"entity_page_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Loa entity_pages.id for the provider or hospital."
},
"submitter_name": {
"type": "string",
"maxLength": 200,
"description": "Name of the person submitting the request."
},
"submitter_role": {
"type": "string",
"maxLength": 200,
"description": "Submitter role, such as billing manager or authorized agent."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 8,
"description": "Optional stable retry key. Loa derives one from the payload if omitted."
},
"submitter_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,}$",
"description": "Work email for the submitting representative."
},
"submitter_phone": {
"type": "string",
"maxLength": 50,
"description": "Optional callback phone number for reviewer follow-up."
},
"proposed_changes": {
"type": "object",
"default": {},
"description": "Structured profile or listing fields proposed for Loa review.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"uploaded_file_url": {
"type": "string",
"format": "uri",
"description": "Optional public URL for an uploaded evidence file."
},
"submitter_organization": {
"type": "string",
"maxLength": 300,
"description": "Provider, hospital, or agent organization represented by the submitter."
}
}
}