Skip to main content
Glama
jamesrosing

tebra-mcp-server

by jamesrosing

Search Patients

tebra_search_patients
Read-only

Find patients in Tebra using flexible filters like name, date of birth, insurance company, or practice. Retrieve demographics, MRN, contact info, and insurance details.

Instructions

Search for patients in Tebra with flexible filters. Use query/fullName for name search, or combine specific filters like firstName, lastName, DOB range, insurance company, practice, etc. Returns demographics, MRN, contact info, and primary/secondary insurance. Note: MRN and external ID are not server-side filters — use tebra_get_patient for external ID lookup.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNoSearch by full name (backward-compatible alias for fullName)
fieldsNoOptional list of result fields to return (dotted paths for nested values, e.g. "cases.policies.companyName"). Omit for the default field set. Request only the fields you need — results contain protected health information.
genderNoFilter by gender (Tebra GenderCode: Male, Female, Unknown)
fullNameNoSearch by full name
isActiveNoFilter by active/inactive status
lastNameNoFilter by last name
firstNameNoFilter by first name
dateOfBirthNoExact date of birth (YYYY-MM-DD); sent as a single-day DOB range
practiceNameNoPractice name filter
toCreatedDateNoCreated date range end (YYYY-MM-DD)
toDateOfBirthNoDOB range end (YYYY-MM-DD)
fromCreatedDateNoCreated date range start (YYYY-MM-DD)
fromDateOfBirthNoDOB range start (YYYY-MM-DD)
toLastModifiedDateNoModified date range end (YYYY-MM-DD)
toLastEncounterDateNoLast-encounter date range end (YYYY-MM-DD)
fromLastModifiedDateNoModified date range start (YYYY-MM-DD)
insuranceCompanyNameNoPrimary insurance company name filter
fromLastEncounterDateNoLast-encounter date range start (YYYY-MM-DD)
referringProviderNameNoReferring provider full name filter

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv0.6.0
    • changedInput schema / properties / dateOfBirth / description
      Previous value: -"Exact date of birth (YYYY-MM-DD)"New value: +"Exact date of birth (YYYY-MM-DD); sent as a single-day DOB range"
    • removedInput schema / properties / externalId
      Removed value: -{
      -  "description": "External system ID",
      -  "type": "string"
      -}
    • addedInput schema / properties / fields
      Added value: +{
      +  "description": "Optional list of result fields to return (dotted paths for nested values, e.g. \"cases.policies.companyName\"). Omit for the default field set. Request only the fields you need — results contain protected health information.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / fromLastEncounterDate
      Added value: +{
      +  "description": "Last-encounter date range start (YYYY-MM-DD)",
      +  "type": "string"
      +}
    • changedInput schema / properties / gender / description
      Previous value: -"Filter by gender"New value: +"Filter by gender (Tebra GenderCode: Male, Female, Unknown)"
    • changedInput schema / properties / gender / enum
      Previous value: -[
      -  "Male",
      -  "Female",
      -  "Other",
      -  "Unknown"
      -]New value: +[
      +  "Male",
      +  "Female",
      +  "Unknown"
      +]
    • changedInput schema / properties / insuranceCompanyName / description
      Previous value: -"Insurance company name filter"New value: +"Primary insurance company name filter"
    • removedInput schema / properties / mrn
      Removed value: -{
      -  "description": "Medical Record Number",
      -  "type": "string"
      -}
    • changedInput schema / properties / referringProviderName / description
      Previous value: -"Referring provider name filter"New value: +"Referring provider full name filter"
    • addedInput schema / properties / toLastEncounterDate
      Added value: +{
      +  "description": "Last-encounter date range end (YYYY-MM-DD)",
      +  "type": "string"
      +}
  2. First observedv0.2.5

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with readOnlyHint=true and openWorldHint=true in annotations, the description adds useful behavioral context: it states the returned data categories (demographics, MRN, contact info, insurance) and explicitly warns that MRN and external ID are not server-side filters. This goes beyond the annotations and helps an agent avoid an invalid lookup path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose den, then filters, then return-value summary, then an important caveat. Every sentence earns its place, and the caveat is positioned last without burying the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter search tool with no output schema, the description covers the essential invocation facts: what can be filtered, what is returned, and the limitation around MRN/external ID. It omits details like pagination, default result limits, or sorting, which would be useful, but the core selection and invocation guidance is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all 19 parameters with descriptions, so the baseline is a 3. The description adds meaningful grouping semantics: query is a backward-compatible alias for fullName, filters can be combined, and MRN/external ID are not server-side filters. This is non-obvious context that genuinely helps parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: "Search for patients in Tebra with flexible filters." It goes beyond a generic search by enumerating the filter dimensions (name, firstName, lastName, DOB range, insurance, practice) and clarifying what the tool returns. It also implicitly separates itself from the sibling tebra_get_patient by excluding MRN/external ID server-side filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable guidance: use query/fullName for name searches, or combine specific filters for broader lookups. It explicitly names an alternative (tebra_get_patient) for external ID lookup)Skip saying when not to use this tool relative to tebra_get_all_patients or tebra_create_patient, but the search-vs-specific-lookup distinction is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.