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,218 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Appointment create, update, delete.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.appointmentCrudTools = void 0;
7
+ exports.handleAppointmentCrudTool = handleAppointmentCrudTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.appointmentCrudTools = [
11
+ {
12
+ name: 'tebra_create_appointment',
13
+ description: 'Create a new appointment in Tebra. Requires patient, provider, service location, appointment reason, and start date.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ patientId: {
18
+ type: 'string',
19
+ description: 'Tebra patient ID',
20
+ },
21
+ providerId: {
22
+ type: 'string',
23
+ description: 'Tebra provider ID',
24
+ },
25
+ serviceLocationId: {
26
+ type: 'string',
27
+ description: 'Tebra service location ID',
28
+ },
29
+ appointmentReasonId: {
30
+ type: 'string',
31
+ description: 'Tebra appointment reason ID',
32
+ },
33
+ startDate: {
34
+ type: 'string',
35
+ description: 'Appointment start date/time (ISO 8601, e.g. 2026-04-01T09:00:00)',
36
+ },
37
+ duration: {
38
+ type: 'number',
39
+ description: 'Optional duration in minutes (defaults to appointment reason default)',
40
+ },
41
+ notes: {
42
+ type: 'string',
43
+ description: 'Optional appointment notes',
44
+ },
45
+ confirmationStatus: {
46
+ type: 'string',
47
+ description: 'Optional confirmation status (e.g. Confirmed, Unconfirmed)',
48
+ },
49
+ },
50
+ required: ['patientId', 'providerId', 'serviceLocationId', 'appointmentReasonId', 'startDate'],
51
+ },
52
+ },
53
+ {
54
+ name: 'tebra_update_appointment',
55
+ description: 'Update an existing appointment in Tebra. Only provided fields will be changed.',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ appointmentId: {
60
+ type: 'string',
61
+ description: 'Tebra appointment ID to update',
62
+ },
63
+ startDate: {
64
+ type: 'string',
65
+ description: 'Optional new start date/time (ISO 8601)',
66
+ },
67
+ duration: {
68
+ type: 'number',
69
+ description: 'Optional new duration in minutes',
70
+ },
71
+ providerId: {
72
+ type: 'string',
73
+ description: 'Optional new provider ID',
74
+ },
75
+ confirmationStatus: {
76
+ type: 'string',
77
+ description: 'Optional new confirmation status',
78
+ },
79
+ notes: {
80
+ type: 'string',
81
+ description: 'Optional updated notes',
82
+ },
83
+ cancellationReason: {
84
+ type: 'string',
85
+ description: 'Optional cancellation reason (for cancelled appointments)',
86
+ },
87
+ },
88
+ required: ['appointmentId'],
89
+ },
90
+ },
91
+ {
92
+ name: 'tebra_delete_appointment',
93
+ description: 'Delete an appointment from Tebra by appointment ID.',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ appointmentId: {
98
+ type: 'string',
99
+ description: 'Tebra appointment ID to delete',
100
+ },
101
+ },
102
+ required: ['appointmentId'],
103
+ },
104
+ },
105
+ ];
106
+ // ─── Tool Handler ───────────────────────────────────────────────
107
+ async function handleAppointmentCrudTool(name, args, config) {
108
+ switch (name) {
109
+ case 'tebra_create_appointment': {
110
+ const patientId = String(args.patientId ?? '');
111
+ const providerId = String(args.providerId ?? '');
112
+ const serviceLocationId = String(args.serviceLocationId ?? '');
113
+ const appointmentReasonId = String(args.appointmentReasonId ?? '');
114
+ const startDate = String(args.startDate ?? '');
115
+ if (!patientId || !providerId || !serviceLocationId || !appointmentReasonId || !startDate) {
116
+ return {
117
+ content: [{
118
+ type: 'text',
119
+ text: 'patientId, providerId, serviceLocationId, appointmentReasonId, and startDate are all required.',
120
+ }],
121
+ };
122
+ }
123
+ const duration = args.duration != null ? Number(args.duration) : undefined;
124
+ const notes = args.notes ? String(args.notes) : undefined;
125
+ const confirmationStatus = args.confirmationStatus ? String(args.confirmationStatus) : undefined;
126
+ const bodyXml = `
127
+ <kar:request>
128
+ <kar:Appointment>
129
+ <kar:Patient>
130
+ <kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
131
+ </kar:Patient>
132
+ <kar:Provider>
133
+ <kar:ProviderID>${(0, soap_client_js_1.escapeXml)(providerId)}</kar:ProviderID>
134
+ </kar:Provider>
135
+ <kar:ServiceLocation>
136
+ <kar:ServiceLocationID>${(0, soap_client_js_1.escapeXml)(serviceLocationId)}</kar:ServiceLocationID>
137
+ </kar:ServiceLocation>
138
+ <kar:AppointmentReason>
139
+ <kar:AppointmentReasonID>${(0, soap_client_js_1.escapeXml)(appointmentReasonId)}</kar:AppointmentReasonID>
140
+ </kar:AppointmentReason>
141
+ <kar:StartDate>${(0, soap_client_js_1.escapeXml)(startDate)}</kar:StartDate>
142
+ ${duration != null ? `<kar:Duration>${duration}</kar:Duration>` : ''}
143
+ ${notes ? `<kar:Notes>${(0, soap_client_js_1.escapeXml)(notes)}</kar:Notes>` : ''}
144
+ ${confirmationStatus ? `<kar:ConfirmationStatus>${(0, soap_client_js_1.escapeXml)(confirmationStatus)}</kar:ConfirmationStatus>` : ''}
145
+ </kar:Appointment>
146
+ </kar:request>`;
147
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'CreateAppointment', bodyXml);
148
+ const appointmentId = (0, soap_client_js_1.extractTag)(xml, 'AppointmentID') || (0, soap_client_js_1.extractTag)(xml, 'ID');
149
+ return {
150
+ content: [{
151
+ type: 'text',
152
+ text: JSON.stringify({
153
+ appointmentId,
154
+ message: 'Appointment created successfully.',
155
+ }, null, 2),
156
+ }],
157
+ };
158
+ }
159
+ case 'tebra_update_appointment': {
160
+ const appointmentId = String(args.appointmentId ?? '');
161
+ if (!appointmentId) {
162
+ return { content: [{ type: 'text', text: 'appointmentId is required.' }] };
163
+ }
164
+ const startDate = args.startDate ? String(args.startDate) : undefined;
165
+ const duration = args.duration != null ? Number(args.duration) : undefined;
166
+ const providerId = args.providerId ? String(args.providerId) : undefined;
167
+ const confirmationStatus = args.confirmationStatus ? String(args.confirmationStatus) : undefined;
168
+ const notes = args.notes ? String(args.notes) : undefined;
169
+ const cancellationReason = args.cancellationReason ? String(args.cancellationReason) : undefined;
170
+ const bodyXml = `
171
+ <kar:request>
172
+ <kar:Appointment>
173
+ <kar:AppointmentID>${(0, soap_client_js_1.escapeXml)(appointmentId)}</kar:AppointmentID>
174
+ ${startDate ? `<kar:StartDate>${(0, soap_client_js_1.escapeXml)(startDate)}</kar:StartDate>` : ''}
175
+ ${duration != null ? `<kar:Duration>${duration}</kar:Duration>` : ''}
176
+ ${providerId ? `<kar:Provider><kar:ProviderID>${(0, soap_client_js_1.escapeXml)(providerId)}</kar:ProviderID></kar:Provider>` : ''}
177
+ ${confirmationStatus ? `<kar:ConfirmationStatus>${(0, soap_client_js_1.escapeXml)(confirmationStatus)}</kar:ConfirmationStatus>` : ''}
178
+ ${notes ? `<kar:Notes>${(0, soap_client_js_1.escapeXml)(notes)}</kar:Notes>` : ''}
179
+ ${cancellationReason ? `<kar:CancellationReason>${(0, soap_client_js_1.escapeXml)(cancellationReason)}</kar:CancellationReason>` : ''}
180
+ </kar:Appointment>
181
+ </kar:request>`;
182
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'UpdateAppointment', bodyXml);
183
+ const updatedId = (0, soap_client_js_1.extractTag)(xml, 'AppointmentID') || (0, soap_client_js_1.extractTag)(xml, 'ID') || appointmentId;
184
+ return {
185
+ content: [{
186
+ type: 'text',
187
+ text: JSON.stringify({
188
+ appointmentId: updatedId,
189
+ message: 'Appointment updated successfully.',
190
+ }, null, 2),
191
+ }],
192
+ };
193
+ }
194
+ case 'tebra_delete_appointment': {
195
+ const appointmentId = String(args.appointmentId ?? '');
196
+ if (!appointmentId) {
197
+ return { content: [{ type: 'text', text: 'appointmentId is required.' }] };
198
+ }
199
+ const bodyXml = `
200
+ <kar:request>
201
+ <kar:AppointmentID>${(0, soap_client_js_1.escapeXml)(appointmentId)}</kar:AppointmentID>
202
+ </kar:request>`;
203
+ await (0, soap_client_js_1.soapRequest)(config, 'DeleteAppointment', bodyXml);
204
+ return {
205
+ content: [{
206
+ type: 'text',
207
+ text: JSON.stringify({
208
+ appointmentId,
209
+ message: 'Appointment deleted successfully.',
210
+ }, null, 2),
211
+ }],
212
+ };
213
+ }
214
+ default:
215
+ return { content: [{ type: 'text', text: `Unknown appointment CRUD tool: ${name}` }] };
216
+ }
217
+ }
218
+ //# sourceMappingURL=appointment-crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-crud.js","sourceRoot":"","sources":["../../src/tools/appointment-crud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tebra MCP tools: Single appointment detail retrieval.
3
+ */
4
+ import type { TebraConfig } from '../config.js';
5
+ export declare const appointmentDetailTools: {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {
11
+ appointmentId: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ };
16
+ required: string[];
17
+ };
18
+ }[];
19
+ export declare function handleAppointmentDetailTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
20
+ content: Array<{
21
+ type: string;
22
+ text: string;
23
+ }>;
24
+ }>;
25
+ //# sourceMappingURL=appointment-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-detail.d.ts","sourceRoot":"","sources":["../../src/tools/appointment-detail.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;GAgBlC,CAAC;AAIF,wBAAsB,2BAA2B,CAC/C,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,CA+D7D"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Single appointment detail retrieval.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.appointmentDetailTools = void 0;
7
+ exports.handleAppointmentDetailTool = handleAppointmentDetailTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.appointmentDetailTools = [
11
+ {
12
+ name: 'tebra_get_appointment_detail',
13
+ description: 'Get full detail for a single appointment by ID, including recurrence rules, group data, and all resource slots.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ appointmentId: {
18
+ type: 'string',
19
+ description: 'Tebra appointment ID',
20
+ },
21
+ },
22
+ required: ['appointmentId'],
23
+ },
24
+ },
25
+ ];
26
+ // ─── Tool Handler ───────────────────────────────────────────────
27
+ async function handleAppointmentDetailTool(name, args, config) {
28
+ if (name !== 'tebra_get_appointment_detail') {
29
+ return { content: [{ type: 'text', text: `Unknown appointment detail tool: ${name}` }] };
30
+ }
31
+ const appointmentId = String(args.appointmentId ?? '');
32
+ if (!appointmentId) {
33
+ return { content: [{ type: 'text', text: 'appointmentId is required.' }] };
34
+ }
35
+ const bodyXml = `
36
+ <kar:request>
37
+ <kar:Fields>
38
+ <kar:AppointmentID>${(0, soap_client_js_1.escapeXml)(appointmentId)}</kar:AppointmentID>
39
+ </kar:Fields>
40
+ </kar:request>`;
41
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetAppointment', bodyXml);
42
+ const apptBlock = (0, soap_client_js_1.extractTag)(xml, 'Appointment') || (0, soap_client_js_1.extractTag)(xml, 'AppointmentData');
43
+ if (!apptBlock) {
44
+ return {
45
+ content: [{ type: 'text', text: `Appointment not found: ${appointmentId}` }],
46
+ };
47
+ }
48
+ const detail = {
49
+ appointmentId: (0, soap_client_js_1.extractTag)(apptBlock, 'AppointmentID') || (0, soap_client_js_1.extractTag)(apptBlock, 'ID'),
50
+ patientId: (0, soap_client_js_1.extractTag)(apptBlock, 'PatientID'),
51
+ patientName: `${(0, soap_client_js_1.extractTag)(apptBlock, 'PatientFirstName')} ${(0, soap_client_js_1.extractTag)(apptBlock, 'PatientLastName')}`.trim(),
52
+ providerId: (0, soap_client_js_1.extractTag)(apptBlock, 'ProviderID'),
53
+ providerName: (0, soap_client_js_1.extractTag)(apptBlock, 'ProviderFullName'),
54
+ serviceLocationId: (0, soap_client_js_1.extractTag)(apptBlock, 'ServiceLocationID'),
55
+ serviceLocationName: (0, soap_client_js_1.extractTag)(apptBlock, 'ServiceLocationName'),
56
+ startDate: (0, soap_client_js_1.extractTag)(apptBlock, 'StartDate'),
57
+ endDate: (0, soap_client_js_1.extractTag)(apptBlock, 'EndDate'),
58
+ duration: (0, soap_client_js_1.extractTag)(apptBlock, 'Duration'),
59
+ appointmentType: (0, soap_client_js_1.extractTag)(apptBlock, 'AppointmentType'),
60
+ appointmentReason: (0, soap_client_js_1.extractTag)(apptBlock, 'AppointmentReason'),
61
+ status: (0, soap_client_js_1.extractTag)(apptBlock, 'Status') || (0, soap_client_js_1.extractTag)(apptBlock, 'AppointmentStatus'),
62
+ confirmationStatus: (0, soap_client_js_1.extractTag)(apptBlock, 'ConfirmationStatus'),
63
+ notes: (0, soap_client_js_1.extractTag)(apptBlock, 'Notes'),
64
+ recurrenceRule: (0, soap_client_js_1.extractTag)(apptBlock, 'RecurrenceRule'),
65
+ recurrenceId: (0, soap_client_js_1.extractTag)(apptBlock, 'RecurrenceID'),
66
+ groupId: (0, soap_client_js_1.extractTag)(apptBlock, 'GroupID'),
67
+ groupName: (0, soap_client_js_1.extractTag)(apptBlock, 'GroupName'),
68
+ resource1: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource1'),
69
+ resource2: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource2'),
70
+ resource3: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource3'),
71
+ resource4: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource4'),
72
+ resource5: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource5'),
73
+ resource6: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource6'),
74
+ resource7: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource7'),
75
+ resource8: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource8'),
76
+ resource9: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource9'),
77
+ resource10: (0, soap_client_js_1.extractTag)(apptBlock, 'Resource10'),
78
+ createdDate: (0, soap_client_js_1.extractTag)(apptBlock, 'CreatedDate'),
79
+ lastModifiedDate: (0, soap_client_js_1.extractTag)(apptBlock, 'LastModifiedDate'),
80
+ };
81
+ return {
82
+ content: [{ type: 'text', text: JSON.stringify(detail, null, 2) }],
83
+ };
84
+ }
85
+ //# sourceMappingURL=appointment-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-detail.js","sourceRoot":"","sources":["../../src/tools/appointment-detail.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA2BH,kEAmEC;AA3FD,sDAAuE;AAEvE,mEAAmE;AAEtD,QAAA,sBAAsB,GAAG;IACpC;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACT,iHAAiH;QACnH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sBAAsB;iBACpC;aACF;YACD,QAAQ,EAAE,CAAC,eAAe,CAAC;SAC5B;KACF;CACF,CAAC;AAEF,mEAAmE;AAE5D,KAAK,UAAU,2BAA2B,CAC/C,IAAY,EACZ,IAA6B,EAC7B,MAAmB;IAEnB,IAAI,IAAI,KAAK,8BAA8B,EAAE,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG;;;6BAGW,IAAA,0BAAS,EAAC,aAAa,CAAC;;mBAElC,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAA,2BAAU,EAAC,GAAG,EAAE,aAAa,CAAC,IAAI,IAAA,2BAAU,EAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAEvF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,aAAa,EAAE,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,eAAe,CAAC,IAAI,IAAA,2BAAU,EAAC,SAAS,EAAE,IAAI,CAAC;QACpF,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,WAAW,EAAE,GAAG,IAAA,2BAAU,EAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,IAAA,2BAAU,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC9G,UAAU,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,YAAY,CAAC;QAC/C,YAAY,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,kBAAkB,CAAC;QACvD,iBAAiB,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,mBAAmB,CAAC;QAC7D,mBAAmB,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,qBAAqB,CAAC;QACjE,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,OAAO,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,SAAS,CAAC;QACzC,QAAQ,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,UAAU,CAAC;QAC3C,eAAe,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,iBAAiB,CAAC;QACzD,iBAAiB,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,mBAAmB,CAAC;QAC7D,MAAM,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,IAAA,2BAAU,EAAC,SAAS,EAAE,mBAAmB,CAAC;QACrF,kBAAkB,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,oBAAoB,CAAC;QAC/D,KAAK,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,OAAO,CAAC;QACrC,cAAc,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,gBAAgB,CAAC;QACvD,YAAY,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,cAAc,CAAC;QACnD,OAAO,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,SAAS,CAAC;QACzC,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,SAAS,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,UAAU,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,YAAY,CAAC;QAC/C,WAAW,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,aAAa,CAAC;QACjD,gBAAgB,EAAE,IAAA,2BAAU,EAAC,SAAS,EAAE,kBAAkB,CAAC;KAC5D,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tebra MCP tools: Appointment reason retrieval.
3
+ */
4
+ import type { TebraConfig } from '../config.js';
5
+ export declare const appointmentReasonTools: {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {};
11
+ required: never[];
12
+ };
13
+ }[];
14
+ export declare function handleAppointmentReasonTool(name: string, _args: Record<string, unknown>, config: TebraConfig): Promise<{
15
+ content: Array<{
16
+ type: string;
17
+ text: string;
18
+ }>;
19
+ }>;
20
+ //# sourceMappingURL=appointment-reasons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-reasons.d.ts","sourceRoot":"","sources":["../../src/tools/appointment-reasons.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,sBAAsB;;;;;;;;GAWlC,CAAC;AAIF,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,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,CA8B7D"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: Appointment reason retrieval.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.appointmentReasonTools = void 0;
7
+ exports.handleAppointmentReasonTool = handleAppointmentReasonTool;
8
+ const soap_client_js_1 = require("../soap-client.js");
9
+ // ─── Tool Definitions ───────────────────────────────────────────
10
+ exports.appointmentReasonTools = [
11
+ {
12
+ name: 'tebra_get_appointment_reasons',
13
+ description: 'Get all appointment reasons configured in the practice. Returns reason IDs, names, default durations, and color codes.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {},
17
+ required: [],
18
+ },
19
+ },
20
+ ];
21
+ // ─── Tool Handler ───────────────────────────────────────────────
22
+ async function handleAppointmentReasonTool(name, _args, config) {
23
+ if (name !== 'tebra_get_appointment_reasons') {
24
+ return { content: [{ type: 'text', text: `Unknown appointment reason tool: ${name}` }] };
25
+ }
26
+ const bodyXml = `
27
+ <kar:request>
28
+ <kar:Fields />
29
+ </kar:request>`;
30
+ const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetAppointmentReasons', bodyXml);
31
+ const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'AppointmentReasonData');
32
+ const reasons = blocks.map((block) => ({
33
+ appointmentReasonId: (0, soap_client_js_1.extractTag)(block, 'AppointmentReasonID') || (0, soap_client_js_1.extractTag)(block, 'ID'),
34
+ name: (0, soap_client_js_1.extractTag)(block, 'Name'),
35
+ defaultDurationMinutes: (0, soap_client_js_1.extractTag)(block, 'DefaultDurationMinutes'),
36
+ defaultColorCode: (0, soap_client_js_1.extractTag)(block, 'DefaultColorCode'),
37
+ practiceId: (0, soap_client_js_1.extractTag)(block, 'PracticeID'),
38
+ }));
39
+ if (reasons.length === 0) {
40
+ return {
41
+ content: [{ type: 'text', text: 'No appointment reasons found.' }],
42
+ };
43
+ }
44
+ return {
45
+ content: [{ type: 'text', text: JSON.stringify(reasons, null, 2) }],
46
+ };
47
+ }
48
+ //# sourceMappingURL=appointment-reasons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-reasons.js","sourceRoot":"","sources":["../../src/tools/appointment-reasons.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsBH,kEAkCC;AArDD,sDAA4E;AAE5E,mEAAmE;AAEtD,QAAA,sBAAsB,GAAG;IACpC;QACE,IAAI,EAAE,+BAA+B;QACrC,WAAW,EACT,wHAAwH;QAC1H,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC;AAEF,mEAAmE;AAE5D,KAAK,UAAU,2BAA2B,CAC/C,IAAY,EACZ,KAA8B,EAC9B,MAAmB;IAEnB,IAAI,IAAI,KAAK,+BAA+B,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,OAAO,GAAG;;;mBAGC,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,mBAAmB,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,IAAA,2BAAU,EAAC,KAAK,EAAE,IAAI,CAAC;QACxF,IAAI,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,MAAM,CAAC;QAC/B,sBAAsB,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,wBAAwB,CAAC;QACnE,gBAAgB,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,kBAAkB,CAAC;QACvD,UAAU,EAAE,IAAA,2BAAU,EAAC,KAAK,EAAE,YAAY,CAAC;KAC5C,CAAC,CAAC,CAAC;IAEJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC"}
@@ -20,6 +20,52 @@ export declare const appointmentTools: {
20
20
  type: string;
21
21
  description: string;
22
22
  };
23
+ confirmationStatus: {
24
+ type: string;
25
+ enum: string[];
26
+ description: string;
27
+ };
28
+ patientFullName: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ patientId: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ serviceLocationName: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ appointmentReason: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ appointmentType: {
45
+ type: string;
46
+ enum: string[];
47
+ description: string;
48
+ };
49
+ fromCreatedDate: {
50
+ type: string;
51
+ description: string;
52
+ };
53
+ toCreatedDate: {
54
+ type: string;
55
+ description: string;
56
+ };
57
+ fromLastModifiedDate: {
58
+ type: string;
59
+ description: string;
60
+ };
61
+ toLastModifiedDate: {
62
+ type: string;
63
+ description: string;
64
+ };
65
+ casePayerScenario: {
66
+ type: string;
67
+ description: string;
68
+ };
23
69
  };
24
70
  required: string[];
25
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"appointments.d.ts","sourceRoot":"","sources":["../../src/tools/appointments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;GAwB5B,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,CAoD7D"}
1
+ {"version":3,"file":"appointments.d.ts","sourceRoot":"","sources":["../../src/tools/appointments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsE5B,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,CA0E7D"}
@@ -10,7 +10,7 @@ const soap_client_js_1 = require("../soap-client.js");
10
10
  exports.appointmentTools = [
11
11
  {
12
12
  name: 'tebra_get_appointments',
13
- description: 'Get appointments from Tebra within a date range. Optionally filter by provider.',
13
+ description: 'Get appointments from Tebra within a date range. Filter by provider, patient, confirmation status, service location, reason, type, and more.',
14
14
  inputSchema: {
15
15
  type: 'object',
16
16
  properties: {
@@ -24,7 +24,53 @@ exports.appointmentTools = [
24
24
  },
25
25
  providerId: {
26
26
  type: 'string',
27
- description: 'Optional Tebra provider ID to filter by',
27
+ description: 'Tebra provider ID to filter by',
28
+ },
29
+ confirmationStatus: {
30
+ type: 'string',
31
+ enum: ['Confirmed', 'CheckedIn', 'NoShow', 'CheckedOut', 'Rescheduled', 'Scheduled', 'Cancelled'],
32
+ description: 'Filter by confirmation status',
33
+ },
34
+ patientFullName: {
35
+ type: 'string',
36
+ description: 'Filter by patient full name',
37
+ },
38
+ patientId: {
39
+ type: 'string',
40
+ description: 'Filter by Tebra patient ID',
41
+ },
42
+ serviceLocationName: {
43
+ type: 'string',
44
+ description: 'Filter by service location name',
45
+ },
46
+ appointmentReason: {
47
+ type: 'string',
48
+ description: 'Filter by appointment reason',
49
+ },
50
+ appointmentType: {
51
+ type: 'string',
52
+ enum: ['U', 'P', 'O'],
53
+ description: 'Filter by type: U=Unknown, P=Patient, O=Other',
54
+ },
55
+ fromCreatedDate: {
56
+ type: 'string',
57
+ description: 'Created date range start (YYYY-MM-DD)',
58
+ },
59
+ toCreatedDate: {
60
+ type: 'string',
61
+ description: 'Created date range end (YYYY-MM-DD)',
62
+ },
63
+ fromLastModifiedDate: {
64
+ type: 'string',
65
+ description: 'Modified date range start (YYYY-MM-DD)',
66
+ },
67
+ toLastModifiedDate: {
68
+ type: 'string',
69
+ description: 'Modified date range end (YYYY-MM-DD)',
70
+ },
71
+ casePayerScenario: {
72
+ type: 'string',
73
+ description: 'Patient case payer scenario filter',
28
74
  },
29
75
  },
30
76
  required: ['startDate', 'endDate'],
@@ -41,13 +87,34 @@ async function handleAppointmentTool(name, args, config) {
41
87
  if (!startDate || !endDate) {
42
88
  return { content: [{ type: 'text', text: 'startDate and endDate are required.' }] };
43
89
  }
44
- const providerId = args.providerId ? String(args.providerId) : undefined;
90
+ // Map of arg names to SOAP filter field names
91
+ const optionalFilterMap = [
92
+ ['providerId', 'ProviderID'],
93
+ ['confirmationStatus', 'ConfirmationStatus'],
94
+ ['patientFullName', 'PatientFullName'],
95
+ ['patientId', 'PatientID'],
96
+ ['serviceLocationName', 'ServiceLocationName'],
97
+ ['appointmentReason', 'AppointmentReason'],
98
+ ['appointmentType', 'Type'],
99
+ ['fromCreatedDate', 'FromCreatedDate'],
100
+ ['toCreatedDate', 'ToCreatedDate'],
101
+ ['fromLastModifiedDate', 'FromLastModifiedDate'],
102
+ ['toLastModifiedDate', 'ToLastModifiedDate'],
103
+ ['casePayerScenario', 'PatientCasePayerScenario'],
104
+ ];
105
+ const optionalFields = [];
106
+ for (const [argKey, soapField] of optionalFilterMap) {
107
+ const val = args[argKey];
108
+ if (val !== undefined && val !== null && val !== '') {
109
+ optionalFields.push(`<kar:${soapField}>${(0, soap_client_js_1.escapeXml)(String(val))}</kar:${soapField}>`);
110
+ }
111
+ }
45
112
  const bodyXml = `
46
113
  <kar:request>
47
114
  <kar:Fields>
48
115
  <kar:StartDate>${(0, soap_client_js_1.escapeXml)(startDate)}</kar:StartDate>
49
116
  <kar:EndDate>${(0, soap_client_js_1.escapeXml)(endDate)}</kar:EndDate>
50
- ${providerId ? `<kar:ProviderID>${(0, soap_client_js_1.escapeXml)(providerId)}</kar:ProviderID>` : ''}
117
+ ${optionalFields.join('\n ')}
51
118
  </kar:Fields>
52
119
  </kar:request>`;
53
120
  const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetAppointments', bodyXml);
@@ -1 +1 @@
1
- {"version":3,"file":"appointments.js","sourceRoot":"","sources":["../../src/tools/appointments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appointments.js","sourceRoot":"","sources":["../../src/tools/appointments.ts"],"names":[],"mappings":"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"}
@@ -32,11 +32,11 @@ async function handleAuthorizationTool(name, args, config) {
32
32
  if (!patientId) {
33
33
  return { content: [{ type: 'text', text: 'patientId is required.' }] };
34
34
  }
35
- const bodyXml = `
36
- <kar:request>
37
- <kar:Fields>
38
- <kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
39
- </kar:Fields>
35
+ const bodyXml = `
36
+ <kar:request>
37
+ <kar:Fields>
38
+ <kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
39
+ </kar:Fields>
40
40
  </kar:request>`;
41
41
  const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetPatient', bodyXml);
42
42
  const patientBlock = (0, soap_client_js_1.extractTag)(xml, 'Patient');