@sequoiaport/codes 0.1.0-beta.0 → 0.1.0-beta.2

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/dist/mcp.js ADDED
@@ -0,0 +1,581 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ // src/mcp.ts
5
+ var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
6
+ var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
7
+ var import_zod4 = require("zod");
8
+
9
+ // src/errors.ts
10
+ var CodesApiError = class extends Error {
11
+ constructor(status, message, action) {
12
+ super(message);
13
+ this.status = status;
14
+ this.action = action;
15
+ this.name = "CodesApiError";
16
+ }
17
+ toJSON() {
18
+ return {
19
+ name: this.name,
20
+ status: this.status,
21
+ message: this.message,
22
+ action: this.action
23
+ };
24
+ }
25
+ };
26
+
27
+ // src/engines.ts
28
+ var import_zod = require("zod");
29
+ var SnomedSearchCodeInputSchema = import_zod.z.object({
30
+ query: import_zod.z.string().min(1),
31
+ limit: import_zod.z.number().int().min(1).max(200).optional()
32
+ });
33
+ var SnomedIdentifyCodeInputSchema = import_zod.z.object({
34
+ code: import_zod.z.string().min(1)
35
+ });
36
+ var SnomedCategory = class {
37
+ constructor(request) {
38
+ this.request = request;
39
+ }
40
+ async searchCode(input) {
41
+ const validated = SnomedSearchCodeInputSchema.parse(input);
42
+ return this.request(
43
+ "snomed/searchCode",
44
+ validated
45
+ );
46
+ }
47
+ async identifyCode(input) {
48
+ const validated = SnomedIdentifyCodeInputSchema.parse(input);
49
+ return this.request("snomed/identifyCode", {
50
+ code: validated.code
51
+ });
52
+ }
53
+ };
54
+ var Icd10SearchCodeInputSchema = import_zod.z.object({
55
+ query: import_zod.z.string().min(1),
56
+ limit: import_zod.z.number().int().min(1).max(200).optional(),
57
+ billingOnly: import_zod.z.boolean().optional()
58
+ });
59
+ var Icd10IdentifyCodeInputSchema = import_zod.z.object({
60
+ code: import_zod.z.string().min(1)
61
+ });
62
+ var Icd10Category = class {
63
+ constructor(request) {
64
+ this.request = request;
65
+ }
66
+ async searchCode(input) {
67
+ const validated = Icd10SearchCodeInputSchema.parse(input);
68
+ return this.request("icd10/searchCode", validated);
69
+ }
70
+ async identifyCode(input) {
71
+ const validated = Icd10IdentifyCodeInputSchema.parse(input);
72
+ return this.request("icd10/identifyCode", {
73
+ code: validated.code
74
+ });
75
+ }
76
+ async getChapters() {
77
+ return this.request("icd10/getChapters", {});
78
+ }
79
+ };
80
+ var CptSearchCodeInputSchema = import_zod.z.object({
81
+ query: import_zod.z.string().min(1),
82
+ limit: import_zod.z.number().int().min(1).max(200).optional()
83
+ });
84
+ var CptIdentifyCodeInputSchema = import_zod.z.object({
85
+ code: import_zod.z.string().min(1)
86
+ });
87
+ var CptGetCostInputSchema = import_zod.z.object({
88
+ code: import_zod.z.string().min(1)
89
+ });
90
+ var CptLinkIcd10InputSchema = import_zod.z.object({
91
+ code: import_zod.z.string().min(1)
92
+ });
93
+ var CptCategory = class {
94
+ constructor(request) {
95
+ this.request = request;
96
+ }
97
+ async searchCode(input) {
98
+ const validated = CptSearchCodeInputSchema.parse(input);
99
+ return this.request("cpt/searchCode", validated);
100
+ }
101
+ async identifyCode(input) {
102
+ const validated = CptIdentifyCodeInputSchema.parse(input);
103
+ return this.request("cpt/identifyCode", {
104
+ code: validated.code
105
+ });
106
+ }
107
+ async getCost(input) {
108
+ const validated = CptGetCostInputSchema.parse(input);
109
+ return this.request("cpt/getCost", {
110
+ code: validated.code
111
+ });
112
+ }
113
+ async linkIcd10(input) {
114
+ const validated = CptLinkIcd10InputSchema.parse(input);
115
+ return this.request("cpt/linkIcd10", {
116
+ code: validated.code
117
+ });
118
+ }
119
+ };
120
+ var HcpcsSearchCodeInputSchema = import_zod.z.object({
121
+ query: import_zod.z.string().min(1),
122
+ limit: import_zod.z.number().int().min(1).max(200).optional()
123
+ });
124
+ var HcpcsIdentifyCodeInputSchema = import_zod.z.object({
125
+ code: import_zod.z.string().min(1)
126
+ });
127
+ var HcpcsGetCostInputSchema = import_zod.z.object({
128
+ code: import_zod.z.string().min(1)
129
+ });
130
+ var HcpcsCategory = class {
131
+ constructor(request) {
132
+ this.request = request;
133
+ }
134
+ async searchCode(input) {
135
+ const validated = HcpcsSearchCodeInputSchema.parse(input);
136
+ return this.request("hcpcs/searchCode", validated);
137
+ }
138
+ async identifyCode(input) {
139
+ const validated = HcpcsIdentifyCodeInputSchema.parse(input);
140
+ return this.request("hcpcs/identifyCode", {
141
+ code: validated.code
142
+ });
143
+ }
144
+ async getCost(input) {
145
+ const validated = HcpcsGetCostInputSchema.parse(input);
146
+ return this.request("hcpcs/getCost", {
147
+ code: validated.code
148
+ });
149
+ }
150
+ };
151
+ var LoincSearchCodeInputSchema = import_zod.z.object({
152
+ query: import_zod.z.string().min(1),
153
+ limit: import_zod.z.number().int().min(1).max(200).optional()
154
+ });
155
+ var LoincIdentifyCodeInputSchema = import_zod.z.object({
156
+ code: import_zod.z.string().min(1)
157
+ });
158
+ var LoincGetPanelMembersInputSchema = import_zod.z.object({
159
+ code: import_zod.z.string().min(1)
160
+ });
161
+ var LoincCategory = class {
162
+ constructor(request) {
163
+ this.request = request;
164
+ }
165
+ async searchCode(input) {
166
+ const validated = LoincSearchCodeInputSchema.parse(input);
167
+ return this.request(
168
+ "loinc/searchCode",
169
+ validated
170
+ );
171
+ }
172
+ async identifyCode(input) {
173
+ const validated = LoincIdentifyCodeInputSchema.parse(input);
174
+ return this.request("loinc/identifyCode", {
175
+ code: validated.code
176
+ });
177
+ }
178
+ async getPanelMembers(input) {
179
+ const validated = LoincGetPanelMembersInputSchema.parse(input);
180
+ return this.request(
181
+ "loinc/getPanelMembers",
182
+ { code: validated.code }
183
+ );
184
+ }
185
+ };
186
+ var RxnormSearchCodeInputSchema = import_zod.z.object({
187
+ query: import_zod.z.string().min(1),
188
+ limit: import_zod.z.number().int().min(1).max(200).optional()
189
+ });
190
+ var RxnormIdentifyCodeInputSchema = import_zod.z.object({
191
+ type: import_zod.z.enum(["ndc", "rxcui"]),
192
+ code: import_zod.z.string().min(1)
193
+ });
194
+ var RxnormGetIngredientsInputSchema = import_zod.z.object({
195
+ rxcui: import_zod.z.string().min(1)
196
+ });
197
+ var RxnormCategory = class {
198
+ constructor(request) {
199
+ this.request = request;
200
+ }
201
+ async searchCode(input) {
202
+ const validated = RxnormSearchCodeInputSchema.parse(input);
203
+ return this.request("rxnorm/searchCode", validated);
204
+ }
205
+ async identifyCode(input) {
206
+ const validated = RxnormIdentifyCodeInputSchema.parse(input);
207
+ return this.request(
208
+ "rxnorm/identifyCode",
209
+ { type: validated.type, code: validated.code }
210
+ );
211
+ }
212
+ async getIngredients(input) {
213
+ const validated = RxnormGetIngredientsInputSchema.parse(input);
214
+ return this.request(
215
+ "rxnorm/getIngredients",
216
+ validated
217
+ );
218
+ }
219
+ };
220
+ var LcdSearchGuidelinesInputSchema = import_zod.z.object({
221
+ query: import_zod.z.string().min(1),
222
+ limit: import_zod.z.number().int().min(1).max(200).optional()
223
+ });
224
+ var LcdIdentifyGuidelineInputSchema = import_zod.z.object({
225
+ id: import_zod.z.string().min(1)
226
+ });
227
+ var LcdCategory = class {
228
+ constructor(request) {
229
+ this.request = request;
230
+ }
231
+ async searchGuidelines(input) {
232
+ const validated = LcdSearchGuidelinesInputSchema.parse(input);
233
+ return this.request(
234
+ "lcd/searchGuidelines",
235
+ validated
236
+ );
237
+ }
238
+ async identifyGuideline(input) {
239
+ const validated = LcdIdentifyGuidelineInputSchema.parse(input);
240
+ return this.request("lcd/identifyGuideline", {
241
+ id: validated.id
242
+ });
243
+ }
244
+ };
245
+ var NcdSearchGuidelinesInputSchema = import_zod.z.object({
246
+ query: import_zod.z.string().min(1),
247
+ limit: import_zod.z.number().int().min(1).max(200).optional()
248
+ });
249
+ var NcdIdentifyGuidelineInputSchema = import_zod.z.object({
250
+ id: import_zod.z.string().optional(),
251
+ section: import_zod.z.string().optional()
252
+ }).refine((data) => data.id || data.section, {
253
+ message: "Either id or section must be provided"
254
+ });
255
+ var NcdCategory = class {
256
+ constructor(request) {
257
+ this.request = request;
258
+ }
259
+ async searchGuidelines(input) {
260
+ const validated = NcdSearchGuidelinesInputSchema.parse(input);
261
+ return this.request(
262
+ "ncd/searchGuidelines",
263
+ validated
264
+ );
265
+ }
266
+ async identifyGuideline(input) {
267
+ const validated = NcdIdentifyGuidelineInputSchema.parse(input);
268
+ return this.request("ncd/identifyGuideline", {
269
+ id: validated.id,
270
+ section: validated.section
271
+ });
272
+ }
273
+ };
274
+
275
+ // src/schemas/clinical.ts
276
+ var import_zod2 = require("zod");
277
+ var DiagnosisToProceduresInputSchema = import_zod2.z.object({
278
+ snomed_id: import_zod2.z.string().optional(),
279
+ icd10_code: import_zod2.z.string().optional(),
280
+ query: import_zod2.z.string().optional()
281
+ });
282
+ var CoverageCheckInputSchema = import_zod2.z.object({
283
+ cpt_code: import_zod2.z.string().min(1),
284
+ icd10_code: import_zod2.z.string().optional()
285
+ });
286
+ var DiagnosisToProceduresOutputSchema = import_zod2.z.object({
287
+ snomed_id: import_zod2.z.string().optional(),
288
+ icd10_code: import_zod2.z.string().optional(),
289
+ icd10_mappings: import_zod2.z.array(import_zod2.z.record(import_zod2.z.unknown())).optional(),
290
+ procedures: import_zod2.z.array(import_zod2.z.record(import_zod2.z.unknown())).optional()
291
+ });
292
+ var CoverageCheckOutputSchema = import_zod2.z.object({
293
+ cpt_code: import_zod2.z.string(),
294
+ icd10_code: import_zod2.z.string().optional(),
295
+ lcd: import_zod2.z.record(import_zod2.z.unknown()).optional(),
296
+ has_guidelines: import_zod2.z.boolean(),
297
+ diagnosis_covered: import_zod2.z.boolean().optional()
298
+ });
299
+ var GetCategoriesOutputSchema = import_zod2.z.object({
300
+ snomed_semantic_tags: import_zod2.z.record(import_zod2.z.unknown()).optional(),
301
+ icd10_chapters: import_zod2.z.array(import_zod2.z.record(import_zod2.z.unknown())).optional(),
302
+ cpt_categories: import_zod2.z.array(import_zod2.z.record(import_zod2.z.unknown())).optional()
303
+ });
304
+
305
+ // src/schemas/system.ts
306
+ var import_zod3 = require("zod");
307
+ var GetResultInputSchema = import_zod3.z.object({
308
+ request_id: import_zod3.z.string().min(1)
309
+ });
310
+ var GetResultOutputSchema = import_zod3.z.object({
311
+ request_id: import_zod3.z.string(),
312
+ status: import_zod3.z.enum(["pending", "running", "completed", "failed"]),
313
+ query: import_zod3.z.string().optional(),
314
+ result: import_zod3.z.record(import_zod3.z.unknown()).optional(),
315
+ error: import_zod3.z.string().optional()
316
+ });
317
+ var EngineStatusSchema = import_zod3.z.record(import_zod3.z.enum(["ok", "error", "unknown"]));
318
+ var HealthOutputSchema = import_zod3.z.object({
319
+ status: import_zod3.z.enum(["ok", "degraded"]),
320
+ version: import_zod3.z.string().optional(),
321
+ environment: import_zod3.z.string().optional(),
322
+ engines: EngineStatusSchema.optional()
323
+ });
324
+
325
+ // src/client.ts
326
+ var ClinicalCategory = class {
327
+ constructor(request) {
328
+ this.request = request;
329
+ }
330
+ /** Check LCD coverage for a CPT code + optional ICD-10 pair */
331
+ async checkCoverage(input) {
332
+ const validated = CoverageCheckInputSchema.parse(input);
333
+ return this.request(
334
+ "clinical/checkCoverage",
335
+ validated
336
+ );
337
+ }
338
+ /** Map a diagnosis (SNOMED or ICD-10) to relevant procedures */
339
+ async getProceduresForDiagnosis(input) {
340
+ const validated = DiagnosisToProceduresInputSchema.parse(input);
341
+ return this.request(
342
+ "clinical/getProceduresForDiagnosis",
343
+ validated
344
+ );
345
+ }
346
+ /** Get metadata/categories from all engines (semantic tags, chapters, etc.) */
347
+ async getMetadata() {
348
+ return this.request("clinical/getMetadata", {});
349
+ }
350
+ };
351
+ var SystemCategory = class {
352
+ constructor(request) {
353
+ this.request = request;
354
+ }
355
+ /** Get async request result by ID */
356
+ async getResult(input) {
357
+ const validated = GetResultInputSchema.parse(input);
358
+ return this.request("system/getResult", validated);
359
+ }
360
+ /** Health check all engines */
361
+ async health() {
362
+ return this.request("system/health", {});
363
+ }
364
+ };
365
+ var DEFAULT_BASE_URL = "https://api.sequoiacodes.com";
366
+ var DEFAULT_VERSION = "v1";
367
+ var SequoiaCodesClient = class {
368
+ apiKey;
369
+ baseUrl;
370
+ version;
371
+ // ==========================================================================
372
+ // Orchestrator Categories
373
+ // ==========================================================================
374
+ /** Clinical orchestrator: coverage check, diagnosis-to-procedures, metadata */
375
+ clinical;
376
+ /** System actions: get async result, health check */
377
+ system;
378
+ // ==========================================================================
379
+ // Coding System Categories
380
+ // ==========================================================================
381
+ /** SNOMED CT coding system */
382
+ snomed;
383
+ /** ICD-10 diagnosis codes */
384
+ icd10;
385
+ /** CPT procedure codes */
386
+ cpt;
387
+ /** HCPCS procedure codes */
388
+ hcpcs;
389
+ /** LOINC laboratory test codes */
390
+ loinc;
391
+ /** RxNorm drug/medication codes */
392
+ rxnorm;
393
+ // ==========================================================================
394
+ // Guideline Categories
395
+ // ==========================================================================
396
+ /** LCD (Local Coverage Determination) guidelines */
397
+ lcd;
398
+ /** NCD (National Coverage Determination) guidelines */
399
+ ncd;
400
+ constructor(config) {
401
+ this.apiKey = config.apiKey;
402
+ this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
403
+ this.version = config.version ?? DEFAULT_VERSION;
404
+ const boundRequest = this.request.bind(this);
405
+ this.clinical = new ClinicalCategory(boundRequest);
406
+ this.system = new SystemCategory(boundRequest);
407
+ this.snomed = new SnomedCategory(boundRequest);
408
+ this.icd10 = new Icd10Category(boundRequest);
409
+ this.cpt = new CptCategory(boundRequest);
410
+ this.hcpcs = new HcpcsCategory(boundRequest);
411
+ this.loinc = new LoincCategory(boundRequest);
412
+ this.rxnorm = new RxnormCategory(boundRequest);
413
+ this.lcd = new LcdCategory(boundRequest);
414
+ this.ncd = new NcdCategory(boundRequest);
415
+ }
416
+ /**
417
+ * Make an HTTP request to the Codes API Gateway.
418
+ */
419
+ async request(path, params, method = "GET") {
420
+ const url = new URL(`${this.baseUrl}/${this.version}/${path}`);
421
+ const headers = {
422
+ Authorization: `Bearer ${this.apiKey}`,
423
+ "Content-Type": "application/json"
424
+ };
425
+ const options = {
426
+ method,
427
+ headers
428
+ };
429
+ if (method === "GET" && params) {
430
+ for (const [key, value] of Object.entries(params)) {
431
+ if (value !== void 0 && value !== null) {
432
+ if (Array.isArray(value)) {
433
+ url.searchParams.set(key, JSON.stringify(value));
434
+ } else if (typeof value === "object") {
435
+ url.searchParams.set(key, JSON.stringify(value));
436
+ } else {
437
+ url.searchParams.set(key, String(value));
438
+ }
439
+ }
440
+ }
441
+ } else if (method === "POST" && params) {
442
+ options.body = JSON.stringify(params);
443
+ }
444
+ const response = await fetch(url.toString(), options);
445
+ const data = await response.json();
446
+ if (!response.ok || !data.success) {
447
+ throw new CodesApiError(
448
+ response.status,
449
+ data.error || "Unknown error",
450
+ path
451
+ );
452
+ }
453
+ return data.data;
454
+ }
455
+ };
456
+
457
+ // src/mcp.ts
458
+ var CODE_SYSTEMS = ["icd10", "cpt", "hcpcs", "snomed", "rxnorm", "loinc"];
459
+ var GUIDELINE_SYSTEMS = ["lcd", "ncd"];
460
+ var apiKey = process.env.SEQUOIA_CODES_API_KEY;
461
+ if (!apiKey) {
462
+ console.error("SEQUOIA_CODES_API_KEY environment variable is required");
463
+ process.exit(1);
464
+ }
465
+ var client = new SequoiaCodesClient({ apiKey });
466
+ var server = new import_mcp.McpServer({
467
+ name: "sequoia-codes",
468
+ version: "0.1.0"
469
+ });
470
+ server.tool(
471
+ "searchCode",
472
+ "Search medical codes by description across ICD-10, CPT, HCPCS, SNOMED, RxNorm, or LOINC systems.",
473
+ {
474
+ system: import_zod4.z.enum(CODE_SYSTEMS).describe("The coding system to search"),
475
+ query: import_zod4.z.string().min(1).describe("Search text (e.g. 'diabetes', 'knee replacement')"),
476
+ limit: import_zod4.z.number().int().min(1).max(200).optional().describe("Max results (1-200)"),
477
+ billingOnly: import_zod4.z.boolean().optional().describe("ICD-10 only: filter to billable codes")
478
+ },
479
+ async ({ system, query, limit, billingOnly }) => {
480
+ const params = { query };
481
+ if (limit !== void 0) params.limit = limit;
482
+ if (system === "icd10" && billingOnly !== void 0) params.billingOnly = billingOnly;
483
+ const result = await client[system].searchCode(params);
484
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
485
+ }
486
+ );
487
+ server.tool(
488
+ "identifyCode",
489
+ "Look up a specific medical code, get cost data, ICD-10 links, panel members, ingredients, or chapters.",
490
+ {
491
+ system: import_zod4.z.enum(CODE_SYSTEMS).describe("The coding system"),
492
+ code: import_zod4.z.string().default("").describe("The code to look up (not needed for getChapters)"),
493
+ type: import_zod4.z.enum(["ndc", "rxcui"]).optional().describe("RxNorm only: lookup type"),
494
+ action: import_zod4.z.enum(["lookup", "getCost", "linkIcd10", "getPanelMembers", "getIngredients", "getChapters"]).default("lookup").describe(
495
+ "lookup (default), getCost (CPT/HCPCS), linkIcd10 (CPT), getPanelMembers (LOINC), getIngredients (RxNorm), getChapters (ICD-10)"
496
+ )
497
+ },
498
+ async ({ system, code, type, action }) => {
499
+ let result;
500
+ switch (action) {
501
+ case "getCost":
502
+ if (system !== "cpt" && system !== "hcpcs") {
503
+ return { content: [{ type: "text", text: "getCost is only available for cpt and hcpcs systems" }] };
504
+ }
505
+ result = await client[system].getCost({ code });
506
+ break;
507
+ case "linkIcd10":
508
+ if (system !== "cpt") {
509
+ return { content: [{ type: "text", text: "linkIcd10 is only available for the cpt system" }] };
510
+ }
511
+ result = await client.cpt.linkIcd10({ code });
512
+ break;
513
+ case "getPanelMembers":
514
+ if (system !== "loinc") {
515
+ return { content: [{ type: "text", text: "getPanelMembers is only available for the loinc system" }] };
516
+ }
517
+ result = await client.loinc.getPanelMembers({ code });
518
+ break;
519
+ case "getIngredients":
520
+ if (system !== "rxnorm") {
521
+ return { content: [{ type: "text", text: "getIngredients is only available for the rxnorm system" }] };
522
+ }
523
+ result = await client.rxnorm.getIngredients({ rxcui: code });
524
+ break;
525
+ case "getChapters":
526
+ if (system !== "icd10") {
527
+ return { content: [{ type: "text", text: "getChapters is only available for the icd10 system" }] };
528
+ }
529
+ result = await client.icd10.getChapters();
530
+ break;
531
+ default: {
532
+ if (system === "rxnorm") {
533
+ result = await client.rxnorm.identifyCode({ type: type ?? "rxcui", code });
534
+ } else {
535
+ result = await client[system].identifyCode({ code });
536
+ }
537
+ break;
538
+ }
539
+ }
540
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
541
+ }
542
+ );
543
+ server.tool(
544
+ "searchGuidelines",
545
+ "Search or look up Medicare coverage guidelines (LCD/NCD). Provide query to search, or id/section to look up a specific guideline.",
546
+ {
547
+ system: import_zod4.z.enum(GUIDELINE_SYSTEMS).describe("lcd (Local Coverage) or ncd (National Coverage)"),
548
+ query: import_zod4.z.string().optional().describe("Search text for guidelines"),
549
+ id: import_zod4.z.string().optional().describe("Guideline ID for direct lookup"),
550
+ section: import_zod4.z.string().optional().describe("NCD only: section number (e.g. '220.6')"),
551
+ limit: import_zod4.z.number().int().min(1).max(200).optional().describe("Max results (1-200)")
552
+ },
553
+ async ({ system, query, id, section, limit }) => {
554
+ let result;
555
+ if (query) {
556
+ const params = { query };
557
+ if (limit !== void 0) params.limit = limit;
558
+ result = await client[system].searchGuidelines(params);
559
+ } else if (id || section) {
560
+ if (system === "ncd") {
561
+ result = await client.ncd.identifyGuideline({ id, section });
562
+ } else {
563
+ if (!id) {
564
+ return { content: [{ type: "text", text: "LCD lookup requires an id" }] };
565
+ }
566
+ result = await client.lcd.identifyGuideline({ id });
567
+ }
568
+ } else {
569
+ return { content: [{ type: "text", text: "Provide either query (to search) or id/section (to look up a specific guideline)" }] };
570
+ }
571
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
572
+ }
573
+ );
574
+ async function main() {
575
+ const transport = new import_stdio.StdioServerTransport();
576
+ await server.connect(transport);
577
+ }
578
+ main().catch((err) => {
579
+ console.error("MCP server failed to start:", err);
580
+ process.exit(1);
581
+ });
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@sequoiaport/codes",
3
- "version": "0.1.0-beta.0",
3
+ "version": "0.1.0-beta.2",
4
4
  "description": "Retrieve ICD-10, CPT, SNOMED, and more medical codes via the Sequoia Codes API.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "sequoia-codes-mcp": "./dist/mcp.js"
10
+ },
8
11
  "scripts": {
9
12
  "build": "tsup"
10
13
  },
@@ -26,12 +29,21 @@
26
29
  "api",
27
30
  "sdk"
28
31
  ],
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/Sequoia-Port/codes.git"
35
+ },
36
+ "homepage": "https://github.com/Sequoia-Port/codes",
37
+ "bugs": {
38
+ "url": "https://github.com/Sequoia-Port/codes/issues"
39
+ },
29
40
  "author": "wconvery",
30
41
  "license": "MIT",
31
42
  "publishConfig": {
32
43
  "access": "public"
33
44
  },
34
45
  "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.12.1",
35
47
  "zod": "^3.23.0"
36
48
  },
37
49
  "devDependencies": {