Hosted MCP server exposing US hospital procedure cost data to AI assistants
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.
Looks up cost stats for several (code_type, code) pairs at one hospital (identified by hospital_id) in a single call - the batch counterpart to get_hospital_chargemaster_cost. Use this instead of calling get_hospital_chargemaster_cost once per code when pricing a fixed set of codes at one hospital (e.g. cross-linking a curated list of procedures on a hospital's page). Capped at 100 codes per call; a request over that is rejected with INVALID_ARGUMENT rather than silently truncated.
The (code_type, code) pairs to price at this hospital - up to 100 entries. Results come back in this same order.
Opaque hospital identifier from list_hospitals.
Optional. A revision_id from list_hospitals' per-hospital revisions array, to price that specific past revision instead of the hospital's latest one, applied to every code in this batch. Omit to use the latest revision.
Looks up cost stats for several (code_type, code) pairs at one hospital (identified by hospital_id) in a single call - the batch counterpart to get_hospital_chargemaster_cost. Use this instead of calling get_hospital_chargemaster_cost once per code when pricing a fixed set of codes at one hospital (e.g. cross-linking a curated list of procedures on a hospital's page). Capped at 100 codes per call; a request over that is rejected with INVALID_ARGUMENT rather than silently truncated.
| Argument | Type | Description |
|---|---|---|
| codes* | array | The (code_type, code) pairs to price at this hospital - up to 100 entries. Results come back in this same order. |
| hospital_id* | string | Opaque hospital identifier from list_hospitals. |
| revision_id | string | Optional. A revision_id from list_hospitals' per-hospital revisions array, to price that specific past revision instead of the hospital's latest one, applied to every code in this batch. Omit to use the latest revision. |
{
"type": "object",
"required": [
"hospital_id",
"codes"
],
"properties": {
"codes": {
"type": "array",
"items": {
"type": "object",
"required": [
"code_type",
"code"
],
"properties": {
"code": {
"type": "string"
},
"code_type": {
"type": "string",
"description": "Code system the chargemaster/billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. Hospitals may also support additional proprietary code types not listed here."
},
"methodologies": {
"type": "array",
"items": {
"enum": [
"case rate",
"fee schedule",
"other",
"percent of total billed charges",
"per diem"
],
"type": "string"
},
"description": "Pricing methodologies to price for this code, one result per entry in request order. Omit or pass an empty array to get a single aggregate result across all methodologies for this code."
}
}
},
"description": "The (code_type, code) pairs to price at this hospital - up to 100 entries. Results come back in this same order."
},
"hospital_id": {
"type": "string",
"description": "Opaque hospital identifier from list_hospitals."
},
"revision_id": {
"type": "string",
"description": "Optional. A revision_id from list_hospitals' per-hospital revisions array, to price that specific past revision instead of the hospital's latest one, applied to every code in this batch. Omit to use the latest revision."
}
}
}Returns the distribution of every hospital's price for a code_type/code, computed server-side: min/p10/q1/median/q3/p90/max, standard deviation, a histogram, and the real hospital nearest each percentile. Use this instead of paging through list_hospital_code_costs when you want to know how prices spread across hospitals (e.g. "is $12k high for MS-DRG 788?" - pass reference_price to get the number of hospitals priced below it). All figures are in terms of the chosen statistic (default: each hospital's average price).
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| bin_count | integer | Number of histogram bars. Defaults to 16, capped at 200 (larger values are rejected). |
| code_type* | string | Code system the billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. |
| statistic | string | Which per-hospital figure to distribute: each hospital's average (default), median, lowest filed price, or highest filed price. |
| methodology | string | Pricing methodology. Omit to aggregate across all methodologies. |
| reference_price | number | Optional price to place on the distribution. When positive, hospitals_below_reference counts hospitals priced strictly below it. Negative values are rejected. |
Lookup hospital chargemaster cost
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| code_type* | string | Code system the chargemaster/billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. Hospitals may also support additional proprietary code types not listed here. |
| hospital_id* | string | Opaque hospital identifier from list_hospitals. |
| revision_id | string | Optional. A revision_id from list_hospitals' per-hospital revisions array, to price that specific past revision instead of the hospital's latest one. Omit to use the latest revision. |
| methodologies | array | Pricing methodologies to price, one result per entry in request order. Omit or pass an empty array to get a single aggregate result across all methodologies. |
{
"type": "object",
"required": [
"hospital_id",
"code_type",
"code"
],
"properties": {
"code": {
"type": "string"
},
"code_type": {
"type": "string",
"description": "Code system the chargemaster/billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. Hospitals may also support additional proprietary code types not listed here."
},
"hospital_id": {
"type": "string",
"description": "Opaque hospital identifier from list_hospitals."
},
"revision_id": {
"type": "string",
"description": "Optional. A revision_id from list_hospitals' per-hospital revisions array, to price that specific past revision instead of the hospital's latest one. Omit to use the latest revision."
},
"methodologies": {
"type": "array",
"items": {
"enum": [
"case rate",
"fee schedule",
"other",
"percent of total billed charges",
"per diem"
],
"type": "string"
},
"description": "Pricing methodologies to price, one result per entry in request order. Omit or pass an empty array to get a single aggregate result across all methodologies."
}
}
}Returns every distinct code_type (e.g. CPT, MS-DRG) with catalogued cost data, along with each type's distinct code count and total hospital reports. Unpaginated. Use this to discover which code systems have data before drilling into list_codes.
No arguments.
{
"type": "object",
"properties": {}
}Returns every distinct code catalogued under a given code_type, paginated, with each code's raw chargemaster description and the number of hospitals reporting it. Use this to discover which codes exist under a code system (e.g. all CPT codes) before looking up prices with get_hospital_chargemaster_cost or list_hospital_code_costs. Pass query to text-search codes/descriptions instead of listing a whole code_type. Pass hospital_id to restrict results to codes that one hospital actually reports.
| Argument | Type | Description |
|---|---|---|
| sort | string | Ordering for the returned codes. CODE_SORT_UNSPECIFIED (default) sorts code-alphabetical. CODE_SORT_HOSPITAL_COUNT_DESC sorts most-hospitals-reporting first, for pre-sorted 'top codes' pages. CODE_SORT_SAMPLE_COUNT_DESC sorts by largest network-wide pricing sample size first (sample_count_max, always network-wide regardless of hospital_id) - ranks by how many billing records actually back a code's pricing, rather than by how many hospitals merely report it. CODE_SORT_CODE_DESC is code-alphabetical, reverse order. CODE_SORT_RELEVANCE ranks best text match first (exact code, then code prefix, then description word-start, then description substring), ties broken by network-wide sample count descending, and is only meaningful - and the default - when query is set; without a query it behaves like CODE_SORT_SAMPLE_COUNT_DESC. |
| query | string | Case-insensitive text search: matches the code as a prefix, and substrings of the raw and AI-generated descriptions. Descriptions are only searched for queries of 4+ characters; shorter queries match the code prefix only. When set, code_type may be left empty to search across code types. |
| code_type | string | Code system to list codes for, e.g. "CPT". From list_code_types. May be left empty when query is set, to search across code types (excluding hospital-specific CDM and LOCAL codes) - CodeSummary.code_type tells the hits apart in that case. |
Returns cost stats for every hospital with a matching chargemaster entry for a code_type/code. Use this instead of calling get_hospital_chargemaster_cost once per hospital when comparing prices for the same procedure across hospitals (e.g. "which hospital has the cheapest MS-DRG 652?"). Defaults to returning every matching hospital (currently at most a few hundred) in one call. If the response's next_page_token is non-empty, the result set was truncated: call this tool again passing that exact value as page_token to get the next page, and keep doing so until next_page_token is empty - do not stop after one page and conclude a hospital has no data for this code. The response's total_count field (total across all pages) can be compared against how many results you've accumulated so far as a completeness check.
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| query | string | Optional case-insensitive hospital-name search, applied to the hospitals that report the code and ranked like list_hospitals' query (exact name, name prefix, word-start, other substrings). Blank is treated as unset. total_count and next_page_token describe the matches only. |
| order_by | string | Result ordering. Unspecified (default) is HOSPITAL_COST_ORDER_RELEVANCE when query is set and HOSPITAL_COST_ORDER_HOSPITAL_ID otherwise. Ties break by hospital_id ascending. SAMPLE_COUNT_DESC/ASC order by the guaranteed pricing sample size (sample_count_sum_min); AVG/MEDIAN/MIN/MAX_ASC/DESC order by that price statistic; the *_ASC orders list hospitals with a 0 value (no price filed) last. STD_DEV_ASC/DESC order by how widely a hospital's own filed prices for the code vary (across payers, plans and settings, so contract mix counts as well as pricing discipline; it grows with price level). COEFFICIENT_OF_VARIATION_ASC/DESC order by std dev / average price, comparable across hospitals and procedures. page_token is only valid with the same order_by it was issued for. |
Returns the hospitals supported by the medprice.ai API, with their hospital_id (opaque handle), EIN, name, structured_locations (addresses with geocoded coordinates where available), last_updated_on, and revision history (with per-revision has_payer_data, revision_id, and added_at - when medprice itself ingested that revision, as opposed to revision_date's source-file-reported update date). Defaults to returning the entire registry (currently a few hundred hospitals) in one call. If the response's next_page_token is non-empty, the result set was truncated: call this tool again passing that exact value as page_token to get the next page, and keep doing so until next_page_token is empty - do not stop after one page and conclude the list is complete. The response's total_count field (total across all pages) can be compared against how many hospitals you've accumulated so far as a completeness check, e.g. before answering questions like 'does medprice.ai cover any hospitals in Iowa'.
| Argument | Type | Description |
|---|---|---|
| query | string | Optional case-insensitive hospital-name search: matches substrings of hospital_name, ranked exact name, name prefix, word-start, then other substrings (ties by name). Blank is treated as unset, which keeps the default hospital_id ordering. total_count counts matches only. |
| page_size | integer | Maximum number of hospitals to return. Defaults to 500 (covering the entire current registry in one call), capped at 500. |
| page_token | string | Opaque token from a previous list_hospitals response's next_page_token field. Omit for the first page. Do not pass any other value (e.g. an offset or cursor you construct yourself) here. Only valid with the same query it was issued for. |
| min_sample_count | integer | Minimum pricing sample size: only include hospitals whose price is backed by at least this many billing records (same semantics as list_hospital_code_costs). 0 (default) disables the filter. Negative values are rejected. |
{
"type": "object",
"required": [
"code_type",
"code"
],
"properties": {
"code": {
"type": "string"
},
"bin_count": {
"type": "integer",
"description": "Number of histogram bars. Defaults to 16, capped at 200 (larger values are rejected)."
},
"code_type": {
"type": "string",
"description": "Code system the billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC."
},
"statistic": {
"enum": [
"PRICE_STATISTIC_AVERAGE",
"PRICE_STATISTIC_MEDIAN",
"PRICE_STATISTIC_MIN",
"PRICE_STATISTIC_MAX"
],
"type": "string",
"description": "Which per-hospital figure to distribute: each hospital's average (default), median, lowest filed price, or highest filed price."
},
"methodology": {
"enum": [
"case rate",
"fee schedule",
"other",
"percent of total billed charges",
"per diem"
],
"type": "string",
"description": "Pricing methodology. Omit to aggregate across all methodologies."
},
"reference_price": {
"type": "number",
"description": "Optional price to place on the distribution. When positive, hospitals_below_reference counts hospitals priced strictly below it. Negative values are rejected."
},
"min_sample_count": {
"type": "integer",
"description": "Minimum pricing sample size: only include hospitals whose price is backed by at least this many billing records (same semantics as list_hospital_code_costs). 0 (default) disables the filter. Negative values are rejected."
}
}
}| page_size | integer | Maximum number of results to return. Defaults to 500, capped at 500. |
| page_token | string | Opaque token from a previous list_codes response. Omit for the first page. Only valid with the same query/code_type/sort it was issued for. |
| hospital_id | string | Optional hospital scoping (a hospital_id from list_hospitals): restricts results to codes that hospital actually reports on its latest revision, and makes sample_count_min/max/exact that hospital's own sample size for the code rather than the network-wide total. Unset (default) is network-wide. page_token is only valid with the same hospital_id it was issued for, same as query/code_type/sort. |
{
"type": "object",
"required": [],
"properties": {
"sort": {
"enum": [
"CODE_SORT_UNSPECIFIED",
"CODE_SORT_HOSPITAL_COUNT_DESC",
"CODE_SORT_SAMPLE_COUNT_DESC",
"CODE_SORT_CODE_DESC",
"CODE_SORT_RELEVANCE"
],
"type": "string",
"description": "Ordering for the returned codes. CODE_SORT_UNSPECIFIED (default) sorts code-alphabetical. CODE_SORT_HOSPITAL_COUNT_DESC sorts most-hospitals-reporting first, for pre-sorted 'top codes' pages. CODE_SORT_SAMPLE_COUNT_DESC sorts by largest network-wide pricing sample size first (sample_count_max, always network-wide regardless of hospital_id) - ranks by how many billing records actually back a code's pricing, rather than by how many hospitals merely report it. CODE_SORT_CODE_DESC is code-alphabetical, reverse order. CODE_SORT_RELEVANCE ranks best text match first (exact code, then code prefix, then description word-start, then description substring), ties broken by network-wide sample count descending, and is only meaningful - and the default - when query is set; without a query it behaves like CODE_SORT_SAMPLE_COUNT_DESC."
},
"query": {
"type": "string",
"description": "Case-insensitive text search: matches the code as a prefix, and substrings of the raw and AI-generated descriptions. Descriptions are only searched for queries of 4+ characters; shorter queries match the code prefix only. When set, code_type may be left empty to search across code types."
},
"code_type": {
"type": "string",
"description": "Code system to list codes for, e.g. \"CPT\". From list_code_types. May be left empty when query is set, to search across code types (excluding hospital-specific CDM and LOCAL codes) - CodeSummary.code_type tells the hits apart in that case."
},
"page_size": {
"type": "integer",
"description": "Maximum number of results to return. Defaults to 500, capped at 500."
},
"page_token": {
"type": "string",
"description": "Opaque token from a previous list_codes response. Omit for the first page. Only valid with the same query/code_type/sort it was issued for."
},
"hospital_id": {
"type": "string",
"description": "Optional hospital scoping (a hospital_id from list_hospitals): restricts results to codes that hospital actually reports on its latest revision, and makes sample_count_min/max/exact that hospital's own sample size for the code rather than the network-wide total. Unset (default) is network-wide. page_token is only valid with the same hospital_id it was issued for, same as query/code_type/sort."
}
}
}| code_type* | string | Code system the chargemaster/billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. Hospitals may also support additional proprietary code types not listed here. |
| page_size | integer | Maximum number of results to return. Defaults to 500 (covering every matching hospital in one call at the current registry size), capped at 500. |
| page_token | string | Opaque token from a previous list_hospital_code_costs response's next_page_token field. Omit for the first page. Only valid with the same code_type/code/methodology/min_sample_count/query/order_by it was issued for. |
| methodology | string | Pricing methodology. Omit to aggregate across all methodologies. |
| min_sample_count | integer | Minimum pricing sample size: only return hospitals whose price is backed by at least this many billing records (compared against the de-identified range's lower bound, so a '1 through 10' row counts as 1). 0 (default) disables the filter. Pass 1 to exclude hospitals with no real sample data at all (most filings report 0/0, indistinguishable from a genuine zero). total_count and next_page_token describe the filtered set. Negative values are rejected. |
{
"type": "object",
"required": [
"code_type",
"code"
],
"properties": {
"code": {
"type": "string"
},
"query": {
"type": "string",
"description": "Optional case-insensitive hospital-name search, applied to the hospitals that report the code and ranked like list_hospitals' query (exact name, name prefix, word-start, other substrings). Blank is treated as unset. total_count and next_page_token describe the matches only."
},
"order_by": {
"enum": [
"HOSPITAL_COST_ORDER_UNSPECIFIED",
"HOSPITAL_COST_ORDER_HOSPITAL_ID",
"HOSPITAL_COST_ORDER_RELEVANCE",
"HOSPITAL_COST_ORDER_SAMPLE_COUNT_DESC",
"HOSPITAL_COST_ORDER_SAMPLE_COUNT_ASC",
"HOSPITAL_COST_ORDER_AVG_ASC",
"HOSPITAL_COST_ORDER_AVG_DESC",
"HOSPITAL_COST_ORDER_MEDIAN_ASC",
"HOSPITAL_COST_ORDER_MEDIAN_DESC",
"HOSPITAL_COST_ORDER_MIN_ASC",
"HOSPITAL_COST_ORDER_MIN_DESC",
"HOSPITAL_COST_ORDER_MAX_ASC",
"HOSPITAL_COST_ORDER_MAX_DESC",
"HOSPITAL_COST_ORDER_STD_DEV_ASC",
"HOSPITAL_COST_ORDER_STD_DEV_DESC",
"HOSPITAL_COST_ORDER_COEFFICIENT_OF_VARIATION_ASC",
"HOSPITAL_COST_ORDER_COEFFICIENT_OF_VARIATION_DESC"
],
"type": "string",
"description": "Result ordering. Unspecified (default) is HOSPITAL_COST_ORDER_RELEVANCE when query is set and HOSPITAL_COST_ORDER_HOSPITAL_ID otherwise. Ties break by hospital_id ascending. SAMPLE_COUNT_DESC/ASC order by the guaranteed pricing sample size (sample_count_sum_min); AVG/MEDIAN/MIN/MAX_ASC/DESC order by that price statistic; the *_ASC orders list hospitals with a 0 value (no price filed) last. STD_DEV_ASC/DESC order by how widely a hospital's own filed prices for the code vary (across payers, plans and settings, so contract mix counts as well as pricing discipline; it grows with price level). COEFFICIENT_OF_VARIATION_ASC/DESC order by std dev / average price, comparable across hospitals and procedures. page_token is only valid with the same order_by it was issued for."
},
"code_type": {
"type": "string",
"description": "Code system the chargemaster/billing code belongs to, e.g. APR-DRG, CDM, CPT, HCPCS, MS-DRG, RC. Hospitals may also support additional proprietary code types not listed here."
},
"page_size": {
"type": "integer",
"description": "Maximum number of results to return. Defaults to 500 (covering every matching hospital in one call at the current registry size), capped at 500."
},
"page_token": {
"type": "string",
"description": "Opaque token from a previous list_hospital_code_costs response's next_page_token field. Omit for the first page. Only valid with the same code_type/code/methodology/min_sample_count/query/order_by it was issued for."
},
"methodology": {
"enum": [
"case rate",
"fee schedule",
"other",
"percent of total billed charges",
"per diem"
],
"type": "string",
"description": "Pricing methodology. Omit to aggregate across all methodologies."
},
"min_sample_count": {
"type": "integer",
"description": "Minimum pricing sample size: only return hospitals whose price is backed by at least this many billing records (compared against the de-identified range's lower bound, so a '1 through 10' row counts as 1). 0 (default) disables the filter. Pass 1 to exclude hospitals with no real sample data at all (most filings report 0/0, indistinguishable from a genuine zero). total_count and next_page_token describe the filtered set. Negative values are rejected."
}
}
}{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional case-insensitive hospital-name search: matches substrings of hospital_name, ranked exact name, name prefix, word-start, then other substrings (ties by name). Blank is treated as unset, which keeps the default hospital_id ordering. total_count counts matches only."
},
"page_size": {
"type": "integer",
"description": "Maximum number of hospitals to return. Defaults to 500 (covering the entire current registry in one call), capped at 500."
},
"page_token": {
"type": "string",
"description": "Opaque token from a previous list_hospitals response's next_page_token field. Omit for the first page. Do not pass any other value (e.g. an offset or cursor you construct yourself) here. Only valid with the same query it was issued for."
}
}
}