MCP server for Tebra Web Services API 2.1 (SOAP) using CustomerKey, User, and Password for office administration workflows.
This skill provides an MCP server for the Tebra/Kareo SOAP API.
Add these secrets in Settings > Advanced:
TEBRA_SOAP_CUSTOMER_KEYTEBRA_SOAP_USERTEBRA_SOAP_PASSWORDOptional:
TEBRA_SOAP_ENDPOINT (default: https://webservice.kareo.com/services/soap/2.1/KareoServices.svc)TEBRA_SOAP_TIMEOUT_MS (default: 30000)TEBRA_SOAP_CLIENT_VERSION (default: Zo-Tebra-Soap-MCP/0.1.0)If you encounter permission errors after confirming your API user permissions, or you cannot locate the required permission settings in Tebra, submit a support ticket at https://helpme.tebra.com/Contact_Us/Customer_Care_Center.
Always use the skill's wrapper tools (tebra_soap_health_check, tebra_soap_get_appointments, etc.) rather than direct shell commands or manual API calls.
The Tebra SOAP secrets are only available within the skill's MCP server runtime. Direct shell commands (e.g., curl, custom scripts run via run_bash_command) will not have access to TEBRA_SOAP_CUSTOMER_KEY, TEBRA_SOAP_USER, or TEBRA_SOAP_PASSWORD environment variables.
For GetCustomerIdFromKey, use this payload shape:
GetCustomerIdFromKey -> request -> CustomerKey, Password, UserDo not use:
GetCustomerIdFromKeyReq with nested RequestHeaderUsing the wrong shape can return CustomerId = -1 even with valid credentials.
Get* operations in this API are safest with a request wrapper and explicit Fields + Filter blocks.GetAppointments (plural) returns minimal data (ID, start time) even when requesting additional fields; use GetAppointment (singular) with a specific nested structure for full patient/reason details.request -> Fields then Filter, in that order).Fields before Filter in the XML structure; reversing them can cause errors.ProcedureCode may return mixed values (numeric CPTs and non-CPT strings). Count only 5-digit numeric CPT values.ServiceStartDate).GetCharges do not always narrow results as expected. Date windows may return out-of-range rows. Always apply client-side filtering on returned date fields (e.g., ServiceStartDate, ServiceEndDate) to ensure accurate windows.GetPatient may return Patient: nil even for valid PatientIDs. This suggests permission scoping or data availability limitations in your tenant. For diagnosis/chart data enrichment, prefer GetCharges (which includes DiagnosisCode1-4 fields) or encounter-level data over GetPatient when available.EncounterID and does not accept broad patient/date filters. It cannot be used for "get all encounters for patient X this month" style queries — use it only when you already have a specific encounter ID from another operation (e.g., from GetCharges).cd /home/workspace/Skills/tebra-soap-mcp/scripts
npm install
npm run build
npm start
tebra_soap_list_operationstebra_soap_debug_authtebra_soap_health_checktebra_soap_call_operationtebra_soap_get_patienttebra_soap_get_appointmentstebra_soap_get_patientstebra_soap_get_chargestebra_soap_get_payments