tebra-mcp-server 0.1.0 → 0.2.0

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.
Files changed (103) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +267 -35
  3. package/dist/config.d.ts +12 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +12 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/fhir-client.d.ts +22 -0
  8. package/dist/fhir-client.d.ts.map +1 -0
  9. package/dist/fhir-client.js +86 -0
  10. package/dist/fhir-client.js.map +1 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +98 -6
  14. package/dist/index.js.map +1 -1
  15. package/dist/integrations/epic-notes-integration.d.ts +145 -0
  16. package/dist/integrations/epic-notes-integration.d.ts.map +1 -0
  17. package/dist/integrations/epic-notes-integration.js +227 -0
  18. package/dist/integrations/epic-notes-integration.js.map +1 -0
  19. package/dist/integrations/fal-integration.d.ts +109 -0
  20. package/dist/integrations/fal-integration.d.ts.map +1 -0
  21. package/dist/integrations/fal-integration.js +192 -0
  22. package/dist/integrations/fal-integration.js.map +1 -0
  23. package/dist/soap-client.d.ts +1 -0
  24. package/dist/soap-client.d.ts.map +1 -1
  25. package/dist/soap-client.js +68 -1
  26. package/dist/soap-client.js.map +1 -1
  27. package/dist/tools/appointment-crud.d.ts +117 -0
  28. package/dist/tools/appointment-crud.d.ts.map +1 -0
  29. package/dist/tools/appointment-crud.js +218 -0
  30. package/dist/tools/appointment-crud.js.map +1 -0
  31. package/dist/tools/appointment-detail.d.ts +25 -0
  32. package/dist/tools/appointment-detail.d.ts.map +1 -0
  33. package/dist/tools/appointment-detail.js +85 -0
  34. package/dist/tools/appointment-detail.js.map +1 -0
  35. package/dist/tools/appointment-reasons.d.ts +20 -0
  36. package/dist/tools/appointment-reasons.d.ts.map +1 -0
  37. package/dist/tools/appointment-reasons.js +48 -0
  38. package/dist/tools/appointment-reasons.js.map +1 -0
  39. package/dist/tools/appointments.d.ts +46 -0
  40. package/dist/tools/appointments.d.ts.map +1 -1
  41. package/dist/tools/appointments.js +71 -4
  42. package/dist/tools/appointments.js.map +1 -1
  43. package/dist/tools/authorizations.js +5 -5
  44. package/dist/tools/bulk-patients.d.ts +33 -0
  45. package/dist/tools/bulk-patients.d.ts.map +1 -0
  46. package/dist/tools/bulk-patients.js +81 -0
  47. package/dist/tools/bulk-patients.js.map +1 -0
  48. package/dist/tools/charges.d.ts +61 -0
  49. package/dist/tools/charges.d.ts.map +1 -1
  50. package/dist/tools/charges.js +98 -14
  51. package/dist/tools/charges.js.map +1 -1
  52. package/dist/tools/documents.d.ts +71 -0
  53. package/dist/tools/documents.d.ts.map +1 -0
  54. package/dist/tools/documents.js +139 -0
  55. package/dist/tools/documents.js.map +1 -0
  56. package/dist/tools/eligibility.js +5 -5
  57. package/dist/tools/encounter-status.d.ts +34 -0
  58. package/dist/tools/encounter-status.d.ts.map +1 -0
  59. package/dist/tools/encounter-status.js +73 -0
  60. package/dist/tools/encounter-status.js.map +1 -0
  61. package/dist/tools/encounters.js +29 -29
  62. package/dist/tools/external-ids.d.ts +66 -0
  63. package/dist/tools/external-ids.d.ts.map +1 -0
  64. package/dist/tools/external-ids.js +140 -0
  65. package/dist/tools/external-ids.js.map +1 -0
  66. package/dist/tools/fhir-clinical.d.ts +187 -0
  67. package/dist/tools/fhir-clinical.d.ts.map +1 -0
  68. package/dist/tools/fhir-clinical.js +597 -0
  69. package/dist/tools/fhir-clinical.js.map +1 -0
  70. package/dist/tools/patient-crud.d.ts +190 -0
  71. package/dist/tools/patient-crud.d.ts.map +1 -0
  72. package/dist/tools/patient-crud.js +297 -0
  73. package/dist/tools/patient-crud.js.map +1 -0
  74. package/dist/tools/patients.d.ts +87 -1
  75. package/dist/tools/patients.d.ts.map +1 -1
  76. package/dist/tools/patients.js +108 -8
  77. package/dist/tools/patients.js.map +1 -1
  78. package/dist/tools/payments.d.ts +105 -0
  79. package/dist/tools/payments.d.ts.map +1 -0
  80. package/dist/tools/payments.js +206 -0
  81. package/dist/tools/payments.js.map +1 -0
  82. package/dist/tools/practices.d.ts +20 -0
  83. package/dist/tools/practices.d.ts.map +1 -0
  84. package/dist/tools/practices.js +54 -0
  85. package/dist/tools/practices.js.map +1 -0
  86. package/dist/tools/procedure-codes.js +5 -5
  87. package/dist/tools/providers.d.ts +25 -0
  88. package/dist/tools/providers.d.ts.map +1 -0
  89. package/dist/tools/providers.js +62 -0
  90. package/dist/tools/providers.js.map +1 -0
  91. package/dist/tools/service-locations.d.ts +25 -0
  92. package/dist/tools/service-locations.d.ts.map +1 -0
  93. package/dist/tools/service-locations.js +62 -0
  94. package/dist/tools/service-locations.js.map +1 -0
  95. package/dist/tools/system.d.ts +81 -0
  96. package/dist/tools/system.d.ts.map +1 -0
  97. package/dist/tools/system.js +184 -0
  98. package/dist/tools/system.js.map +1 -0
  99. package/dist/tools/transactions.d.ts +61 -0
  100. package/dist/tools/transactions.d.ts.map +1 -0
  101. package/dist/tools/transactions.js +122 -0
  102. package/dist/tools/transactions.js.map +1 -0
  103. package/package.json +60 -54
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Provider retrieval.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.providerTools = void 0;
7
+ exports.handleProviderTool = handleProviderTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.providerTools = [
11
+ {
12
+ name: 'tebra_get_providers',
13
+ description: 'Get all providers with IDs, names, specialties, NPI, and active status. Used to resolve provider names to IDs for appointments and encounters.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ practiceName: {
18
+ type: 'string',
19
+ description: 'Optional practice name filter',
20
+ },
21
+ },
22
+ required: [],
23
+ },
24
+ },
25
+ ];
26
+ // ─── Tool Handler ───────────────────────────────────────────────
27
+ async function handleProviderTool(name, args, config) {
28
+ if (name !== 'tebra_get_providers') {
29
+ return { content: [{ type: 'text', text: `Unknown provider tool: ${name}` }] };
30
+ }
31
+ const practiceName = args.practiceName ? String(args.practiceName) : undefined;
32
+ const bodyXml = `
33
+ <kar:request>
34
+ <kar:Fields>
35
+ ${practiceName ? `<kar:PracticeName>${(0, soap_client_js_1.escapeXml)(practiceName)}</kar:PracticeName>` : ''}
36
+ </kar:Fields>
37
+ </kar:request>`;
38
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetProviders', bodyXml);
39
+ const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'ProviderData');
40
+ const providers = blocks.map((block) => ({
41
+ providerId: (0, soap_client_js_1.extractTag)(block, 'ID'),
42
+ firstName: (0, soap_client_js_1.extractTag)(block, 'FirstName'),
43
+ lastName: (0, soap_client_js_1.extractTag)(block, 'LastName'),
44
+ fullName: (0, soap_client_js_1.extractTag)(block, 'FullName'),
45
+ npi: (0, soap_client_js_1.extractTag)(block, 'NPI'),
46
+ specialtyName: (0, soap_client_js_1.extractTag)(block, 'SpecialtyName'),
47
+ departmentName: (0, soap_client_js_1.extractTag)(block, 'DepartmentName'),
48
+ billingType: (0, soap_client_js_1.extractTag)(block, 'BillingType'),
49
+ active: (0, soap_client_js_1.extractTag)(block, 'Active'),
50
+ email: (0, soap_client_js_1.extractTag)(block, 'Email'),
51
+ phone: (0, soap_client_js_1.extractTag)(block, 'Phone'),
52
+ }));
53
+ if (providers.length === 0) {
54
+ return {
55
+ content: [{ type: 'text', text: 'No providers found.' }],
56
+ };
57
+ }
58
+ return {
59
+ content: [{ type: 'text', text: JSON.stringify(providers, null, 2) }],
60
+ };
61
+ }
62
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA2BH,gDA4CC;AApED,sDAAuF;AAEvF,mEAAmE;AAEtD,QAAA,aAAa,GAAG;IAC3B;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,gJAAgJ;QAClJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC;AAEF,mEAAmE;AAE5D,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,IAA6B,EAC7B,MAAmB;IAEnB,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,MAAM,OAAO,GAAG;;;UAGR,YAAY,CAAC,CAAC,CAAC,qBAAqB,IAAA,0BAAS,EAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;;mBAE5E,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,UAAU,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,IAAI,CAAC;QACnC,SAAS,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,WAAW,CAAC;QACzC,QAAQ,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,UAAU,CAAC;QACvC,QAAQ,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,UAAU,CAAC;QACvC,GAAG,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,KAAK,CAAC;QAC7B,aAAa,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,eAAe,CAAC;QACjD,cAAc,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,gBAAgB,CAAC;QACnD,WAAW,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,aAAa,CAAC;QAC7C,MAAM,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,QAAQ,CAAC;QACnC,KAAK,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,OAAO,CAAC;QACjC,KAAK,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,OAAO,CAAC;KAClC,CAAC,CAAC,CAAC;IAEJ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tebra MCP tools: Service location retrieval.
3
+ */
4
+ import type { TebraConfig } from '../config.js';
5
+ export declare const serviceLocationTools: {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {
11
+ practiceName: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ };
16
+ required: never[];
17
+ };
18
+ }[];
19
+ export declare function handleServiceLocationTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
20
+ content: Array<{
21
+ type: string;
22
+ text: string;
23
+ }>;
24
+ }>;
25
+ //# sourceMappingURL=service-locations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-locations.d.ts","sourceRoot":"","sources":["../../src/tools/service-locations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;GAgBhC,CAAC;AAIF,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwC7D"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Service location retrieval.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.serviceLocationTools = void 0;
7
+ exports.handleServiceLocationTool = handleServiceLocationTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.serviceLocationTools = [
11
+ {
12
+ name: 'tebra_get_service_locations',
13
+ description: 'Get all service locations (offices/facilities). Required for creating appointments and encounters.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ practiceName: {
18
+ type: 'string',
19
+ description: 'Optional practice name filter',
20
+ },
21
+ },
22
+ required: [],
23
+ },
24
+ },
25
+ ];
26
+ // ─── Tool Handler ───────────────────────────────────────────────
27
+ async function handleServiceLocationTool(name, args, config) {
28
+ if (name !== 'tebra_get_service_locations') {
29
+ return { content: [{ type: 'text', text: `Unknown service location tool: ${name}` }] };
30
+ }
31
+ const practiceName = args.practiceName ? String(args.practiceName) : undefined;
32
+ const bodyXml = `
33
+ <kar:request>
34
+ <kar:Fields>
35
+ ${practiceName ? `<kar:PracticeName>${(0, soap_client_js_1.escapeXml)(practiceName)}</kar:PracticeName>` : ''}
36
+ </kar:Fields>
37
+ </kar:request>`;
38
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetServiceLocations', bodyXml);
39
+ const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'ServiceLocationData');
40
+ const locations = blocks.map((block) => ({
41
+ serviceLocationId: (0, soap_client_js_1.extractTag)(block, 'ID'),
42
+ name: (0, soap_client_js_1.extractTag)(block, 'Name'),
43
+ address1: (0, soap_client_js_1.extractTag)(block, 'Address1'),
44
+ address2: (0, soap_client_js_1.extractTag)(block, 'Address2'),
45
+ city: (0, soap_client_js_1.extractTag)(block, 'City'),
46
+ state: (0, soap_client_js_1.extractTag)(block, 'State'),
47
+ zipCode: (0, soap_client_js_1.extractTag)(block, 'ZipCode'),
48
+ phone: (0, soap_client_js_1.extractTag)(block, 'Phone'),
49
+ fax: (0, soap_client_js_1.extractTag)(block, 'Fax'),
50
+ npi: (0, soap_client_js_1.extractTag)(block, 'NPI'),
51
+ placeOfService: (0, soap_client_js_1.extractTag)(block, 'PlaceOfService'),
52
+ }));
53
+ if (locations.length === 0) {
54
+ return {
55
+ content: [{ type: 'text', text: 'No service locations found.' }],
56
+ };
57
+ }
58
+ return {
59
+ content: [{ type: 'text', text: JSON.stringify(locations, null, 2) }],
60
+ };
61
+ }
62
+ //# sourceMappingURL=service-locations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-locations.js","sourceRoot":"","sources":["../../src/tools/service-locations.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA2BH,8DA4CC;AApED,sDAAuF;AAEvF,mEAAmE;AAEtD,QAAA,oBAAoB,GAAG;IAClC;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC;AAEF,mEAAmE;AAE5D,KAAK,UAAU,yBAAyB,CAC7C,IAAY,EACZ,IAA6B,EAC7B,MAAmB;IAEnB,IAAI,IAAI,KAAK,6BAA6B,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,MAAM,OAAO,GAAG;;;UAGR,YAAY,CAAC,CAAC,CAAC,qBAAqB,IAAA,0BAAS,EAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;;mBAE5E,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,iBAAiB,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,IAAI,CAAC;QAC1C,IAAI,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,MAAM,CAAC;QAC/B,QAAQ,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,UAAU,CAAC;QACvC,QAAQ,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,UAAU,CAAC;QACvC,IAAI,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,MAAM,CAAC;QAC/B,KAAK,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,OAAO,CAAC;QACjC,OAAO,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,SAAS,CAAC;QACrC,KAAK,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,OAAO,CAAC;QACjC,GAAG,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,KAAK,CAAC;QAC7B,GAAG,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,KAAK,CAAC;QAC7B,cAAc,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,gBAAgB,CAAC;KACpD,CAAC,CAAC,CAAC;IAEJ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Tebra MCP tools: System utilities — throttles, connection validation, patient case, appointment reason creation.
3
+ */
4
+ import type { TebraConfig } from '../config.js';
5
+ export declare const systemTools: ({
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {
11
+ patientId?: undefined;
12
+ caseName?: undefined;
13
+ payerScenario?: undefined;
14
+ name?: undefined;
15
+ duration?: undefined;
16
+ color?: undefined;
17
+ category?: undefined;
18
+ };
19
+ required: never[];
20
+ };
21
+ } | {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: {
25
+ type: "object";
26
+ properties: {
27
+ patientId: {
28
+ type: string;
29
+ description: string;
30
+ };
31
+ caseName: {
32
+ type: string;
33
+ description: string;
34
+ };
35
+ payerScenario: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ name?: undefined;
40
+ duration?: undefined;
41
+ color?: undefined;
42
+ category?: undefined;
43
+ };
44
+ required: string[];
45
+ };
46
+ } | {
47
+ name: string;
48
+ description: string;
49
+ inputSchema: {
50
+ type: "object";
51
+ properties: {
52
+ name: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ duration: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ color: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ category: {
65
+ type: string;
66
+ description: string;
67
+ };
68
+ patientId?: undefined;
69
+ caseName?: undefined;
70
+ payerScenario?: undefined;
71
+ };
72
+ required: string[];
73
+ };
74
+ })[];
75
+ export declare function handleSystemTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
76
+ content: Array<{
77
+ type: string;
78
+ text: string;
79
+ }>;
80
+ }>;
81
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEvB,CAAC;AAIF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2H7D"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: System utilities — throttles, connection validation, patient case, appointment reason creation.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.systemTools = void 0;
7
+ exports.handleSystemTool = handleSystemTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.systemTools = [
11
+ {
12
+ name: 'tebra_get_throttles',
13
+ description: 'Get current API rate limit (throttle) data for each endpoint. Useful for monitoring API usage.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {},
17
+ required: [],
18
+ },
19
+ },
20
+ {
21
+ name: 'tebra_validate_connection',
22
+ description: 'Validate the Tebra API connection by retrieving the customer ID. Use as a health check.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {},
26
+ required: [],
27
+ },
28
+ },
29
+ {
30
+ name: 'tebra_update_patient_case',
31
+ description: 'Update the primary patient case in Tebra. Used to set case name and payer scenario.',
32
+ inputSchema: {
33
+ type: 'object',
34
+ properties: {
35
+ patientId: {
36
+ type: 'string',
37
+ description: 'Tebra patient ID',
38
+ },
39
+ caseName: {
40
+ type: 'string',
41
+ description: 'Optional case name',
42
+ },
43
+ payerScenario: {
44
+ type: 'string',
45
+ description: 'Optional payer scenario',
46
+ },
47
+ },
48
+ required: ['patientId'],
49
+ },
50
+ },
51
+ {
52
+ name: 'tebra_create_appointment_reason',
53
+ description: 'Create a new appointment reason in Tebra with name, default duration, and optional color/category.',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ name: {
58
+ type: 'string',
59
+ description: 'Appointment reason name',
60
+ },
61
+ duration: {
62
+ type: 'number',
63
+ description: 'Default duration in minutes',
64
+ },
65
+ color: {
66
+ type: 'string',
67
+ description: 'Optional color code (hex or named color)',
68
+ },
69
+ category: {
70
+ type: 'string',
71
+ description: 'Optional category',
72
+ },
73
+ },
74
+ required: ['name', 'duration'],
75
+ },
76
+ },
77
+ ];
78
+ // ─── Tool Handler ───────────────────────────────────────────────
79
+ async function handleSystemTool(name, args, config) {
80
+ switch (name) {
81
+ case 'tebra_get_throttles': {
82
+ const bodyXml = `
83
+ <kar:request>
84
+ <kar:Fields />
85
+ </kar:request>`;
86
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetThrottles', bodyXml);
87
+ const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'ThrottleData');
88
+ const throttles = blocks.map((block) => ({
89
+ endpoint: (0, soap_client_js_1.extractTag)(block, 'Endpoint') || (0, soap_client_js_1.extractTag)(block, 'Name'),
90
+ limit: (0, soap_client_js_1.extractTag)(block, 'Limit'),
91
+ remaining: (0, soap_client_js_1.extractTag)(block, 'Remaining'),
92
+ resetTime: (0, soap_client_js_1.extractTag)(block, 'ResetTime'),
93
+ }));
94
+ if (throttles.length === 0) {
95
+ return {
96
+ content: [{ type: 'text', text: 'No throttle data available.' }],
97
+ };
98
+ }
99
+ return {
100
+ content: [{ type: 'text', text: JSON.stringify(throttles, null, 2) }],
101
+ };
102
+ }
103
+ case 'tebra_validate_connection': {
104
+ const bodyXml = `
105
+ <kar:request>
106
+ <kar:Fields />
107
+ </kar:request>`;
108
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetCustomerIdFromKey', bodyXml);
109
+ const customerId = (0, soap_client_js_1.extractTag)(xml, 'CustomerID') || (0, soap_client_js_1.extractTag)(xml, 'ID');
110
+ return {
111
+ content: [{
112
+ type: 'text',
113
+ text: JSON.stringify({
114
+ valid: !!customerId,
115
+ customerId: customerId || null,
116
+ message: customerId
117
+ ? 'Connection validated successfully.'
118
+ : 'Connection validation returned no customer ID.',
119
+ }, null, 2),
120
+ }],
121
+ };
122
+ }
123
+ case 'tebra_update_patient_case': {
124
+ const patientId = String(args.patientId ?? '');
125
+ if (!patientId) {
126
+ return { content: [{ type: 'text', text: 'patientId is required.' }] };
127
+ }
128
+ const caseName = args.caseName ? String(args.caseName) : undefined;
129
+ const payerScenario = args.payerScenario ? String(args.payerScenario) : undefined;
130
+ const bodyXml = `
131
+ <kar:request>
132
+ <kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
133
+ ${caseName ? `<kar:CaseName>${(0, soap_client_js_1.escapeXml)(caseName)}</kar:CaseName>` : ''}
134
+ ${payerScenario ? `<kar:PayerScenario>${(0, soap_client_js_1.escapeXml)(payerScenario)}</kar:PayerScenario>` : ''}
135
+ </kar:request>`;
136
+ await (0, soap_client_js_1.soapRequest)(config, 'UpdatePrimaryPatientCase', bodyXml);
137
+ return {
138
+ content: [{
139
+ type: 'text',
140
+ text: JSON.stringify({
141
+ patientId,
142
+ message: 'Patient case updated successfully.',
143
+ }, null, 2),
144
+ }],
145
+ };
146
+ }
147
+ case 'tebra_create_appointment_reason': {
148
+ const reasonName = String(args.name ?? '');
149
+ const duration = args.duration != null ? Number(args.duration) : NaN;
150
+ if (!reasonName || isNaN(duration)) {
151
+ return {
152
+ content: [{ type: 'text', text: 'name and duration are required.' }],
153
+ };
154
+ }
155
+ const color = args.color ? String(args.color) : undefined;
156
+ const category = args.category ? String(args.category) : undefined;
157
+ const bodyXml = `
158
+ <kar:request>
159
+ <kar:AppointmentReason>
160
+ <kar:Name>${(0, soap_client_js_1.escapeXml)(reasonName)}</kar:Name>
161
+ <kar:DefaultDurationMinutes>${duration}</kar:DefaultDurationMinutes>
162
+ ${color ? `<kar:DefaultColorCode>${(0, soap_client_js_1.escapeXml)(color)}</kar:DefaultColorCode>` : ''}
163
+ ${category ? `<kar:Category>${(0, soap_client_js_1.escapeXml)(category)}</kar:Category>` : ''}
164
+ </kar:AppointmentReason>
165
+ </kar:request>`;
166
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'CreateAppointmentReason', bodyXml);
167
+ const reasonId = (0, soap_client_js_1.extractTag)(xml, 'AppointmentReasonID') || (0, soap_client_js_1.extractTag)(xml, 'ID');
168
+ return {
169
+ content: [{
170
+ type: 'text',
171
+ text: JSON.stringify({
172
+ appointmentReasonId: reasonId,
173
+ name: reasonName,
174
+ duration,
175
+ message: 'Appointment reason created successfully.',
176
+ }, null, 2),
177
+ }],
178
+ };
179
+ }
180
+ default:
181
+ return { content: [{ type: 'text', text: `Unknown system tool: ${name}` }] };
182
+ }
183
+ }
184
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Tebra MCP tools: Transaction retrieval.
3
+ */
4
+ import type { TebraConfig } from '../config.js';
5
+ export declare const transactionTools: {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {
11
+ fromServiceDate: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ toServiceDate: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ fromPostingDate: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ toPostingDate: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ fromTransactionDate: {
28
+ type: string;
29
+ description: string;
30
+ };
31
+ toTransactionDate: {
32
+ type: string;
33
+ description: string;
34
+ };
35
+ transactionType: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ payerType: {
40
+ type: string;
41
+ description: string;
42
+ };
43
+ procedureCode: {
44
+ type: string;
45
+ description: string;
46
+ };
47
+ practiceName: {
48
+ type: string;
49
+ description: string;
50
+ };
51
+ };
52
+ required: never[];
53
+ };
54
+ }[];
55
+ export declare function handleTransactionTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
56
+ content: Array<{
57
+ type: string;
58
+ text: string;
59
+ }>;
60
+ }>;
61
+ //# sourceMappingURL=transactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoD5B,CAAC;AAIF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiE7D"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Transaction retrieval.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.transactionTools = void 0;
7
+ exports.handleTransactionTool = handleTransactionTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.transactionTools = [
11
+ {
12
+ name: 'tebra_get_transactions',
13
+ description: 'Get transactions from Tebra with optional date range, type, and payer filters. Returns financial transaction details.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ fromServiceDate: {
18
+ type: 'string',
19
+ description: 'Optional start service date filter (ISO 8601)',
20
+ },
21
+ toServiceDate: {
22
+ type: 'string',
23
+ description: 'Optional end service date filter (ISO 8601)',
24
+ },
25
+ fromPostingDate: {
26
+ type: 'string',
27
+ description: 'Optional start posting date filter (ISO 8601)',
28
+ },
29
+ toPostingDate: {
30
+ type: 'string',
31
+ description: 'Optional end posting date filter (ISO 8601)',
32
+ },
33
+ fromTransactionDate: {
34
+ type: 'string',
35
+ description: 'Optional start transaction date filter (ISO 8601)',
36
+ },
37
+ toTransactionDate: {
38
+ type: 'string',
39
+ description: 'Optional end transaction date filter (ISO 8601)',
40
+ },
41
+ transactionType: {
42
+ type: 'string',
43
+ description: 'Optional transaction type filter',
44
+ },
45
+ payerType: {
46
+ type: 'string',
47
+ description: 'Optional payer type filter',
48
+ },
49
+ procedureCode: {
50
+ type: 'string',
51
+ description: 'Optional CPT/procedure code filter',
52
+ },
53
+ practiceName: {
54
+ type: 'string',
55
+ description: 'Optional practice name filter',
56
+ },
57
+ },
58
+ required: [],
59
+ },
60
+ },
61
+ ];
62
+ // ─── Tool Handler ───────────────────────────────────────────────
63
+ async function handleTransactionTool(name, args, config) {
64
+ if (name !== 'tebra_get_transactions') {
65
+ return { content: [{ type: 'text', text: `Unknown transaction tool: ${name}` }] };
66
+ }
67
+ const fromServiceDate = args.fromServiceDate ? String(args.fromServiceDate) : undefined;
68
+ const toServiceDate = args.toServiceDate ? String(args.toServiceDate) : undefined;
69
+ const fromPostingDate = args.fromPostingDate ? String(args.fromPostingDate) : undefined;
70
+ const toPostingDate = args.toPostingDate ? String(args.toPostingDate) : undefined;
71
+ const fromTransactionDate = args.fromTransactionDate ? String(args.fromTransactionDate) : undefined;
72
+ const toTransactionDate = args.toTransactionDate ? String(args.toTransactionDate) : undefined;
73
+ const transactionType = args.transactionType ? String(args.transactionType) : undefined;
74
+ const payerType = args.payerType ? String(args.payerType) : undefined;
75
+ const procedureCode = args.procedureCode ? String(args.procedureCode) : undefined;
76
+ const practiceName = args.practiceName ? String(args.practiceName) : undefined;
77
+ const fieldsXml = [
78
+ fromServiceDate ? `<kar:FromServiceDate>${(0, soap_client_js_1.escapeXml)(fromServiceDate)}</kar:FromServiceDate>` : '',
79
+ toServiceDate ? `<kar:ToServiceDate>${(0, soap_client_js_1.escapeXml)(toServiceDate)}</kar:ToServiceDate>` : '',
80
+ fromPostingDate ? `<kar:FromPostingDate>${(0, soap_client_js_1.escapeXml)(fromPostingDate)}</kar:FromPostingDate>` : '',
81
+ toPostingDate ? `<kar:ToPostingDate>${(0, soap_client_js_1.escapeXml)(toPostingDate)}</kar:ToPostingDate>` : '',
82
+ fromTransactionDate ? `<kar:FromTransactionDate>${(0, soap_client_js_1.escapeXml)(fromTransactionDate)}</kar:FromTransactionDate>` : '',
83
+ toTransactionDate ? `<kar:ToTransactionDate>${(0, soap_client_js_1.escapeXml)(toTransactionDate)}</kar:ToTransactionDate>` : '',
84
+ transactionType ? `<kar:TransactionType>${(0, soap_client_js_1.escapeXml)(transactionType)}</kar:TransactionType>` : '',
85
+ payerType ? `<kar:PayerType>${(0, soap_client_js_1.escapeXml)(payerType)}</kar:PayerType>` : '',
86
+ procedureCode ? `<kar:ProcedureCode>${(0, soap_client_js_1.escapeXml)(procedureCode)}</kar:ProcedureCode>` : '',
87
+ practiceName ? `<kar:PracticeName>${(0, soap_client_js_1.escapeXml)(practiceName)}</kar:PracticeName>` : '',
88
+ ]
89
+ .filter(Boolean)
90
+ .join('\n ');
91
+ const bodyXml = `
92
+ <kar:request>
93
+ <kar:Fields>
94
+ ${fieldsXml}
95
+ </kar:Fields>
96
+ </kar:request>`;
97
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetTransactions', bodyXml);
98
+ const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'TransactionData');
99
+ const transactions = blocks.map((block) => ({
100
+ transactionId: (0, soap_client_js_1.extractTag)(block, 'ID'),
101
+ amount: (0, soap_client_js_1.extractTag)(block, 'Amount'),
102
+ type: (0, soap_client_js_1.extractTag)(block, 'Type'),
103
+ description: (0, soap_client_js_1.extractTag)(block, 'Description'),
104
+ patientId: (0, soap_client_js_1.extractTag)(block, 'PatientID'),
105
+ patientFullName: (0, soap_client_js_1.extractTag)(block, 'PatientFullName'),
106
+ claimId: (0, soap_client_js_1.extractTag)(block, 'ClaimID'),
107
+ procedureCode: (0, soap_client_js_1.extractTag)(block, 'ProcedureCode'),
108
+ insuranceCompanyName: (0, soap_client_js_1.extractTag)(block, 'InsuranceCompanyName'),
109
+ serviceDate: (0, soap_client_js_1.extractTag)(block, 'ServiceDate'),
110
+ postingDate: (0, soap_client_js_1.extractTag)(block, 'PostingDate'),
111
+ transactionDate: (0, soap_client_js_1.extractTag)(block, 'TransactionDate'),
112
+ }));
113
+ if (transactions.length === 0) {
114
+ return {
115
+ content: [{ type: 'text', text: 'No transactions found matching the specified filters.' }],
116
+ };
117
+ }
118
+ return {
119
+ content: [{ type: 'text', text: JSON.stringify(transactions, null, 2) }],
120
+ };
121
+ }
122
+ //# sourceMappingURL=transactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}