Skip to content

MedBillAnalyzer

by medbillanalyzer.com · remote · no sign-in to list tools · v0.1.1 · published by com.medbillanalyzer

Compares a medical bill with the insurer's Explanation of Benefits and lists where they disagree.

Deletes · 1Final · 1Changes · 3

7 tools: 1 can delete or cancel things, 1 do something that can't be undone, 3 change things and 2 only read.

Scanned Oct 21, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http medbillanalyzer https://app.medbillanalyzer.com/mcp/apps?via=mcp_registry

Findings

Matches of fixed checks, with the text they matched.

1 warn2 info
  • The server marks "check_medical_bill" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "compare": a word for reading.

    What this check looks for
  • The input schema at properties.bill_document.properties.url.description mentions "credentials".

    Matched text

    inputSchema.properties.bill_document.properties.url.description: "...r a redirect, and so are links carrying credentials. At most 3 redirects, 12 MB, 20 seconds..."

    What this check looks for
  • The input schema at properties.eob_document.properties.url.description mentions "credentials".

    Matched text

    inputSchema.properties.eob_document.properties.url.description: "...r a redirect, and so are links carrying credentials. At most 3 redirects, 12 MB, 20 seconds..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

7 tools

Deletes or cancels 1Claude Code: deny
  • delete_caseDelete everything held about a case, immediately and permanently.No findings

    Why it is in this group

    • The name "delete_case" says "delete": a word for removing or ending something.
    • The description says "cannot be recovered".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete everything held about a case, immediately and permanently. The record is removed, not flagged, and it cannot be recovered afterwards — not by us either. This is the promise the privacy policy makes, and it needs no account. It does need the delete token issued when the case was created: reading a case and destroying it are deliberately different capabilities.

    Annotations the server declares

    • title: Delete a case
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
Can't be undone 1Claude Code: ask
  • unlock_casePay to unlock the full findings, the dispute letter and the phone script.No findings

    Why it is in this group

    • The name "unlock_case" says "unlock": a word for a change.
    • The description's first verb is "pay": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Pay to unlock the full findings, the dispute letter and the phone script. With a `shared_payment_token` (a Stripe Shared Payment Token granted to the `stripe_profile` in the case summary's `purchase`), it charges $10.00 for this bill and unlocks the case in the same call. Without one, it returns a checkout URL and charges nothing itself. A case with no findings is refused: there is nothing to buy, and the user pays nothing when nothing is found. So is a case with nothing to act on yet (`nothing_to_act_on`), such as a bill sent without its Explanation of Benefits whose only finding is that the EOB is missing.

    Annotations the server declares

    • title: Unlock a case
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 3Claude Code: ask
  • check_medical_billCompare a medical bill against the Explanation of Benefits the patient’s insurer issued for the same care, and report where the two disagree.3 findings

    Why it is in this group

    • The description's first verb is "compare": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Info

      The input schema at properties.bill_document.properties.url.description mentions "credentials".

      Matched text

      inputSchema.properties.bill_document.properties.url.description: "...r a redirect, and so are links carrying credentials. At most 3 redirects, 12 MB, 20 seconds..."

      What this check looks for
    • Info

      The input schema at properties.eob_document.properties.url.description mentions "credentials".

      Matched text

      inputSchema.properties.eob_document.properties.url.description: "...r a redirect, and so are links carrying credentials. At most 3 redirects, 12 MB, 20 seconds..."

      What this check looks for
    • Warn

      The server marks "check_medical_bill" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "compare": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Compare a medical bill against the Explanation of Benefits the patient’s insurer issued for the same care, and report where the two disagree. Use when someone shares a medical bill, hospital statement, doctor bill, lab bill or EOB and asks whether it is correct, what they actually owe, or how to dispute it. The bill is required; the EOB is strongly recommended and is what makes most of the checks possible. If you can see the documents but cannot attach their bytes, transcribe them into `bill` and `eobs` exactly as printed. Free: returns a summary and the title of every finding, but not the detail behind them.

    Annotations the server declares

    • title: Check a medical bill
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • export_caseEverything stored about a case, as JSON, in one response.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Everything stored about a case, as JSON, in one response. This is the portable copy the privacy policy offers. It is deliberately the whole record rather than a summary, so that what is returned here can be compared against what the policy says is kept.

    Annotations the server declares

    • title: Export a case
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • report_outcomeRecord what happened after the patient sent the dispute letter: corrected, reduced, refused, ignored, still waiting, or not sent.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Record what happened after the patient sent the dispute letter: corrected, reduced, refused, ignored, still waiting, or not sent. Free. Every answer counts equally, and it is kept only as an aggregate count — nothing about it is stored against the case. This product can tell that two documents disagreed; only these reports show whether saying so to a billing office changes anything.

    Annotations the server declares

    • title: Report what happened after the letter
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 2Claude Code: allow
  • get_caseRetrieve a case by id.No findings

    Why it is in this group

    • The name "get_case" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve a case by id. Returns the same free summary, plus every finding in detail once the case has been unlocked.

    Annotations the server declares

    • title: Read a case
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_case_outputsGet the dispute letter and the phone script for an unlocked case.No findings

    Why it is in this group

    • The name "get_case_outputs" says "get": a word for reading.
    Description, as the server wrote it
    Get the dispute letter and the phone script for an unlocked case. The letter is a template the patient sends in their own name.

    Annotations the server declares

    • title: Get the dispute letter and phone script
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http medbillanalyzer https://app.medbillanalyzer.com/mcp/apps?via=mcp_registry

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__medbillanalyzer__get_case",
      "mcp__medbillanalyzer__get_case_outputs"
    ],
    "ask": [
      "mcp__medbillanalyzer__check_medical_bill",
      "mcp__medbillanalyzer__unlock_case",
      "mcp__medbillanalyzer__report_outcome",
      "mcp__medbillanalyzer__export_case"
    ],
    "deny": [
      "mcp__medbillanalyzer__delete_case"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as medbillanalyzer. Review it before you use it.