# MoleCare MCP Server [](https://www.npmjs.com/package/molecare-mcp) [](https://www.npmjs.com/package/molecare-mcp) [](./LICENSE) [](https://nodejs.org) [](https://modelcontextprotocol.io) [](https://github.com/MoleCare/molecare-mcp#contributors) **Model Context Protocol (MCP) server** that gives Claude and other MCP clients access to: 1. **Dermatology knowledge** — ABCDE education, SNOMED CT / ICD-10 helpers, risk-factor prompts 2. **Optional MoleCare API tools** — moles, trends, analysis (your backend + API key) 3. **Optional MLOps / ops tools** — shipped as a *separate* binary, `molecare-ops-mcp` (mock-first) > **Not a medical device.** Outputs are educational and operational aids only. Do not use for diagnosis or treatment decisions. Product site: [molecare.co.uk](https://www.molecare.co.uk/) · App: [iOS](https://apps.apple.com/us/app/molecare/id1448635328) · [Android](https://play.google.com/store/apps/details?id=com.mymolecare)
One command, no API key, no database. Real output from the published package.
--- ## Why this exists MoleCare helps people **track moles over time** and prepare for clinician visits. This MCP server lets developers and operators: - Query educational skin-health knowledge from Claude Desktop / Cursor - Prototype assistant flows against a MoleCare-compatible API - Explore MLOps tooling with **safe mock data** when no credentials are set --- ## Quick start No credentials, no database, no cloud account. Add this to your MCP client config and restart it: ```json { "mcpServers": { "molecare": { "command": "npx", "args": ["-y", "molecare-mcp"] } } } ``` For Claude Desktop on macOS that file is `~/Library/Application Support/Claude/claude_desktop_config.json`. The dermatology knowledge tools work immediately — they read from a knowledge base bundled in the package. Everything that talks to a backend returns clearly-labelled mock data until you configure it, so you can explore the whole tool surface before deciding whether you want any of it. To try it without a client at all: ```bash npx -y molecare-mcp ``` It starts and waits on stdio. No output means it is working. --- ## Connecting a real backend Only needed if you are running a MoleCare-compatible API: ```json { "mcpServers": { "molecare": { "command": "npx", "args": ["-y", "molecare-mcp"], "env": { "MOLECARE_API_URL": "http://localhost:8080/api", "MOLECARE_API_KEY": "your-local-api-key" } } } } ``` Use **localhost** (or your own deployment). Do not paste production keys into config files that sync to cloud drives. --- ## Environment variables All optional unless you want live backends. | Variable | Purpose | Example | |----------|---------|---------| | `MOLECARE_API_URL` | MoleCare HTTP API | `http://localhost:8080/api` | | `MOLECARE_API_KEY` | API bearer / key | `local-dev-key` | | `ONTOLOGY_API_URL` | Ontology service | `http://localhost:8081` | | `MLFLOW_TRACKING_URI` | MLflow | `http://localhost:5000` | | `FEAST_REPO_PATH` / feature store URL | Feast | — | | `AWS_REGION` | EC2 / CloudWatch clients | `us-east-1` | | `GITHUB_TOKEN` | CI/CD tools | — | | `MCP_HEALTH_PORT` | Bind an HTTP `/health` endpoint. Unset by default — stdio clients do not need it | `3000` | | `PORT` | Same, for container health probes | `3000` | See [`.env.example`](./.env.example). --- ## Tools ### Dermatology knowledge — no setup required These are the reason most people install this. They answer from a bundled knowledge base and need no API, no key, and no network. | Tool | Description | |------|-------------| | `search_medical_info` | Search the dermatology knowledge base | | `lookup_medical_concept` | Look up a SNOMED CT concept | | `search_medical_concepts` | Search conditions by name or description | | `map_snomed_to_icd10` | Map a SNOMED CT code to ICD-10 | | `classify_lesion_features` | ABCDE-style feature descriptors for a lesion | | `assess_risk_from_factors` | Named educational risk factors (no score) | | `get_condition_risk_factors` | Known risk factors for a condition | | `get_condition_progression` | Typical progression stages for a condition | | `get_malignant_conditions` | Malignant skin conditions with codes | **Resources:** `molecare://knowledge/*` — ABCDE criteria, Fitzpatrick skin types, prevention, when to see a dermatologist. `molecare://ontology/*` — SNOMED CT and ICD-10 reference lists, the full `snomed-icd10-map` mapping table, and risk factors, all with provenance metadata. ### What the terminology actually covers | | Bundled | |---|---| | SNOMED CT concepts | **7** — melanoma, melanoma in situ, BCC, SCC, actinic keratosis, dysplastic naevus, melanocytic naevus | | WHO ICD-10 categories | **25** — malignant, in situ, benign, precancerous, inflammatory and pigmentation, across Chapters II and XII | | SNOMED → ICD-10 mappings | **9 rows covering all 7 concepts** — some concepts have more than one plausible target | Every SNOMED concept the server advertises resolves through `lookup_medical_concept` and maps through `map_snomed_to_icd10`. Ask for a code outside the subset and the response carries a `coverage` block listing what *is* bundled, rather than an empty result. Browse the whole table with the `molecare://ontology/snomed-icd10-map` resource. ICD-10 coverage is deliberately broader than SNOMED coverage. Expanding the bundled **SNOMED** concept set is on hold pending a redistribution question with SNOMED International: free *use* in a member country is not the same as free *redistribution* via npm to non-member territories ([#49](https://github.com/MoleCare/molecare-mcp/issues/49)). WHO licenses ICD-10 more permissively at this level, so that side can grow in the meantime. ### Terminology provenance Bundled SNOMED CT / ICD-10 helpers are an **educational subset**, not a licensed terminology distribution. Named sources live in [`src/resources/terminology-provenance.ts`](./src/resources/terminology-provenance.ts) and are returned on `map_snomed_to_icd10` and the ontology resources: | System | What this package reflects | |--------|----------------------------| | **SNOMED CT** | International Edition concept IDs / FSNs checked against the [SNOMED International browser](https://browser.ihtsdotools.org/) (last checked 2026-09-03). Plain-English search aliases are written for this package and are not SNOMED descriptions | | **ICD-10** | WHO ICD-10 **category-level** codes (e.g. `C43`, `D22`), with four-character subcategories only where the category alone would mislead (`L57.0`, `D18.0`). Not ICD-10-CM — codes such as `C4A` are deliberately absent | | **SNOMED → ICD-10** | **Approximate category-level** mappings — not certified one-to-one map rows. Each row carries a rationale | The dataset itself lives in [`src/resources/terminology-data.ts`](./src/resources/terminology-data.ts) and is the single source for both the `src/api/ontology-client.ts` mock paths and the ontology resources. Educational prose without clinical codes lives in `src/resources/medical-kb.ts`. ### MoleCare product data — needs an API Returns labelled mock data until `MOLECARE_API_URL` is set. | Tool | Description | |------|-------------| | `get_user_moles` | List moles for a user id | | `get_mole_analysis` | Analysis payload for a mole | | `get_mole_changes` | Change history for a mole | | `get_user_risk_factors` | A user's risk profile | | `compare_moles` | Compare two moles |molecare-ops-mcp binary)