{
  "markdown": "# MoleCare MCP Server\n\n[![npm version](https://img.shields.io/npm/v/molecare-mcp)](https://www.npmjs.com/package/molecare-mcp)\n[![npm downloads](https://img.shields.io/npm/dw/molecare-mcp)](https://www.npmjs.com/package/molecare-mcp)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](./LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org)\n[![MCP](https://img.shields.io/badge/MCP-compatible-purple.svg)](https://modelcontextprotocol.io)\n[![Contributors](https://img.shields.io/github/contributors/MoleCare/molecare-mcp)](https://github.com/MoleCare/molecare-mcp#contributors)\n\n**Model Context Protocol (MCP) server** that gives Claude and other MCP clients access to:\n\n1. **Dermatology knowledge** — ABCDE education, SNOMED CT / ICD-10 helpers, risk-factor prompts  \n2. **Optional MoleCare API tools** — moles, trends, analysis (your backend + API key)  \n3. **Optional MLOps / ops tools** — shipped as a *separate* binary, `molecare-ops-mcp` (mock-first)\n\n> **Not a medical device.** Outputs are educational and operational aids only. Do not use for diagnosis or treatment decisions.\n\nProduct 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)\n\n<p align=\"center\">\n  <img src=\"docs/demo.gif\" alt=\"npx -y molecare-mcp answering a SNOMED CT to ICD-10 lookup with no credentials configured\" width=\"760\">\n</p>\n\n<p align=\"center\"><em>One command, no API key, no database. Real output from the published package.</em></p>\n\n---\n\n## Why this exists\n\nMoleCare helps people **track moles over time** and prepare for clinician visits. This MCP server lets developers and operators:\n\n- Query educational skin-health knowledge from Claude Desktop / Cursor  \n- Prototype assistant flows against a MoleCare-compatible API  \n- Explore MLOps tooling with **safe mock data** when no credentials are set  \n\n---\n\n## Quick start\n\nNo credentials, no database, no cloud account. Add this to your MCP client config\nand restart it:\n\n```json\n{\n  \"mcpServers\": {\n    \"molecare\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"molecare-mcp\"]\n    }\n  }\n}\n```\n\nFor Claude Desktop on macOS that file is\n`~/Library/Application Support/Claude/claude_desktop_config.json`.\n\nThe dermatology knowledge tools work immediately — they read from a knowledge base\nbundled in the package. Everything that talks to a backend returns clearly-labelled\nmock data until you configure it, so you can explore the whole tool surface before\ndeciding whether you want any of it.\n\nTo try it without a client at all:\n\n```bash\nnpx -y molecare-mcp\n```\n\nIt starts and waits on stdio. No output means it is working.\n\n---\n\n## Connecting a real backend\n\nOnly needed if you are running a MoleCare-compatible API:\n\n```json\n{\n  \"mcpServers\": {\n    \"molecare\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"molecare-mcp\"],\n      \"env\": {\n        \"MOLECARE_API_URL\": \"http://localhost:8080/api\",\n        \"MOLECARE_API_KEY\": \"your-local-api-key\"\n      }\n    }\n  }\n}\n```\n\nUse **localhost** (or your own deployment). Do not paste production keys into config\nfiles that sync to cloud drives.\n\n---\n\n## Environment variables\n\nAll optional unless you want live backends.\n\n| Variable | Purpose | Example |\n|----------|---------|---------|\n| `MOLECARE_API_URL` | MoleCare HTTP API | `http://localhost:8080/api` |\n| `MOLECARE_API_KEY` | API bearer / key | `local-dev-key` |\n| `ONTOLOGY_API_URL` | Ontology service | `http://localhost:8081` |\n| `MLFLOW_TRACKING_URI` | MLflow | `http://localhost:5000` |\n| `FEAST_REPO_PATH` / feature store URL | Feast | — |\n| `AWS_REGION` | EC2 / CloudWatch clients | `us-east-1` |\n| `GITHUB_TOKEN` | CI/CD tools | — |\n| `MCP_HEALTH_PORT` | Bind an HTTP `/health` endpoint. Unset by default — stdio clients do not need it | `3000` |\n| `PORT` | Same, for container health probes | `3000` |\n\nSee [`.env.example`](./.env.example).\n\n---\n\n## Tools\n\n### Dermatology knowledge — no setup required\n\nThese are the reason most people install this. They answer from a bundled knowledge\nbase and need no API, no key, and no network.\n\n| Tool | Description |\n|------|-------------|\n| `search_medical_info` | Search the dermatology knowledge base |\n| `lookup_medical_concept` | Look up a SNOMED CT concept |\n| `search_medical_concepts` | Search conditions by name or description |\n| `map_snomed_to_icd10` | Map a SNOMED CT code to ICD-10 |\n| `classify_lesion_features` | ABCDE-style feature descriptors for a lesion |\n| `assess_risk_from_factors` | Named educational risk factors (no score) |\n| `get_condition_risk_factors` | Known risk factors for a condition |\n| `get_condition_progression` | Typical progression stages for a condition |\n| `get_malignant_conditions` | Malignant skin conditions with codes |\n\n**Resources:** `molecare://knowledge/*` — ABCDE criteria, Fitzpatrick skin types,\nprevention, when to see a dermatologist. `molecare://ontology/*` — SNOMED CT and\nICD-10 reference lists with provenance metadata.\n\n### Terminology provenance\n\nBundled SNOMED CT / ICD-10 helpers are an **educational subset**, not a licensed\nterminology distribution. Named sources live in\n[`src/resources/terminology-provenance.ts`](./src/resources/terminology-provenance.ts)\nand are returned on `map_snomed_to_icd10` and the ontology resources:\n\n| System | What this package reflects |\n|--------|----------------------------|\n| **SNOMED CT** | International Edition concept IDs / FSNs checked against the [SNOMED International browser](https://browser.ihtsdotools.org/) (last checked 2026-09-03) |\n| **ICD-10** | WHO ICD-10 **three-character category** codes (e.g. `C43`, `D22`), not ICD-10-CM site-specific codes |\n| **SNOMED → ICD-10** | **Approximate category-level** mappings — not certified one-to-one map rows |\n\nMock concept and mapping rows live in `src/api/ontology-client.ts`. Educational\nprose without clinical codes lives in `src/resources/medical-kb.ts`.\n\n### MoleCare product data — needs an API\n\nReturns labelled mock data until `MOLECARE_API_URL` is set.\n\n| Tool | Description |\n|------|-------------|\n| `get_user_moles` | List moles for a user id |\n| `get_mole_analysis` | Analysis payload for a mole |\n| `get_mole_changes` | Change history for a mole |\n| `get_user_risk_factors` | A user's risk profile |\n| `compare_moles` | Compare two moles |\n\n<details>\n<summary><b>Operations and MLOps tooling</b> (39 tools — separate <code>molecare-ops-mcp</code> binary)</summary>\n\nThese exist because MoleCare operates this stack from an assistant. They are of\nlittle use outside that context, and all of them return mock data unless the\nmatching backend is configured.\n\n**They are not part of the `molecare-mcp` tool list.** Loading 39 infrastructure\ntools that nobody outside MoleCare can use made it measurably harder for a model\nto pick the right dermatology tool, so they live in their own server:\n\n```json\n{\n  \"mcpServers\": {\n    \"molecare-ops\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"molecare-mcp\", \"molecare-ops-mcp\"]\n    }\n  }\n}\n```\n\n| Area | Tools |\n|------|-------|\n| Health | `get_system_health`, `check_server_health`, `get_service_health`, `clear_cache` |\n| MLflow | `get_mlflow_experiments`, `get_mlflow_runs`, `get_registered_models`, `get_model_version`, `compare_model_runs`, `get_training_runs` |\n| Feature store | `get_feature_views`, `get_feature_view_details`, `get_feature_freshness`, `get_online_features`, `get_feature_store_stats` |\n| CI/CD | `get_pipeline_runs`, `get_pipeline_summary`, `get_deployments`, `get_deployment_status`, `get_releases` |\n| AWS | `get_ec2_instances`, `get_ec2_instance`, `get_ec2_health`, `get_ec2_metrics` |\n| Apps | `get_app_status`, `get_web_app_status`, `get_mobile_api_status`, `get_all_apps_status`, `get_app_metrics`, `get_app_errors`, `get_app_versions`, `get_app_store_status` |\n| Database | `get_database_status`, `get_database_metrics`, `get_slow_queries`, `get_table_stats`, `get_backup_history`, `get_connection_pools` |\n| Kubernetes | `get_kubernetes_status` |\n\nThe AWS tools need `@aws-sdk/client-ec2` and `@aws-sdk/client-cloudwatch`, which are\n**optional peer dependencies** — they are not installed by default, because they add\n33 MB that nobody wanting the dermatology tools should have to download. Install them\nyourself if you want live AWS data:\n\n```bash\nnpm i @aws-sdk/client-ec2 @aws-sdk/client-cloudwatch\n```\n\n</details>\n\n---\n\n## Architecture\n\n```\nClaude / Cursor / MCP client\n        │ stdio (JSON-RPC)\n        ▼\n  molecare-mcp                    molecare-ops-mcp\n   ├─ medical KB (local)           ├─ MLflow / Feast clients\n   ├─ MoleCare API client          ├─ AWS / CI / K8s clients\n   └─ ontology client              └─ database / app clients\n        │    (14 tools)                 │   (39 tools, internal)\n        │                               │\n        └───────────┬───────────────────┘\n                    └─ optional HTTP GET /health  (Docker / ECS)\n```\n\n---\n\n## Docker\n\n```bash\ndocker build -t molecare-mcp .\ndocker run --rm -p 3000:3000 molecare-mcp\ncurl http://localhost:3000/health\n```\n\n---\n\n## Security\n\n- Never commit `.env` files or API keys — see [SECURITY.md](./SECURITY.md) to report a vulnerability  \n- Prefer mock mode for demos and screenshots  \n- Tools that accept `userId` can return PHI **only if** you point them at a real backend with real auth — treat that as production  \n- Rate-limit and auth belong on your API, not only on the MCP process  \n\n---\n\n## Medical disclaimer\n\nMoleCare MCP provides **educational** information and developer tooling. It does **not** diagnose melanoma or any disease. Always consult a qualified clinician for medical concerns.\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/MoleCare/molecare-mcp.git\ncd molecare-mcp\nnpm install\nnpm run build\nnpm run dev      # auto-reload\nnpm run inspect  # browse tools in MCP Inspector\n```\n\nContributions are welcome. Read [CONTRIBUTING.md](./CONTRIBUTING.md) first — it covers the mock-first rule,\nthe clinical-safety boundary for anything touching medical content, and how to pick up a `good first issue`.\n\nPlease keep secrets out of examples and prefer localhost defaults.\n\n---\n\n## Related\n\n> **Environment variables:** `.env.example` is the authoritative list (all 27 variables read by the source). Regenerate the ground truth with `grep -rhoE \"process\\.env\\.[A-Z_0-9]+\" src/`. `ONTOLOGY_API_URL` and `FEAST_REPO_PATH` are not read by any source file.\n\n- [Model Context Protocol](https://modelcontextprotocol.io)  \n- [MoleCare](https://www.molecare.co.uk/)  \n- [MoleCare-ML](https://github.com/MoleCare/MoleCare-ML) — melanoma classification service and training notebooks\n\n---\n\n## Contributors\n\nThank you to everyone who has helped molecare-mcp.\n\n<!-- readme: contributors,bots/- -start -->\n<p align=\"center\">\n  <a href=\"https://github.com/YauhenBichel\" title=\"Yauhen Bichel\" aria-label=\"Yauhen Bichel\"><img src=\".github/faces/YauhenBichel.svg\" width=\"87\" height=\"99\" alt=\"Yauhen Bichel\" /></a>\n  <a href=\"https://github.com/komallsingh\" title=\"Komal Singh\" aria-label=\"Komal Singh\"><img src=\".github/faces/komallsingh.svg\" width=\"66\" height=\"75\" alt=\"Komal Singh\" /></a>\n  <a href=\"https://github.com/Amiirhosseini\" title=\"Amirreza Hosseini\" aria-label=\"Amirreza Hosseini\"><img src=\".github/faces/Amiirhosseini.svg\" width=\"72\" height=\"82\" alt=\"Amirreza Hosseini\" /></a>\n  <a href=\"https://github.com/adity982\" title=\"ADITYA \" aria-label=\"ADITYA \"><img src=\".github/faces/adity982.svg\" width=\"80\" height=\"91\" alt=\"ADITYA \" /></a>\n  <a href=\"https://github.com/kkkhs\" title=\"Huangshuo Kuang\" aria-label=\"Huangshuo Kuang\"><img src=\".github/faces/kkkhs.svg\" width=\"63\" height=\"72\" alt=\"Huangshuo Kuang\" /></a>\n  <a href=\"https://github.com/YuuGR1337\" title=\"Elkero\" aria-label=\"Elkero\"><img src=\".github/faces/YuuGR1337.svg\" width=\"76\" height=\"87\" alt=\"Elkero\" /></a>\n</p>\n<!-- readme: contributors,bots/- -end -->\n\nThe list is filled by [Contributors](./.github/workflows/contributors.yml) from\nGitHub commits, bots omitted — never hand-maintained, because a stale list is\nworse than none. [Contributor graph](https://github.com/MoleCare/molecare-mcp/graphs/contributors) ·\n[good first issue](https://github.com/MoleCare/molecare-mcp/labels/good%20first%20issue)\n\n## License\n\n[Apache-2.0](./LICENSE) © MoleCare LTD\n",
  "bytes": 12375,
  "sha": "bf0139f7f5b9d1c76ce0003f0f5d1d43084f18cf702e6ba8c3b4c5a0e9806c61",
  "repo_slug": "molecare/molecare-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_molecare_molecare_mcp_520354c2/readme"
}