Medical Billing MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Medical Billing MCPWhat does denial code CO-50 mean and how to fix it?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š„ Medical Billing MCP
Open-source billing knowledge for AI assistants
The Problem: A billing staff member gets a denial code. They Google it, read 5 articles, call the payer, wait on hold for 45 minutes, and maybe get an answer. Cost: 30-60 minutes per denial.
The Solution: Ask an AI assistant. Get instant answers with resolution steps. Cost: 2 minutes.
What Is This?
An MCP (Model Context Protocol) server that gives AI assistants like Claude access to medical billing knowledge:
Tool | What It Does |
| Look up diagnosis codes |
| Look up procedure codes |
| Understand when to use modifiers (25, 59, etc.) |
| Understand denial codes + how to fix them |
| Get payer-specific rules (timely filing, etc.) |
| Check if codes are bundled together |
This is a knowledge layer. You bring your own payer connectivity (Stedi, Availity, Change Healthcare, etc.).
Related MCP server: MCP Healthcare Server
Quick Start
Option 1: Docker (Recommended)
# Clone the repo
git clone https://github.com/Kustode-ce/medical-billing-mcp.git
cd medical-billing-mcp
# Run with Docker
docker compose up -d
# Test it
docker compose exec mcp python -m medical_billing_mcp --testOption 2: Local Install
# Clone and install
git clone https://github.com/Kustode-ce/medical-billing-mcp.git
cd medical-billing-mcp
pip install -e .
# Run the server
python -m medical_billing_mcpConfigure Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"medical-billing": {
"command": "python",
"args": ["-m", "medical_billing_mcp"]
}
}
}Config locations:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Restart Claude Desktop.
Usage Examples
Once installed, ask Claude questions like:
Understanding Codes
"What does ICD-10 code E11.9 mean?"
"What's CPT code 99214 and what documentation do I need?"
"When should I use modifier 25?"
Resolving Denials
"I got denial code CO-50. What does it mean and how do I fix it?"
"My claim was denied for 'not medically necessary'. What are the resolution steps?"
Payer Rules
"What's Medicare's timely filing limit?"
"What are Blue Cross MA's known billing issues?"
Bundling
"Are CPT codes 99213 and 36415 bundled?"
See docs/examples/ for sample conversations.
Architecture
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā AI ASSISTANT (Claude) ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā MCP Protocol
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā MEDICAL BILLING MCP ā
ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā server.py ā ā
ā ā (Tool definitions + routing) ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā handlers.py ā ā
ā ā (Lookup functions) ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā data/ ā ā
ā ā ā ā
ā ā icd10.json cpt.json modifiers.json ā ā
ā ā denials.json payers.json bundling.json ā ā
ā ā ā ā
ā ā [Community contributes here] ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāSee ARCHITECTURE.md for detailed design documentation.
What This Is NOT
Not In Scope | Why | You Already Have |
Claim submission | Not our job | Stedi, Availity |
Eligibility checks | Real-time payer data | Stedi, payer portals |
Prior auth submission | Payer integration | Cohere, eviCore |
EOB/ERA parsing | Clearinghouse function | Stedi, clearinghouse |
PHI storage | Security/compliance | Your EHR/PMS |
We provide knowledge. You provide connectivity.
Data Sources
All data is from public sources:
Data | Source |
ICD-10 codes | CMS |
CPT descriptions | AMA (limited - full requires license) |
HCPCS codes | CMS |
Denial codes (CARC/RARC) | X12 / Washington Publishing |
Payer rules | Public payer manuals |
Contributing
We welcome contributions! The easiest way to help:
Add Payer Rules
Know a payer's quirks? Edit data/payers.json:
{
"bcbs_tx": {
"name": "Blue Cross Blue Shield Texas",
"timely_filing_days": 95,
"known_issues": ["Requires modifier 25 documentation"]
}
}Add Denial Resolution Steps
Fixed a tricky denial? Share how in data/denials.json:
{
"CO-151": {
"description": "Service not covered",
"resolution_steps": [
"Check if service requires prior auth",
"Verify correct place of service code",
"Appeal with medical necessity documentation"
]
}
}See CONTRIBUTING.md for full guidelines.
Project Structure
medical-billing-mcp/
āāā src/medical_billing_mcp/
ā āāā __init__.py
ā āāā __main__.py
ā āāā server.py # MCP server
ā āāā handlers.py # Lookup functions
ā āāā data/ # JSON knowledge base
ā āāā icd10.json
ā āāā cpt.json
ā āāā modifiers.json
ā āāā denials.json
ā āāā payers.json
ā āāā bundling.json
āāā tests/
āāā docs/
ā āāā diagrams/ # Architecture diagrams
ā āāā api/ # API documentation
ā āāā examples/ # Usage examples
āāā docker/
ā āāā Dockerfile
ā āāā docker-compose.yml
āāā ARCHITECTURE.md
āāā CONTRIBUTING.md
āāā LICENSE
āāā README.mdLicense
MIT License - see LICENSE
Note: CPT codes are copyrighted by the AMA. This tool provides limited descriptions for educational purposes. For full CPT data, obtain an AMA license.
Support
š Issues: GitHub Issues
š¬ Discussions: GitHub Discussions
Made for the healthcare community ā¤ļø
Because providers should spend time with patients, not fighting insurance companies.
Available Tools
6 toolslookup_bundlingC
Check if procedure codes are bundled together
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes | CPT codes to check (e.g., ['99213', '36415']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose whether the tool is read-only, what it returns, or any side effects. For a check tool, this is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence directly stating the tool's purpose with no extraneous information. Efficient for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or description of return values. An agent cannot know what the tool returns (boolean, list of bundled pairs, etc.). Missing context on bundling rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully described in the input schema (CPT codes array). The description adds no additional meaning beyond the schema, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks if procedure codes are bundled together, distinguishing it from sibling lookup tools (e.g., lookup_cpt for code details). However, it lacks specificity on what 'bundled' means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like lookup_cpt or lookup_payer. Missing information on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_cptA
Look up CPT procedure codes by code or search term
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | CPT code (e.g., '99213') | |
| search | No | Search term (e.g., 'office visit') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states the lookup action without disclosing traits like read-only nature, authentication needs, rate limits, or whether it returns full code details. The agent is left to infer safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that efficiently conveys the tool's purpose with no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with two well-documented parameters and no output schema, the description is fully adequate. It tells the agent what the tool does, how to invoke it, and the expected inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds value by implying the parameters are alternatives ('by code or search term'), which is not explicit in the schema. This helps the agent decide which parameter to use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'look up' and the resource 'CPT procedure codes', specifying the lookup method ('by code or search term'). It naturally differentiates from sibling tools like lookup_icd10 or lookup_modifier which handle different code types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for CPT code lookups, but provides no explicit guidance on when to use it versus sibling tools (e.g., lookup_icd10). No when-not-to-use or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_denialB
Look up denial codes (CARC/RARC) with resolution steps
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Denial code (e.g., 'CO-50', '50') | |
| search | No | Search term (e.g., 'medical necessity') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits like read-only or authorization needs, but it only mentions returning 'resolution steps', leaving safety and operational behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff, effectively front-loading the core function. It could be slightly more structured but is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description mentions 'resolution steps' but does not detail the output format, which is needed since there is no output schema. It is adequate but not comprehensive for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both 'code' and 'search' parameters. The description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up denial codes (CARC/RARC) with resolution steps, specifying the verb 'look up' and the resource 'denial codes', and it distinguishes from sibling tools like lookup_bundling, lookup_cpt, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like lookup_cpt or lookup_payer. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_icd10A
Look up ICD-10 diagnosis codes by code or search term
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ICD-10 code (e.g., 'E11.9') | |
| search | No | Search term (e.g., 'diabetes') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It implies a read-only lookup operation, which is adequate, but does not disclose any additional traits such as authentication requirements, result formatting, or rate limits. For a simple lookup, the minimal disclosure is acceptable but lacks richness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of ten words that immediately conveys the tool's purpose and input methods. No wasted words or redundancy. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the essential use case: looking up codes by code or search term. It does not specify what the output contains (e.g., full diagnosis details, list of results), which is a minor gap, but the core functionality is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters have descriptions). The description's phrase 'by code or search term' mirrors the schema but does not add new semantic value beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Look up' and the resource 'ICD-10 diagnosis codes', specifying two distinct input methods (by code or search term). This distinguishes it from sibling tools like lookup_cpt or lookup_modifier which deal with different code types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of the sibling tools (all are lookup tools for different medical code types) implies this tool is appropriate when querying ICD-10 codes. No explicit exclusions or when-not-to-use guidance is provided, but the purpose is clear enough for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_modifierB
Look up billing modifier usage and documentation requirements
| Name | Required | Description | Default |
|---|---|---|---|
| modifier | Yes | Modifier code (e.g., '25', '59') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only describes the purpose (lookup) without addressing permissions, rate limits, data freshness, or what constitutes 'usage' or 'documentation requirements'. The agent lacks insight into potential risks or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. While it efficiently conveys the core purpose, it could include more detail without becoming wordy. It earns a high score for lack of fluff but loses a point for being slightly under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description is incomplete. It does not hint at the return format, whether results are real-time, or what aspects of 'usage' are covered. A more complete description would improve agent confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the 'modifier' parameter. The tool description adds no additional meaning beyond the schema. Baseline 3 is appropriate since the schema already documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Look up') and resource ('billing modifier usage and documentation requirements'). This distinguishes it from sibling tools that handle other billing concepts like bundling, CPT codes, denials, ICD10, and payers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus the siblings (e.g., 'for modifier-specific queries, use this; for code definitions, use lookup_cpt'). The intent is implied by the tool name and siblings, but a more direct statement would improve decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_payerC
Look up payer-specific billing rules
| Name | Required | Description | Default |
|---|---|---|---|
| payer | Yes | Payer name (e.g., 'medicare', 'bcbs_ma') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, or side effects. The verb 'look up' implies read-only but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no extraneous text. Could be slightly more informative without being verbose, but acceptable for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple lookup with one parameter and no output schema, the description minimally covers the purpose. However, it lacks details on return format or examples, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (one parameter with a description). The description adds no additional meaning beyond the schema, but baseline is 3 for high coverage. No extra context provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'look up' and the resource 'payer-specific billing rules'. It distinguishes from sibling tools which focus on bundling, CPT, etc. However, 'billing rules' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No context provided for appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct category of medical billing data (CPT, ICD-10, modifiers, bundling, denials, payer rules), with no overlap or ambiguity.
All tools follow the consistent 'lookup_<entity>' pattern using snake_case, making predictable and easy to understand.
6 tools cover the major lookup types for medical billing without being overly numerous or sparse, a well-scoped set.
Core billing lookups (CPT, ICD-10, modifiers, bundling, denials, payer rules) are covered; missing HCPCS or other minor codes are not critical for most scenarios.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Deterministic CMS NCCI/MUE claim scrubbing and CARC/RARC denial explanations, cited to source.
Medical RAG: semantic search for clinical guidelines, drug interactions, diagnoses & EHR data.
Medical RAG: semantic search for clinical guidelines, drug interactions, diagnoses & EHR data.
Connect your team's living knowledge base ā docs, data, issues, CRM ā to Claude and ChatGPT.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access Medikode's medical coding platform for validating CPT/ICD-10 codes, performing chart quality assurance, parsing EOBs, calculating RAF scores, and extracting HCC codes from clinical documentation.232ISC
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to medical data including drug interactions, ICD-10 codes, FDA adverse event reports, and clinical guidelines. It enables LLMs to query databases like openFDA, PubMed, and CMS for pharmaceutical and clinical information.1MIT
- AlicenseAqualityBmaintenanceHealthcare billing AI for agents ā 12 tools for ICD-10/CPT/HCPCS code lookup (80K+ codes), prior auth prediction, medical NER, claims validation, HIPAA compliance auditing, and provider/drug enrichment. Pay-per-call via credits or USDC.20442MIT

vClinic MCP Serverofficial
FlicenseNot gradedqualityCmaintenanceEnables AI agents to manage virtual clinic data including patients, visits, diagnoses, treatments, lab/radiology orders, and search medical literature and internal knowledge base.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kustode-ce/medical-billing-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server