heor-agent-mcp 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -5
- package/dist/models/psa.d.ts.map +1 -1
- package/dist/models/psa.js +17 -14
- package/dist/models/psa.js.map +1 -1
- package/dist/providers/direct/niceTa.d.ts.map +1 -1
- package/dist/providers/direct/niceTa.js +1 -1
- package/dist/providers/direct/niceTa.js.map +1 -1
- package/dist/tools/costEffectivenessModel.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ Multi-state Markov model (default) or Partitioned Survival Analysis (oncology),
|
|
|
79
79
|
- **OWSA** — one-way sensitivity analysis with tornado summary
|
|
80
80
|
- **CEAC** — cost-effectiveness acceptability curve
|
|
81
81
|
- **EVPI** — expected value of perfect information
|
|
82
|
-
- **WTP assessment** — verdict against NHS (£
|
|
82
|
+
- **WTP assessment** — verdict against NHS (£25–35K/QALY, updated April 2026), US payer ($100–150K), societal thresholds
|
|
83
83
|
|
|
84
84
|
**Example call:**
|
|
85
85
|
```json
|
|
@@ -257,11 +257,57 @@ HEOR_API_KEY=...
|
|
|
257
257
|
|
|
258
258
|
---
|
|
259
259
|
|
|
260
|
+
## Web UI
|
|
261
|
+
|
|
262
|
+
A companion chat interface is available at:
|
|
263
|
+
|
|
264
|
+
**https://web-michael-ns-projects.vercel.app**
|
|
265
|
+
|
|
266
|
+
- Chat with Claude Opus 4.6 + all 7 HEOR tools
|
|
267
|
+
- **BYOK (Bring Your Own Key)** — paste your Anthropic API key in the settings; it stays in your browser's localStorage and is never stored on our servers
|
|
268
|
+
- Markdown rendering with styled tables, tool call cards with live progress timers
|
|
269
|
+
- Example prompts for common HEOR workflows
|
|
270
|
+
|
|
271
|
+
The web UI calls the hosted MCP server on Railway for tool execution. No setup required — just add your API key and start querying.
|
|
272
|
+
|
|
273
|
+
### Self-hosting the web UI
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
cd web
|
|
277
|
+
npm install
|
|
278
|
+
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env.local # optional server-side fallback
|
|
279
|
+
npm run dev -- -p 3456
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Set `MCP_SERVER_URL` to point to your own MCP server instance (default: the public Railway deployment).
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## HTTP Transport
|
|
287
|
+
|
|
288
|
+
The server supports both **stdio** (default, for local MCP clients) and **Streamable HTTP** (for hosted deployment).
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Stdio mode (default — for Claude Code, Claude Desktop)
|
|
292
|
+
npx heor-agent-mcp
|
|
293
|
+
|
|
294
|
+
# HTTP mode — for hosted deployment, Smithery, web UI backend
|
|
295
|
+
npx heor-agent-mcp --http # port 8787
|
|
296
|
+
MCP_HTTP_PORT=3000 npx heor-agent-mcp # custom port
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
HTTP endpoints:
|
|
300
|
+
- `POST/GET/DELETE /mcp` — MCP Streamable HTTP protocol
|
|
301
|
+
- `GET /health` — health check
|
|
302
|
+
- `GET /.well-known/mcp/server-card.json` — Smithery discovery
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
260
306
|
## Development
|
|
261
307
|
|
|
262
308
|
```bash
|
|
263
|
-
git clone https://github.com/neptun2000/
|
|
264
|
-
cd
|
|
309
|
+
git clone https://github.com/neptun2000/heor-agent-mcp
|
|
310
|
+
cd heor-agent-mcp
|
|
265
311
|
npm install
|
|
266
312
|
npm test # 244 tests across 66 suites
|
|
267
313
|
npm run build # Compile TypeScript to dist/
|
|
@@ -316,8 +362,21 @@ MIT — see [LICENSE](./LICENSE).
|
|
|
316
362
|
|
|
317
363
|
---
|
|
318
364
|
|
|
365
|
+
## Distribution
|
|
366
|
+
|
|
367
|
+
| Channel | How to use | Who pays |
|
|
368
|
+
|---------|-----------|----------|
|
|
369
|
+
| **npm** | `npx heor-agent-mcp` | User's Claude subscription |
|
|
370
|
+
| **Smithery** | [smithery.ai/servers/neptun2000-70zu/heor-agent-mcp](https://smithery.ai/servers/neptun2000-70zu/heor-agent-mcp) | User's Claude subscription |
|
|
371
|
+
| **Web UI** | [web-michael-ns-projects.vercel.app](https://web-michael-ns-projects.vercel.app) | User's own Anthropic API key (BYOK) |
|
|
372
|
+
| **Hosted MCP** | `https://heor-agent-mcp-production.up.railway.app` | Free (tool execution only) |
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
319
376
|
## Links
|
|
320
377
|
|
|
321
378
|
- **npm:** https://www.npmjs.com/package/heor-agent-mcp
|
|
322
|
-
- **GitHub:** https://github.com/neptun2000/
|
|
323
|
-
- **
|
|
379
|
+
- **GitHub:** https://github.com/neptun2000/heor-agent-mcp
|
|
380
|
+
- **Smithery:** https://smithery.ai/servers/neptun2000-70zu/heor-agent-mcp
|
|
381
|
+
- **Web UI:** https://web-michael-ns-projects.vercel.app
|
|
382
|
+
- **Issues:** https://github.com/neptun2000/heor-agent-mcp/issues
|
package/dist/models/psa.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psa.d.ts","sourceRoot":"","sources":["../../src/models/psa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"psa.d.ts","sourceRoot":"","sources":["../../src/models/psa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAO3D,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,aAAa,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,YAAY,EAAE,CAAC;CAChC;AAiCD;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CA8InD"}
|
package/dist/models/psa.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Probabilistic Sensitivity Analysis (PSA) using Monte Carlo simulation.
|
|
3
3
|
*/
|
|
4
4
|
import { betaSample, gammaSample, createSeededRng } from "./distributions.js";
|
|
5
|
-
import { runMarkovAndComputeICER } from "./modelUtils.js";
|
|
5
|
+
import { runMarkovAndComputeICER, } from "./modelUtils.js";
|
|
6
6
|
const WTP_THRESHOLDS_PSA = {
|
|
7
|
-
nhs_low:
|
|
8
|
-
nhs_high:
|
|
7
|
+
nhs_low: 25000,
|
|
8
|
+
nhs_high: 35000,
|
|
9
9
|
us_payer_low: 100000,
|
|
10
10
|
us_payer_mid: 150000,
|
|
11
11
|
societal: 50000,
|
|
@@ -43,19 +43,19 @@ export function runPSA(params) {
|
|
|
43
43
|
...params.base_params,
|
|
44
44
|
clinical_inputs: {
|
|
45
45
|
...params.base_params.clinical_inputs,
|
|
46
|
-
efficacy_delta: perturbBeta(Math.max(0.001, Math.min(0.999, params.base_params.clinical_inputs.efficacy_delta)), 0.
|
|
46
|
+
efficacy_delta: perturbBeta(Math.max(0.001, Math.min(0.999, params.base_params.clinical_inputs.efficacy_delta)), 0.1, rng),
|
|
47
47
|
mortality_reduction: params.base_params.clinical_inputs.mortality_reduction !== undefined
|
|
48
|
-
? perturbBeta(Math.max(0.001, Math.min(0.999, params.base_params.clinical_inputs.mortality_reduction)), 0.
|
|
48
|
+
? perturbBeta(Math.max(0.001, Math.min(0.999, params.base_params.clinical_inputs.mortality_reduction)), 0.1, rng)
|
|
49
49
|
: undefined,
|
|
50
50
|
},
|
|
51
51
|
cost_inputs: {
|
|
52
|
-
drug_cost_annual: perturbGamma(params.base_params.cost_inputs.drug_cost_annual, 0.
|
|
53
|
-
comparator_cost_annual: perturbGamma(params.base_params.cost_inputs.comparator_cost_annual, 0.
|
|
52
|
+
drug_cost_annual: perturbGamma(params.base_params.cost_inputs.drug_cost_annual, 0.2, rng),
|
|
53
|
+
comparator_cost_annual: perturbGamma(params.base_params.cost_inputs.comparator_cost_annual, 0.2, rng),
|
|
54
54
|
admin_cost: params.base_params.cost_inputs.admin_cost !== undefined
|
|
55
|
-
? perturbGamma(params.base_params.cost_inputs.admin_cost, 0.
|
|
55
|
+
? perturbGamma(params.base_params.cost_inputs.admin_cost, 0.2, rng)
|
|
56
56
|
: undefined,
|
|
57
57
|
ae_cost: params.base_params.cost_inputs.ae_cost !== undefined
|
|
58
|
-
? perturbGamma(params.base_params.cost_inputs.ae_cost, 0.
|
|
58
|
+
? perturbGamma(params.base_params.cost_inputs.ae_cost, 0.2, rng)
|
|
59
59
|
: undefined,
|
|
60
60
|
},
|
|
61
61
|
utility_inputs: params.base_params.utility_inputs
|
|
@@ -69,27 +69,30 @@ export function runPSA(params) {
|
|
|
69
69
|
iterations.push({ delta_cost, delta_qaly, icer });
|
|
70
70
|
}
|
|
71
71
|
// Compute statistics
|
|
72
|
-
const finiteICERs = iterations
|
|
72
|
+
const finiteICERs = iterations
|
|
73
|
+
.map((it) => it.icer)
|
|
74
|
+
.filter((ic) => isFinite(ic));
|
|
73
75
|
const sortedICERs = [...finiteICERs].sort((a, b) => a - b);
|
|
74
76
|
const mean_icer = finiteICERs.length > 0
|
|
75
77
|
? finiteICERs.reduce((a, b) => a + b, 0) / finiteICERs.length
|
|
76
78
|
: Infinity;
|
|
77
79
|
const ci_icer_lower = sortedICERs.length > 0
|
|
78
|
-
? sortedICERs[Math.floor(sortedICERs.length * 0.025)] ?? sortedICERs[0]
|
|
80
|
+
? (sortedICERs[Math.floor(sortedICERs.length * 0.025)] ?? sortedICERs[0])
|
|
79
81
|
: 0;
|
|
80
82
|
const ci_icer_upper = sortedICERs.length > 0
|
|
81
|
-
? sortedICERs[Math.floor(sortedICERs.length * 0.975)] ??
|
|
83
|
+
? (sortedICERs[Math.floor(sortedICERs.length * 0.975)] ??
|
|
84
|
+
sortedICERs[sortedICERs.length - 1])
|
|
82
85
|
: 0;
|
|
83
86
|
// Probability cost-effective at named thresholds
|
|
84
87
|
const prob_cost_effective = {};
|
|
85
88
|
for (const [name, wtp] of Object.entries(WTP_THRESHOLDS_PSA)) {
|
|
86
|
-
const n_ce = iterations.filter(it => wtp * it.delta_qaly - it.delta_cost > 0).length;
|
|
89
|
+
const n_ce = iterations.filter((it) => wtp * it.delta_qaly - it.delta_cost > 0).length;
|
|
87
90
|
prob_cost_effective[name] = n_ce / iterations.length;
|
|
88
91
|
}
|
|
89
92
|
// CEAC: WTP from $0 to $300,000 in $5,000 steps
|
|
90
93
|
const ceac = [];
|
|
91
94
|
for (let wtp = 0; wtp <= 300000; wtp += 5000) {
|
|
92
|
-
const n_ce = iterations.filter(it => wtp * it.delta_qaly - it.delta_cost > 0).length;
|
|
95
|
+
const n_ce = iterations.filter((it) => wtp * it.delta_qaly - it.delta_cost > 0).length;
|
|
93
96
|
ceac.push({ wtp, prob_ce: n_ce / iterations.length });
|
|
94
97
|
}
|
|
95
98
|
// EVPI: E[max_arm(NMB)] - max_arm(E[NMB])
|
package/dist/models/psa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psa.js","sourceRoot":"","sources":["../../src/models/psa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,
|
|
1
|
+
{"version":3,"file":"psa.js","sourceRoot":"","sources":["../../src/models/psa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"niceTa.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/niceTa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"niceTa.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/niceTa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA6B7B"}
|
|
@@ -7,7 +7,7 @@ export async function fetchNiceTa(query, maxResults) {
|
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
9
|
title: `NICE Single Technology Appraisal Process Guide`,
|
|
10
|
-
abstract: `NICE's STA methodology guide PMG36 and process guide PMG19. Required reading for company submissions. Covers reference case, time horizon, discount rates (3.5%), perspective (NHS+PSS), ICER threshold (£
|
|
10
|
+
abstract: `NICE's STA methodology guide PMG36 and process guide PMG19. Required reading for company submissions. Covers reference case, time horizon, discount rates (3.5%), perspective (NHS+PSS), ICER threshold (£25–35K/QALY, updated April 2026), end-of-life criteria, and innovation rating.`,
|
|
11
11
|
url: "https://www.nice.org.uk/process/pmg36",
|
|
12
12
|
},
|
|
13
13
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"niceTa.js","sourceRoot":"","sources":["../../../src/providers/direct/niceTa.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"niceTa.js","sourceRoot":"","sources":["../../../src/providers/direct/niceTa.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,UAAkB;IAElB,MAAM,OAAO,GAAG;QACd;YACE,KAAK,EAAE,sCAAsC,KAAK,EAAE;YACpD,QAAQ,EAAE,oPAAoP,KAAK,yJAAyJ;YAC5Z,GAAG,EAAE,oCAAoC,kBAAkB,CAAC,KAAK,CAAC,wDAAwD;SAC3H;QACD;YACE,KAAK,EAAE,gDAAgD;YACvD,QAAQ,EAAE,0RAA0R;YACpS,GAAG,EAAE,uCAAuC;SAC7C;QACD;YACE,KAAK,EAAE,+BAA+B;YACtC,QAAQ,EAAE,wNAAwN;YAClO,GAAG,EAAE,0EAA0E;SAChF;KACF,CAAC;IAEF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,MAAM,EAAE,SAAkB;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,0DAA0D,CAAC;QACrE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QACzC,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -42,7 +42,7 @@ import { contentToDocx } from "../formatters/docx.js";
|
|
|
42
42
|
import { saveReport } from "../knowledge/index.js";
|
|
43
43
|
import { saveModelRun } from "../knowledge/index.js";
|
|
44
44
|
const WTP_THRESHOLDS = {
|
|
45
|
-
nhs: { low:
|
|
45
|
+
nhs: { low: 25000, high: 35000, currency: "GBP", symbol: "£" },
|
|
46
46
|
us_payer: { low: 100000, high: 150000, currency: "USD", symbol: "$" },
|
|
47
47
|
societal: { low: 50000, high: 100000, currency: "USD", symbol: "$" },
|
|
48
48
|
};
|