Skip to main content
Glama

DoctorVerify — an MCP server for verifying Indian doctors

Verifies that someone claiming to be a registered Indian doctor actually is one, using live data from the National Medical Commission — while staying honest about exactly what's official, what's undocumented, and what's a manual fallback. Read "How verification actually works here" before you use it; it's the most important part of this README.

What's here

Primitive

Name

What it does

Tool

search_doctor_registration

Live search of the Indian Medical Register by name, registration number, State Medical Council, and/or year

Tool

get_doctor_profile

Live full profile (qualification, university, additional quals) for one match from a search

Tool

check_blacklist

Live check of NMC's current suspended/struck-off doctor list

Tool

registration_lookup_guide

Manual fallback: the exact official search steps, for when the live lookup fails or a match is ambiguous

Tool

flag_lookalike_domain

Checks a link against the official domain and known impersonators

Resource

doctor-verification://official-sources

The full landscape — individual lookup, the newer register, and the two sanctioned paths for automated checks at scale

Prompt

verify_doctor_checklist

A "verify this doctor properly" template chaining the live tools, then blacklist, then qualification match

Related MCP server: Doktor MCP Server

How verification actually works here

The official registry doesn't publish an API for third parties — but it doesn't need to, for this to work. The authoritative source is the National Medical Commission's Indian Medical Register (IMR), searchable by the public at nmc.org.in. Its own search page calls a public, unauthenticated JSON endpoint (nmc.org.in/MCIRest/open/...) directly from client-side JavaScript to render results — found by reading that page's own script, not by guessing. search_doctor_registration, get_doctor_profile, and check_blacklist call that same endpoint, so they return real IMR data: registration, qualification, university, and current suspension status.

An earlier version of this README claimed nmc.org.in's robots.txt disallows automated access. That was checked and turned out to be wrong: the file at that path isn't a standards-format robots.txt at all — it's a misconfigured Apache snippet blocking a short list of named SEO crawlers (Ahrefs, Majestic, Semrush, ...) by User-Agent, with no general Disallow directive. The Terms of Use don't prohibit this either. That's what changed to make live verification here reasonable, where it wasn't before.

The honest caveat: this endpoint is still undocumented and unsupported by NMC. It could change shape, get rate-limited, or disappear without notice — there's no SLA, versioning, or support contract behind it. Treat it as read-only, single-lookup traffic, not a bulk pipeline (these tools cap result counts and never auto-paginate, on purpose). registration_lookup_guide stays in the toolset specifically as the fallback for when the live path breaks or a result looks wrong.

A real trap worth knowing about: while researching this, nmcn.org.in — one letter off from the real nmc.org.in — turned up ranking for "verify Indian doctor" searches, displaying IMR-style search content despite not being run by the National Medical Commission. flag_lookalike_domain catches that one by name and flags anything else unfamiliar as unreviewed rather than assuming it's safe. Always prefer typing nmc.org.in yourself over clicking a link from a hospital, agent, or ad — and remember a live-looking result can still come from a fake site.

If you need automated verification at scale — say, onboarding many doctors into a health-tech platform rather than checking one by hand — there are two more paths, both officially sanctioned (unlike the endpoint above), and both heavier than a weekend project:

  1. Ayushman Bharat Digital Mission (ABDM), Healthcare Professional Registry (HPR). The government's own digital-identity system for doctors, with a real, documented OAuth2 API and a sandbox at sandbox.abdm.gov.in. It's built for registering and confirming practitioners as part of an accredited health system integration (the M1 module), not anonymous one-off lookups, so onboarding is a genuine integration project — client ID/secret, certification, the works.

  2. Commercial KYC/verification vendors (e.g. Surepass, IDfy). Several companies resell NMC-backed doctor verification as a paid, supported API product. That can be the pragmatic choice for production use, but evaluate each vendor's actual data source, freshness, and terms yourself — this project doesn't endorse a specific one.

Setup

Requires Python 3.10+ and uv.

./setup.sh

This is a proper installable package (src/doctor_verify_mcp/, pyproject.toml), not just a loose script. ./setup.sh runs uv sync, which creates .venv (pinned to Python 3.10 via .python-version) and installs the package plus its dev dependency group (pytest) in editable mode. Without uv, fall back to python3 -m venv .venv && source .venv/bin/activate && pip install -e '.[dev]' (add a [dependency-groups]-to-[project.optional-dependencies] mirror if your pip version doesn't understand dependency groups yet).

Run it

uv run mcp dev src/doctor_verify_mcp/server.py

Open the Inspector URL it prints. Try search_doctor_registration with just a name, then narrow it with a registration number or state_council. Take a doctor_id from the results and pass it to get_doctor_profile. Try check_blacklist with no arguments to see the full current list. Try flag_lookalike_domain with nmcn.org.in and with nmc.org.in and compare. Check the doctor-verification://official-sources resource for the full picture in one place.

Once installed (editable or from a built wheel), the package also exposes a console script that runs the server directly over stdio (no Inspector, for wiring into a real host): uv run doctor-verify-mcp.

Build it

uv build

Produces dist/doctor_verify_mcp-<version>-py3-none-any.whl and a matching .tar.gz sdist, installable anywhere with pip install dist/doctor_verify_mcp-*.whl.

Test it

uv run pytest

The tests for the three live tools mock the HTTP layer (doctor_verify_mcp.server._http_client) with NMC's real response shapes captured during development, so the suite doesn't hit nmc.org.in on every run.

Connect it to a real host

Building an actual integration (e.g. wiring this into a doctor registration/onboarding flow)? See INTEGRATION.md for the full tool reference, a recommended verification flow, the error-handling contract, and known quirks of the live endpoint.

Same pattern as any local MCP server — a host runs your server as a child process over stdio, so every host needs the same launch command with an absolute path. Once the package is installed, the doctor-verify-mcp console script is the cleanest launch target instead of pointing hosts at server.py directly.

Claude Desktop: uv run mcp install src/doctor_verify_mcp/server.py, then fully quit and reopen the app.

Claude Code:

claude mcp add doctorverify -- uv run --with "mcp[cli]" mcp run /absolute/path/to/src/doctor_verify_mcp/server.py

Cursor (.cursor/mcp.json) and VS Code (.vscode/mcp.json) follow the same command/args shape — see the previous project's README for the exact JSON if you need a reminder.

Extending this

  • Add a tool that validates a registration number's shape once you know the format your state council actually uses — they vary enough across states that this project doesn't guess at one.

  • Add more entries to KNOWN_LOOKALIKES as you encounter them.

  • If the MCIRest endpoint ever changes shape or starts blocking automated traffic, the live tools already raise a clear error pointing back to registration_lookup_guide rather than failing silently — check there first before assuming a doctor doesn't exist.

  • If you go the ABDM/HPR route, a verify_hpr_id tool that calls the real, documented API (with your own client credentials, never hardcoded in source) would give you a supported alternative to the undocumented endpoint this project uses today.

  • Add a resource per State Medical Council with direct links, for the cases where the IMR doesn't show a result and the fallback is checking a specific state's council site directly.

Available Tools

5 tools
check_blacklistA

Check the live NMC list of suspended/struck-off doctors.

A doctor can have a completely genuine registration and still be
currently suspended -- search_doctor_registration alone won't show that,
this does. Provide a filter, or nothing to get the full current list
(nationally, this is normally only a few dozen entries).

Inputs: doctor_name, state_council, registration_number. Returns: source, entries, is_listed, query_note

flag_lookalike_domainB

Check whether a link is the official NMC domain or a known lookalike.

Inputs: url_or_domain (required). Returns: note, domain, is_official

get_doctor_profileA

Get the full IMR profile for one specific match from search_doctor_registration.

Not a general search -- this is the live "View" detail for an
already-found doctor_id + registration_number pair, showing qualification,
college, university, and additional qualifications for a closer match
check. Deliberately excludes personal contact fields the underlying
record also contains (date of birth, phone, email, home address) --
those aren't needed to verify a registration is genuine, and returning
them would turn a verification lookup into a PII source.

Inputs: doctor_id (required), registration_number (required). Returns: name, source, college, university, +8 more

registration_lookup_guideA

Get the correct, official manual steps to verify an Indian doctor's registration.

This is the fallback path: use search_doctor_registration and check_blacklist
for a real, live answer. Reach for this tool instead when those fail, look
wrong, or you'd rather double-check by hand -- it hands back exactly where
and how to search nmc.org.in yourself rather than an automated result.

Inputs: doctor_name, state_council, registration_number. Returns: caution, also_check, search_url, how_to_search, +1 more

search_doctor_registrationA

Search the live Indian Medical Register and return real matches.

Provide at least one of doctor_name or registration_number. This calls the
same public JSON endpoint nmc.org.in's own search page uses -- a real, live
lookup, not a guide. That endpoint is undocumented and unsupported by NMC,
so treat a request failure as "try registration_lookup_guide instead," not
as "the doctor doesn't exist."

Quirk worth knowing: NMC's backend 500s on any name value containing a
space (confirmed against the live endpoint -- a bug in their server, not
a validation rule of ours). A multi-word doctor_name is narrowed to its
most distinctive single word before being sent, and every match comes
back with a name_match flag so you can still tell whether the full name
actually lines up.

A registration number match alone doesn't mean the practitioner is
currently in good standing -- always also call check_blacklist.

Inputs: doctor_name, state_council, registration_number, year_of_registration. Returns: source, caution, matches, returned, +3 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: live register search, blacklist check, profile detail, manual fallback guide, and domain safety check. There is no real overlap, and the descriptions reinforce the boundaries between search, blacklist, and guide.

    Naming Consistency4/5

    Most tool names follow a clear verb_noun pattern in snake_case: check_blacklist, flag_lookalike_domain, search_doctor_registration, get_doctor_profile. The one outlier is registration_lookup_guide, which is a noun phrase rather than a verb-led name, making the convention mostly but not fully consistent.

    Tool Count5/5

    Five tools is a well-scoped set for a doctor verification server. Each tool addresses a distinct part of the verification workflow without redundancy or bloat.

    Completeness5/5

    The tool set covers the core verification lifecycle: live register search, blacklist screening, detailed profile retrieval, a manual fallback guide, and domain legitimacy checking. No obvious dead ends or missing operations for the stated purpose of verifying an Indian doctor's registration.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides access to Indian healthcare knowledge bases including 500,000+ branded drugs and 180+ treatment protocols from authoritative institutions like ICMR, enabling AI responses grounded in verified medical information specific to the Indian healthcare context.
      68 PyPI
      20
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to search the doktor.mx directory for over 56,000 verified doctors and medical specialists across Mexico. It provides tools for verifying professional licenses, finding specialists by symptoms or conditions, and checking medical insurance compatibility.
      10
      62 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for querying Brazilian Federal Council of Medicine (CFM) registration data from official sources. It provides a read-only tool to consult medical registrations via natural language.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables LLM clients to search and retrieve U.S. healthcare provider records from the NPPES NPI Registry, including provider lookup, specialty search, checksum validation, and referral-eligibility assessment, all without an API key.
      MIT