Kaiser Permanente Capabilities

Naftiko 0.5 capability definitions for Kaiser Permanente - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves a payroll summary from ADP for a given pay period, including gross pay, deductions, and net pay.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary Lookup"
  description: "Retrieves a payroll summary from ADP for a given pay period, including gross pay, deductions, and net pay."
  tags:
    - hr
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Look up payroll summary from ADP for a given employee and pay period."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The ADP employee ID."
            - name: pay_period
              in: body
              type: string
              description: "The pay period identifier (e.g., 2025-PP24)."
          call: "adp.get-payroll"
          with:
            employee_id: "{{employee_id}}"
            pay_period: "{{pay_period}}"
          outputParameters:
            - name: gross_pay
              type: string
              mapping: "$.payStatement.grossPayAmount"
            - name: deductions
              type: string
              mapping: "$.payStatement.totalDeductions"
            - name: net_pay
              type: string
              mapping: "$.payStatement.netPayAmount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: pay-statements
          path: "/workers/{{employee_id}}/pay-statements?payPeriod={{pay_period}}"
          inputParameters:
            - name: employee_id
              in: path
            - name: pay_period
              in: query
          operations:
            - name: get-payroll
              method: GET

Processes adverse drug event reports by documenting in the EHR, filing a safety report in ServiceNow, and notifying the pharmacy team via Teams.

naftiko: "0.5"
info:
  label: "Adverse Drug Event Reporting Pipeline"
  description: "Processes adverse drug event reports by documenting in the EHR, filing a safety report in ServiceNow, and notifying the pharmacy team via Teams."
  tags:
    - patient-safety
    - pharmacovigilance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ade-reporting
      port: 8080
      tools:
        - name: report-adverse-drug-event
          description: "Report and process an adverse drug event across safety systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: drug_name
              in: body
              type: string
              description: "The drug that caused the adverse event."
            - name: event_description
              in: body
              type: string
              description: "Description of the adverse event."
            - name: severity
              in: body
              type: string
              description: "Event severity (mild, moderate, severe)."
          steps:
            - name: document-in-ehr
              type: call
              call: "epic.create-allergy-intolerance"
              with:
                patient_id: "{{patient_id}}"
                substance: "{{drug_name}}"
                reaction: "{{event_description}}"
                severity: "{{severity}}"
            - name: create-safety-report
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "ADE Report: {{drug_name}} - {{severity}}"
                category: "drug_safety"
                description: "Patient {{patient_id}}: {{event_description}}. Drug: {{drug_name}}. Severity: {{severity}}."
            - name: notify-pharmacy
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "pharmacy-safety@kaiserpermanente.org"
                text: "ADE ALERT: {{drug_name}} ({{severity}}). Patient {{patient_id}}. {{event_description}}. Incident: {{create-safety-report.number}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: allergies
          path: "/AllergyIntolerance"
          operations:
            - name: create-allergy-intolerance
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Identifies members overdue for annual wellness visits via Databricks, creates outreach campaigns in HubSpot, and tracks completion in Salesforce.

naftiko: "0.5"
info:
  label: "Annual Wellness Visit Outreach Pipeline"
  description: "Identifies members overdue for annual wellness visits via Databricks, creates outreach campaigns in HubSpot, and tracks completion in Salesforce."
  tags:
    - population-health
    - wellness
    - azure-databricks
    - hubspot
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: wellness-outreach
      port: 8080
      tools:
        - name: launch-wellness-outreach
          description: "Launch annual wellness visit outreach campaign for overdue members."
          inputParameters:
            - name: region_code
              in: body
              type: string
              description: "The Kaiser region code."
            - name: campaign_name
              in: body
              type: string
              description: "The outreach campaign name."
          steps:
            - name: identify-overdue
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM member_wellness WHERE region = '{{region_code}}' AND last_awv_date < DATE_SUB(CURRENT_DATE, 365)"
            - name: create-campaign
              type: call
              call: "hubspot.create-campaign"
              with:
                name: "{{campaign_name}}"
                type: "wellness_outreach"
                member_count: "{{identify-overdue.count}}"
            - name: update-member-records
              type: call
              call: "salesforce.bulk-update"
              with:
                object: "HealthPlanMember__c"
                records: "{{identify-overdue.member_ids}}"
                field: "AWV_Outreach_Date__c"
                value: "today"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/marketing/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: bulk
          path: "/composite/sobjects"
          operations:
            - name: bulk-update
              method: PATCH

Queries Azure Active Directory for provider group memberships and access assignments within clinical systems.

naftiko: "0.5"
info:
  label: "Azure AD Provider Group Lookup"
  description: "Queries Azure Active Directory for provider group memberships and access assignments within clinical systems."
  tags:
    - identity
    - azure-ad
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-provider-groups
          description: "Look up Azure AD group memberships for a provider by UPN."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "The user principal name."
          call: "azuread.get-member-groups"
          with:
            upn: "{{user_upn}}"
          outputParameters:
            - name: groups
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}/memberOf"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-member-groups
              method: GET

Retrieves the latest build status from Azure DevOps for a given pipeline, including build result, duration, and source branch.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status from Azure DevOps for a given pipeline, including build result, duration, and source branch."
  tags:
    - devops
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: ci-cd
      port: 8080
      tools:
        - name: get-build-status
          description: "Get the latest build status from Azure DevOps for a pipeline."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline ID."
          call: "azuredevops.get-latest-build"
          with:
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: source_branch
              type: string
              mapping: "$.value[0].sourceBranch"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/kaiserpermanente"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: builds
          path: "/_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: pipeline_id
              in: query
          operations:
            - name: get-latest-build
              method: GET

Retrieves patient screening questionnaire results from Salesforce, scores them using Azure Machine Learning, and creates a care plan in ServiceNow if the score indicates risk.

naftiko: "0.5"
info:
  label: "Behavioral Health Screening Pipeline"
  description: "Retrieves patient screening questionnaire results from Salesforce, scores them using Azure Machine Learning, and creates a care plan in ServiceNow if the score indicates risk."
  tags:
    - behavioral-health
    - screening
    - salesforce
    - azure-machine-learning
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: behavioral-health
      port: 8080
      tools:
        - name: process-screening
          description: "Given a patient screening ID, score the questionnaire and create a care plan if needed."
          inputParameters:
            - name: screening_id
              in: body
              type: string
              description: "The Salesforce screening record ID."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
          steps:
            - name: get-screening
              type: call
              call: "salesforce.get-screening"
              with:
                screening_id: "{{screening_id}}"
            - name: score-screening
              type: call
              call: "azureml.score"
              with:
                model: "phq9-risk-model"
                input_data: "{{get-screening.responses}}"
            - name: create-care-plan
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Behavioral health follow-up: {{patient_id}}"
                category: "behavioral_health"
                priority: "{{score-screening.risk_level}}"
                description: "PHQ-9 score: {{score-screening.score}}. Risk level: {{score-screening.risk_level}}. Patient: {{patient_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: screenings
          path: "/sobjects/Screening__c/{{screening_id}}"
          inputParameters:
            - name: screening_id
              in: path
          operations:
            - name: get-screening
              method: GET
    - type: http
      namespace: azureml
      baseUri: "https://kp-ml.eastus.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST

Archives a clinical document to Box by uploading it to the appropriate compliance folder.

naftiko: "0.5"
info:
  label: "Box Clinical Document Archive"
  description: "Archives a clinical document to Box by uploading it to the appropriate compliance folder."
  tags:
    - compliance
    - document-management
    - box
capability:
  exposes:
    - type: mcp
      namespace: document-archive
      port: 8080
      tools:
        - name: archive-document
          description: "Upload a clinical document to the Box compliance archive."
          inputParameters:
            - name: file_name
              in: body
              type: string
              description: "The document file name."
            - name: folder_id
              in: body
              type: string
              description: "The Box target folder ID."
            - name: content
              in: body
              type: string
              description: "The document content or file reference."
          call: "box.upload-file"
          with:
            folder_id: "{{folder_id}}"
            file_name: "{{file_name}}"
            content: "{{content}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Identifies care gaps from Azure Databricks analytics, creates follow-up tasks in Salesforce for care managers, and sends reminder notifications via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Care Gap Alert Pipeline"
  description: "Identifies care gaps from Azure Databricks analytics, creates follow-up tasks in Salesforce for care managers, and sends reminder notifications via Microsoft Teams."
  tags:
    - population-health
    - care-gaps
    - azure-databricks
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: care-gaps
      port: 8080
      tools:
        - name: process-care-gaps
          description: "Given a patient cohort, identify care gaps, create follow-up tasks, and notify care managers."
          inputParameters:
            - name: cohort_id
              in: body
              type: string
              description: "The patient cohort identifier."
            - name: care_manager_email
              in: body
              type: string
              description: "The care manager email for notifications."
          steps:
            - name: get-gaps
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM care_gaps WHERE cohort_id = '{{cohort_id}}' AND status = 'open'"
            - name: create-tasks
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Care gap follow-up for cohort {{cohort_id}}"
                description: "{{get-gaps.summary}}"
                assigned_to: "{{care_manager_email}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{care_manager_email}}"
                text: "Care gap alert: {{get-gaps.gap_count}} open gaps identified for cohort {{cohort_id}}. Task created: {{create-tasks.task_id}}."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Reviews chronic disease care plans by querying patient metrics from Databricks, updating care plan status in Salesforce, and generating review summaries in Confluence.

naftiko: "0.5"
info:
  label: "Chronic Care Plan Review Pipeline"
  description: "Reviews chronic disease care plans by querying patient metrics from Databricks, updating care plan status in Salesforce, and generating review summaries in Confluence."
  tags:
    - chronic-care
    - care-plans
    - azure-databricks
    - salesforce
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: chronic-care
      port: 8080
      tools:
        - name: review-care-plan
          description: "Review and update a chronic care plan based on latest patient metrics."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: care_plan_id
              in: body
              type: string
              description: "The care plan identifier."
          steps:
            - name: get-metrics
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM patient_health_metrics WHERE patient_id = '{{patient_id}}' ORDER BY date DESC LIMIT 10"
            - name: update-care-plan
              type: call
              call: "salesforce.update-care-plan"
              with:
                care_plan_id: "{{care_plan_id}}"
                latest_a1c: "{{get-metrics.latest_a1c}}"
                latest_bp: "{{get-metrics.latest_bp}}"
                status: "reviewed"
            - name: create-review-summary
              type: call
              call: "confluence.create-page"
              with:
                space_key: "CARE"
                title: "Care Plan Review - {{patient_id}} - {{care_plan_id}}"
                content: "Latest metrics: A1C {{get-metrics.latest_a1c}}, BP {{get-metrics.latest_bp}}. Care plan updated: {{update-care-plan.status}}."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: care-plans
          path: "/sobjects/CarePlan__c/{{care_plan_id}}"
          inputParameters:
            - name: care_plan_id
              in: path
          operations:
            - name: update-care-plan
              method: PATCH
    - type: http
      namespace: confluence
      baseUri: "https://kaiserpermanente.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Identifies patients with chronic conditions due for outreach from Azure Databricks, creates outreach campaigns in Salesforce, sends SMS reminders via WhatsApp, and logs activity in ServiceNow.

naftiko: "0.5"
info:
  label: "Chronic Disease Management Outreach"
  description: "Identifies patients with chronic conditions due for outreach from Azure Databricks, creates outreach campaigns in Salesforce, sends SMS reminders via WhatsApp, and logs activity in ServiceNow."
  tags:
    - population-health
    - chronic-disease
    - azure-databricks
    - salesforce
    - whatsapp
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: chronic-disease
      port: 8080
      tools:
        - name: trigger-outreach
          description: "Given a condition code, identify patients due for outreach and execute a multi-channel campaign."
          inputParameters:
            - name: condition_code
              in: body
              type: string
              description: "The ICD-10 condition code for the target population."
            - name: campaign_name
              in: body
              type: string
              description: "The outreach campaign name."
          steps:
            - name: identify-patients
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM chronic_patients WHERE condition_code = '{{condition_code}}' AND last_outreach_date < DATEADD(month, -6, CURRENT_DATE)"
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "{{campaign_name}}"
                condition: "{{condition_code}}"
                patient_count: "{{identify-patients.row_count}}"
            - name: send-reminders
              type: call
              call: "whatsapp.send-template"
              with:
                template: "chronic_care_reminder"
                recipients: "{{identify-patients.phone_numbers}}"
            - name: log-activity
              type: call
              call: "servicenow.create-record"
              with:
                table: "outreach_log"
                campaign_id: "{{create-campaign.campaign_id}}"
                patients_contacted: "{{identify-patients.row_count}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-template
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

When a claim is submitted, validates member eligibility in SAP, applies clinical edits from Oracle Cloud, adjudicates in SAP, and notifies the billing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Claims Adjudication Pipeline"
  description: "When a claim is submitted, validates member eligibility in SAP, applies clinical edits from Oracle Cloud, adjudicates in SAP, and notifies the billing team via Microsoft Teams."
  tags:
    - claims
    - adjudication
    - sap
    - oracle-cloud
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: claims-adjudication
      port: 8080
      tools:
        - name: adjudicate-claim
          description: "Given a claim submission, run eligibility, clinical edits, and adjudication, then notify billing."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: member_id
              in: body
              type: string
              description: "The member ID."
            - name: service_date
              in: body
              type: string
              description: "The date of service."
            - name: procedure_codes
              in: body
              type: string
              description: "Comma-separated CPT procedure codes."
          steps:
            - name: check-eligibility
              type: call
              call: "sap.check-eligibility"
              with:
                member_id: "{{member_id}}"
                date: "{{service_date}}"
            - name: apply-edits
              type: call
              call: "oracle.run-clinical-edits"
              with:
                claim_id: "{{claim_id}}"
                procedure_codes: "{{procedure_codes}}"
            - name: process-adjudication
              type: call
              call: "sap.adjudicate-claim"
              with:
                claim_id: "{{claim_id}}"
                eligibility_status: "{{check-eligibility.IsEligible}}"
                edit_results: "{{apply-edits.results}}"
            - name: notify-billing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "claims-billing"
                text: "Claim {{claim_id}} adjudicated. Status: {{process-adjudication.status}}. Amount: {{process-adjudication.paid_amount}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-claims.sap.com/sap/opu/odata/sap/CLAIMS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: eligibility
          path: "/Eligibility(MemberId='{{member_id}}',Date='{{date}}')"
          inputParameters:
            - name: member_id
              in: path
            - name: date
              in: path
          operations:
            - name: check-eligibility
              method: GET
        - name: adjudication
          path: "/Claims('{{claim_id}}')/Adjudicate"
          inputParameters:
            - name: claim_id
              in: path
          operations:
            - name: adjudicate-claim
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: clinical-edits
          path: "/clinicalEdits"
          operations:
            - name: run-clinical-edits
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current status of a health insurance claim from SAP, including adjudication state, paid amount, and denial reason if applicable.

naftiko: "0.5"
info:
  label: "Claims Status Lookup"
  description: "Retrieves the current status of a health insurance claim from SAP, including adjudication state, paid amount, and denial reason if applicable."
  tags:
    - claims
    - finance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: claims-management
      port: 8080
      tools:
        - name: get-claim-status
          description: "Look up a health insurance claim by claim number. Returns adjudication status, paid amount, and denial reason."
          inputParameters:
            - name: claim_number
              in: body
              type: string
              description: "The claim identifier."
          call: "sap.get-claim"
          with:
            claim_number: "{{claim_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.AdjudicationStatus"
            - name: paid_amount
              type: string
              mapping: "$.d.PaidAmount"
            - name: denial_reason
              type: string
              mapping: "$.d.DenialReason"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-claims.sap.com/sap/opu/odata/sap/CLAIMS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: claims
          path: "/Claims('{{claim_number}}')"
          inputParameters:
            - name: claim_number
              in: path
          operations:
            - name: get-claim
              method: GET

Reviews clinical documentation for completeness by querying encounter data from Databricks, identifying documentation gaps, creating CDI queries in Salesforce, and notifying providers via Teams.

naftiko: "0.5"
info:
  label: "Clinical Documentation Integrity Pipeline"
  description: "Reviews clinical documentation for completeness by querying encounter data from Databricks, identifying documentation gaps, creating CDI queries in Salesforce, and notifying providers via Teams."
  tags:
    - documentation
    - cdi
    - azure-databricks
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cdi
      port: 8080
      tools:
        - name: review-clinical-documentation
          description: "Review clinical documentation integrity and create CDI queries."
          inputParameters:
            - name: encounter_id
              in: body
              type: string
              description: "The clinical encounter ID."
            - name: provider_email
              in: body
              type: string
              description: "The attending provider email."
          steps:
            - name: get-encounter-docs
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM encounter_documentation WHERE encounter_id = '{{encounter_id}}'"
            - name: create-cdi-query
              type: call
              call: "salesforce.create-cdi-query"
              with:
                encounter_id: "{{encounter_id}}"
                gaps: "{{get-encounter-docs.documentation_gaps}}"
                severity: "{{get-encounter-docs.gap_severity}}"
            - name: notify-provider
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{provider_email}}"
                text: "CDI query for encounter {{encounter_id}}: {{get-encounter-docs.gap_count}} documentation gaps identified. Please review query {{create-cdi-query.query_id}} in Salesforce."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cdi-queries
          path: "/sobjects/CDI_Query__c"
          operations:
            - name: create-cdi-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Fetches a patient's most recent lab results from Oracle Cloud, including test name, value, reference range, and collection date.

naftiko: "0.5"
info:
  label: "Clinical Lab Results Retrieval"
  description: "Fetches a patient's most recent lab results from Oracle Cloud, including test name, value, reference range, and collection date."
  tags:
    - clinical
    - lab-results
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: clinical-data
      port: 8080
      tools:
        - name: get-lab-results
          description: "Retrieve the most recent lab results for a patient by medical record number."
          inputParameters:
            - name: mrn
              in: body
              type: string
              description: "The patient medical record number."
          call: "oracle.get-lab-results"
          with:
            mrn: "{{mrn}}"
          outputParameters:
            - name: test_name
              type: string
              mapping: "$.items[0].TestName"
            - name: value
              type: string
              mapping: "$.items[0].ResultValue"
            - name: reference_range
              type: string
              mapping: "$.items[0].ReferenceRange"
            - name: collection_date
              type: string
              mapping: "$.items[0].CollectionDate"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: lab-results
          path: "/labResults?q=MRN={{mrn}}&orderBy=CollectionDate:desc&limit=10"
          inputParameters:
            - name: mrn
              in: query
          operations:
            - name: get-lab-results
              method: GET

Monitors clinical pathway adherence by querying treatment data from Databricks, comparing against protocols in Confluence, and generating variance reports in Power BI.

naftiko: "0.5"
info:
  label: "Clinical Pathway Adherence Monitor"
  description: "Monitors clinical pathway adherence by querying treatment data from Databricks, comparing against protocols in Confluence, and generating variance reports in Power BI."
  tags:
    - clinical-quality
    - pathways
    - azure-databricks
    - confluence
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: pathway-adherence
      port: 8080
      tools:
        - name: monitor-pathway-adherence
          description: "Monitor adherence to clinical pathways and generate variance reports."
          inputParameters:
            - name: pathway_id
              in: body
              type: string
              description: "The clinical pathway identifier."
            - name: department_code
              in: body
              type: string
              description: "The department code."
          steps:
            - name: get-treatment-data
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM treatment_adherence WHERE pathway_id = '{{pathway_id}}' AND department = '{{department_code}}'"
            - name: get-protocol
              type: call
              call: "confluence.get-page"
              with:
                space_key: "CLINICAL"
                title: "Protocol-{{pathway_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "pathway-adherence-{{department_code}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://kaiserpermanente.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: get-page
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Identifies eligible patients from Databricks analytics, creates enrollment records in the clinical trials management system, generates consent documents in SharePoint, and notifies the research coordinator.

naftiko: "0.5"
info:
  label: "Clinical Research Enrollment Pipeline"
  description: "Identifies eligible patients from Databricks analytics, creates enrollment records in the clinical trials management system, generates consent documents in SharePoint, and notifies the research coordinator."
  tags:
    - research
    - clinical-trials
    - azure-databricks
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: research-enrollment
      port: 8080
      tools:
        - name: enroll-patient-in-trial
          description: "Enroll an eligible patient in a clinical trial across multiple systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: trial_id
              in: body
              type: string
              description: "The clinical trial identifier."
            - name: coordinator_email
              in: body
              type: string
              description: "Research coordinator email."
          steps:
            - name: verify-eligibility
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM trial_eligibility WHERE patient_id = '{{patient_id}}' AND trial_id = '{{trial_id}}'"
            - name: create-enrollment
              type: call
              call: "ctms.create-enrollment"
              with:
                patient_id: "{{patient_id}}"
                trial_id: "{{trial_id}}"
                eligibility_status: "{{verify-eligibility.status}}"
            - name: generate-consent
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "clinical-research"
                folder_path: "Consents/{{trial_id}}/{{patient_id}}"
                template: "informed_consent"
            - name: notify-coordinator
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{coordinator_email}}"
                text: "New enrollment: Patient {{patient_id}} enrolled in trial {{trial_id}}. Enrollment ID: {{create-enrollment.enrollment_id}}. Consent document: {{generate-consent.url}}."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: ctms
      baseUri: "https://kp-ctms.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ctms_token"
      resources:
        - name: enrollments
          path: "/enrollments"
          operations:
            - name: create-enrollment
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Tracks clinical staff competency certifications by pulling records from Workday, identifying expiring credentials, creating renewal tasks in Jira, and notifying managers via Teams.

naftiko: "0.5"
info:
  label: "Clinical Staff Competency Tracker Pipeline"
  description: "Tracks clinical staff competency certifications by pulling records from Workday, identifying expiring credentials, creating renewal tasks in Jira, and notifying managers via Teams."
  tags:
    - credentialing
    - competency
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: staff-competency
      port: 8080
      tools:
        - name: check-competency-status
          description: "Check staff competency certifications and flag expirations."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "The department code."
            - name: manager_email
              in: body
              type: string
              description: "Department manager email."
          steps:
            - name: get-certifications
              type: call
              call: "workday.get-certifications"
              with:
                department_code: "{{department_code}}"
            - name: create-renewal-tasks
              type: call
              call: "jira.create-issues-bulk"
              with:
                project: "CRED"
                issues: "{{get-certifications.expiring_certifications}}"
                issue_type: "Task"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Competency alert for {{department_code}}: {{get-certifications.expiring_count}} certifications expiring within 90 days. {{create-renewal-tasks.created_count}} renewal tasks created in Jira."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/workers/certifications"
          operations:
            - name: get-certifications
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://kaiserpermanente.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/bulk"
          operations:
            - name: create-issues-bulk
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries Azure Databricks for eligible patients matching clinical trial criteria, creates candidate records in Salesforce, and notifies the research coordinator via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Clinical Trial Patient Matching"
  description: "Queries Azure Databricks for eligible patients matching clinical trial criteria, creates candidate records in Salesforce, and notifies the research coordinator via Microsoft Teams."
  tags:
    - research
    - clinical-trials
    - azure-databricks
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-research
      port: 8080
      tools:
        - name: match-trial-patients
          description: "Given trial criteria, identify eligible patients and create candidate records."
          inputParameters:
            - name: trial_id
              in: body
              type: string
              description: "The clinical trial identifier."
            - name: inclusion_criteria
              in: body
              type: string
              description: "SQL-compatible inclusion criteria for patient matching."
            - name: coordinator_email
              in: body
              type: string
              description: "The research coordinator email."
          steps:
            - name: find-candidates
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM patient_cohort WHERE {{inclusion_criteria}} LIMIT 100"
            - name: create-candidates
              type: call
              call: "salesforce.create-trial-candidates"
              with:
                trial_id: "{{trial_id}}"
                candidates: "{{find-candidates.results}}"
            - name: notify-coordinator
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{coordinator_email}}"
                text: "Clinical trial {{trial_id}}: {{find-candidates.row_count}} eligible patients identified. Candidate records created in Salesforce."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: trial-candidates
          path: "/sobjects/TrialCandidate__c"
          operations:
            - name: create-trial-candidates
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Generates community benefit reports by pulling program data from Salesforce, calculating impact metrics in Databricks, creating report documents in SharePoint, and distributing via MailChimp.

naftiko: "0.5"
info:
  label: "Community Benefit Program Reporting Pipeline"
  description: "Generates community benefit reports by pulling program data from Salesforce, calculating impact metrics in Databricks, creating report documents in SharePoint, and distributing via MailChimp."
  tags:
    - community-health
    - reporting
    - salesforce
    - azure-databricks
    - sharepoint
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: community-benefit
      port: 8080
      tools:
        - name: generate-community-benefit-report
          description: "Generate and distribute community benefit program reports."
          inputParameters:
            - name: program_id
              in: body
              type: string
              description: "The community benefit program ID."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period (e.g., Q1-2026)."
          steps:
            - name: get-program-data
              type: call
              call: "salesforce.get-program-metrics"
              with:
                program_id: "{{program_id}}"
                period: "{{reporting_period}}"
            - name: calculate-impact
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM community_impact WHERE program_id = '{{program_id}}' AND period = '{{reporting_period}}'"
            - name: create-report
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "community-health"
                folder_path: "Reports/{{program_id}}/{{reporting_period}}"
                template: "community_benefit_report"
            - name: distribute-report
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "community-stakeholders"
                template: "community_benefit_summary"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: programs
          path: "/sobjects/CommunityBenefitProgram__c/{{program_id}}"
          inputParameters:
            - name: program_id
              in: path
          operations:
            - name: get-program-metrics
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

Checks employee training completion status in Pluralsight, flags overdue trainings in ServiceNow, and notifies managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Compliance Training Tracker Pipeline"
  description: "Checks employee training completion status in Pluralsight, flags overdue trainings in ServiceNow, and notifies managers via Microsoft Teams."
  tags:
    - compliance
    - training
    - pluralsight
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: check-training-compliance
          description: "Given a department, check training completion, flag overdue employees, and notify managers."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to check training compliance for."
            - name: training_course
              in: body
              type: string
              description: "The required training course name."
            - name: manager_email
              in: body
              type: string
              description: "The department manager email."
          steps:
            - name: check-completion
              type: call
              call: "pluralsight.get-team-progress"
              with:
                team: "{{department}}"
                course: "{{training_course}}"
            - name: flag-overdue
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Overdue training: {{training_course}} in {{department}}"
                category: "compliance"
                description: "{{check-completion.overdue_count}} employees overdue for {{training_course}} in {{department}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Training compliance alert for {{department}}: {{check-completion.overdue_count}} employees overdue for {{training_course}}. ServiceNow ticket: {{flag-overdue.number}}."
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: team-progress
          path: "/teams/{{team}}/courses/{{course}}/progress"
          inputParameters:
            - name: team
              in: path
            - name: course
              in: path
          operations:
            - name: get-team-progress
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Searches Confluence for clinical protocols and guidelines by keyword, returning page titles, URLs, and last updated dates.

naftiko: "0.5"
info:
  label: "Confluence Clinical Protocol Search"
  description: "Searches Confluence for clinical protocols and guidelines by keyword, returning page titles, URLs, and last updated dates."
  tags:
    - clinical
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: clinical-knowledge
      port: 8080
      tools:
        - name: search-protocols
          description: "Search Confluence for clinical protocols matching a keyword."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword for clinical protocols."
          call: "confluence.search"
          with:
            cql: "type=page AND space=CLINICAL AND text~'{{keyword}}'"
          outputParameters:
            - name: results
              type: string
              mapping: "$.results"
            - name: total_size
              type: string
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://kaiserpermanente.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql={{cql}}"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search
              method: GET

Identifies diabetic patients with poor glycemic control from Databricks, enrolls them in education programs via Salesforce, and sends personalized tips via MailChimp.

naftiko: "0.5"
info:
  label: "Diabetes Management Outreach Pipeline"
  description: "Identifies diabetic patients with poor glycemic control from Databricks, enrolls them in education programs via Salesforce, and sends personalized tips via MailChimp."
  tags:
    - diabetes
    - chronic-disease
    - azure-databricks
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: diabetes-outreach
      port: 8080
      tools:
        - name: launch-diabetes-outreach
          description: "Launch targeted outreach for diabetic patients with elevated A1C."
          inputParameters:
            - name: a1c_threshold
              in: body
              type: number
              description: "A1C threshold for intervention (e.g., 9.0)."
            - name: region_code
              in: body
              type: string
              description: "The Kaiser region code."
          steps:
            - name: identify-patients
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM diabetic_patients WHERE latest_a1c >= {{a1c_threshold}} AND region = '{{region_code}}'"
            - name: enroll-in-program
              type: call
              call: "salesforce.bulk-create"
              with:
                object: "ProgramEnrollment__c"
                records: "{{identify-patients.patient_ids}}"
                program: "diabetes_self_management"
            - name: send-education-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "diabetes-management"
                segment: "{{identify-patients.email_list}}"
                template: "diabetes_tips"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: bulk
          path: "/composite/sobjects"
          operations:
            - name: bulk-create
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

Upon patient discharge, creates a follow-up appointment in Salesforce, generates a care plan document in SharePoint, assigns a case manager in ServiceNow, and sends discharge instructions via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Discharge Planning Orchestrator"
  description: "Upon patient discharge, creates a follow-up appointment in Salesforce, generates a care plan document in SharePoint, assigns a case manager in ServiceNow, and sends discharge instructions via Microsoft Teams."
  tags:
    - patient-care
    - discharge
    - salesforce
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: discharge-planning
      port: 8080
      tools:
        - name: process-discharge
          description: "Given a patient ID and discharge details, orchestrate post-discharge care across multiple systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: discharge_date
              in: body
              type: string
              description: "The discharge date in YYYY-MM-DD format."
            - name: diagnosis
              in: body
              type: string
              description: "The primary discharge diagnosis."
            - name: patient_email
              in: body
              type: string
              description: "The patient email for notifications."
          steps:
            - name: create-followup
              type: call
              call: "salesforce.create-appointment"
              with:
                patient_id: "{{patient_id}}"
                type: "post-discharge-followup"
                diagnosis: "{{diagnosis}}"
            - name: create-care-plan
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "care-plans"
                folder_path: "DischargeCarePlans/{{patient_id}}_{{discharge_date}}"
                diagnosis: "{{diagnosis}}"
            - name: assign-case-manager
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Post-discharge care: {{patient_id}}"
                category: "care_management"
                description: "Post-discharge care coordination for patient {{patient_id}}, diagnosis: {{diagnosis}}, discharged {{discharge_date}}."
            - name: send-instructions
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{patient_email}}"
                text: "Discharge summary for {{patient_id}}: Follow-up appointment scheduled ({{create-followup.confirmation_number}}). Care plan: {{create-care-plan.url}}. Case manager assigned: {{assign-case-manager.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: appointments
          path: "/sobjects/Appointment__c"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves application performance metrics from Dynatrace for a given service, including response time, error rate, and throughput.

naftiko: "0.5"
info:
  label: "Dynatrace Application Health Check"
  description: "Retrieves application performance metrics from Dynatrace for a given service, including response time, error rate, and throughput."
  tags:
    - monitoring
    - dynatrace
capability:
  exposes:
    - type: mcp
      namespace: app-monitoring
      port: 8080
      tools:
        - name: get-app-health
          description: "Retrieve application health metrics from Dynatrace for a given service."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Dynatrace service name."
          call: "dynatrace.get-service-metrics"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.result[0].data[0].values[0]"
            - name: error_rate
              type: string
              mapping: "$.result[1].data[0].values[0]"
            - name: throughput
              type: string
              mapping: "$.result[2].data[0].values[0]"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://kp.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate,builtin:service.requestCount.total&entitySelector=type(SERVICE),entityName({{service_name}})"
          inputParameters:
            - name: service_name
              in: query
          operations:
            - name: get-service-metrics
              method: GET

Monitors ED census from the real-time dashboard, triggers surge protocols in ServiceNow, reassigns staff in the scheduling system, and alerts leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Emergency Department Surge Orchestrator"
  description: "Monitors ED census from the real-time dashboard, triggers surge protocols in ServiceNow, reassigns staff in the scheduling system, and alerts leadership via Microsoft Teams."
  tags:
    - emergency
    - surge
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ed-surge
      port: 8080
      tools:
        - name: activate-surge-protocol
          description: "Activate ED surge protocol based on census thresholds."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility code."
            - name: surge_level
              in: body
              type: string
              description: "The surge level (1-3)."
            - name: leadership_email
              in: body
              type: string
              description: "Leadership group email."
          steps:
            - name: get-census
              type: call
              call: "dashboard.get-ed-census"
              with:
                facility_code: "{{facility_code}}"
            - name: create-surge-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "ED Surge Level {{surge_level}} - {{facility_code}}"
                urgency: "1"
                description: "ED census: {{get-census.current_count}}/{{get-census.capacity}}. Surge level {{surge_level}} activated."
            - name: reassign-staff
              type: call
              call: "scheduling.activate-surge-staff"
              with:
                facility_code: "{{facility_code}}"
                surge_level: "{{surge_level}}"
            - name: notify-leadership
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{leadership_email}}"
                text: "ED SURGE ALERT: Level {{surge_level}} at {{facility_code}}. Census: {{get-census.current_count}}/{{get-census.capacity}}. Incident: {{create-surge-incident.number}}. Additional staff deployed: {{reassign-staff.staff_count}}."
  consumes:
    - type: http
      namespace: dashboard
      baseUri: "https://kp-rtdashboard.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dashboard_token"
      resources:
        - name: census
          path: "/ed/census/{{facility_code}}"
          inputParameters:
            - name: facility_code
              in: path
          operations:
            - name: get-ed-census
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: surge
          path: "/surge/activate"
          operations:
            - name: activate-surge-staff
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for credentials, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for credentials, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Kaiser Permanente, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates room cleaning workflows upon patient discharge by triggering cleaning tasks in ServiceNow, notifying EVS staff via Teams, and updating bed availability in the bed management system.

naftiko: "0.5"
info:
  label: "Environmental Services Cleaning Orchestrator"
  description: "Orchestrates room cleaning workflows upon patient discharge by triggering cleaning tasks in ServiceNow, notifying EVS staff via Teams, and updating bed availability in the bed management system."
  tags:
    - environmental-services
    - bed-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: evs-cleaning
      port: 8080
      tools:
        - name: trigger-room-cleaning
          description: "Trigger room cleaning workflow after patient discharge."
          inputParameters:
            - name: room_number
              in: body
              type: string
              description: "The room number to be cleaned."
            - name: facility_code
              in: body
              type: string
              description: "The facility code."
            - name: cleaning_type
              in: body
              type: string
              description: "Type of cleaning (standard, terminal, isolation)."
          steps:
            - name: create-cleaning-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Room cleaning: {{room_number}} - {{cleaning_type}}"
                assignment_group: "EVS-{{facility_code}}"
                priority: "2"
            - name: notify-evs
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "evs-{{facility_code}}@kaiserpermanente.org"
                text: "Cleaning required: Room {{room_number}}, type: {{cleaning_type}}. Task: {{create-cleaning-task.number}}."
            - name: update-bed-status
              type: call
              call: "bedmgmt.update-bed"
              with:
                room_number: "{{room_number}}"
                facility_code: "{{facility_code}}"
                status: "cleaning_in_progress"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: bedmgmt
      baseUri: "https://kp-bedmgmt.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bedmgmt_token"
      resources:
        - name: beds
          path: "/beds/{{room_number}}"
          inputParameters:
            - name: room_number
              in: path
          operations:
            - name: update-bed
              method: PUT

Retrieves a patient's chart summary from the Epic EHR system, including demographics, active problems, and current medications.

naftiko: "0.5"
info:
  label: "Epic Patient Chart Lookup"
  description: "Retrieves a patient's chart summary from the Epic EHR system, including demographics, active problems, and current medications."
  tags:
    - patient-care
    - epic
capability:
  exposes:
    - type: mcp
      namespace: patient-charts
      port: 8080
      tools:
        - name: get-patient-chart
          description: "Look up a patient chart by MRN. Returns demographics, active problems, and medication list."
          inputParameters:
            - name: mrn
              in: body
              type: string
              description: "The patient medical record number."
          call: "epic.get-patient"
          with:
            mrn: "{{mrn}}"
          outputParameters:
            - name: demographics
              type: object
              mapping: "$.entry[0].resource"
            - name: problems
              type: array
              mapping: "$.entry[0].resource.condition"
            - name: medications
              type: array
              mapping: "$.entry[0].resource.medicationRequest"
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: patients
          path: "/Patient/{{mrn}}"
          inputParameters:
            - name: mrn
              in: path
          operations:
            - name: get-patient
              method: GET

When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP.

naftiko: "0.5"
info:
  label: "Facility Maintenance Request Pipeline"
  description: "When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP."
  tags:
    - facilities
    - servicenow
    - microsoft-teams
    - sap
capability:
  exposes:
    - type: mcp
      namespace: facilities
      port: 8080
      tools:
        - name: submit-maintenance-request
          description: "Given facility details, create a work order, notify the team, and update the asset record."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility location code."
            - name: issue_description
              in: body
              type: string
              description: "Description of the maintenance issue."
            - name: priority
              in: body
              type: string
              description: "Priority level (critical, high, medium, low)."
            - name: asset_id
              in: body
              type: string
              description: "The SAP asset identifier if applicable."
          steps:
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Maintenance: {{facility_code}} - {{issue_description}}"
                priority: "{{priority}}"
                location: "{{facility_code}}"
            - name: notify-facilities
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "facilities-ops"
                text: "New maintenance request at {{facility_code}}: {{issue_description}}. Priority: {{priority}}. Work order: {{create-work-order.number}}."
            - name: update-asset
              type: call
              call: "sap.update-asset"
              with:
                asset_id: "{{asset_id}}"
                maintenance_ticket: "{{create-work-order.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://kp-facilities.sap.com/sap/opu/odata/sap/ASSET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: assets
          path: "/Assets('{{asset_id}}')"
          inputParameters:
            - name: asset_id
              in: path
          operations:
            - name: update-asset
              method: PATCH

Assesses fall risk for inpatients by scoring risk factors from the EHR, creating care plan interventions in Salesforce, updating room signage orders in ServiceNow, and alerting nursing staff via Teams.

naftiko: "0.5"
info:
  label: "Fall Prevention Risk Assessment Pipeline"
  description: "Assesses fall risk for inpatients by scoring risk factors from the EHR, creating care plan interventions in Salesforce, updating room signage orders in ServiceNow, and alerting nursing staff via Teams."
  tags:
    - patient-safety
    - fall-prevention
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fall-prevention
      port: 8080
      tools:
        - name: assess-fall-risk
          description: "Assess inpatient fall risk and implement prevention measures."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: unit_email
              in: body
              type: string
              description: "The nursing unit email."
          steps:
            - name: get-risk-factors
              type: call
              call: "epic.get-patient-assessment"
              with:
                patient_id: "{{patient_id}}"
                assessment_type: "fall_risk"
            - name: create-interventions
              type: call
              call: "salesforce.create-care-plan-items"
              with:
                patient_id: "{{patient_id}}"
                interventions: "{{get-risk-factors.recommended_interventions}}"
                risk_score: "{{get-risk-factors.morse_score}}"
            - name: order-signage
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Fall risk signage: Room {{get-risk-factors.room_number}}"
                category: "patient_safety"
                risk_level: "{{get-risk-factors.risk_level}}"
            - name: alert-nursing
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{unit_email}}"
                text: "Fall risk alert: Patient {{patient_id}}, Room {{get-risk-factors.room_number}}. Morse score: {{get-risk-factors.morse_score}} ({{get-risk-factors.risk_level}}). Interventions created: {{create-interventions.count}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: assessments
          path: "/RiskAssessment?patient={{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-patient-assessment
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: care-plan-items
          path: "/sobjects/CarePlanItem__c"
          operations:
            - name: create-care-plan-items
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Coordinates flu season preparedness by verifying vaccine inventory in Oracle, scheduling vaccination clinics, and launching member outreach via MailChimp.

naftiko: "0.5"
info:
  label: "Flu Season Preparedness Orchestrator"
  description: "Coordinates flu season preparedness by verifying vaccine inventory in Oracle, scheduling vaccination clinics, and launching member outreach via MailChimp."
  tags:
    - immunization
    - flu-season
    - oracle
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: flu-preparedness
      port: 8080
      tools:
        - name: prepare-flu-season
          description: "Coordinate flu season preparedness activities."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility code."
            - name: target_date
              in: body
              type: string
              description: "Target start date for flu clinics."
          steps:
            - name: check-vaccine-inventory
              type: call
              call: "oracle.get-inventory"
              with:
                item_number: "FLU-VAX-2026"
                organization_code: "{{facility_code}}"
            - name: schedule-clinics
              type: call
              call: "scheduling.create-clinic-sessions"
              with:
                facility_code: "{{facility_code}}"
                start_date: "{{target_date}}"
                vaccine_available: "{{check-vaccine-inventory.quantity_on_hand}}"
            - name: launch-outreach
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "flu-season-{{facility_code}}"
                template: "flu_vaccine_reminder"
                schedule_date: "{{target_date}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: inventory
          path: "/inventoryBalances"
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: clinics
          path: "/clinic-sessions"
          operations:
            - name: create-clinic-sessions
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

Retrieves patient portal engagement metrics from Google Analytics, including page views, session duration, and top pages.

naftiko: "0.5"
info:
  label: "Google Analytics Patient Portal Metrics"
  description: "Retrieves patient portal engagement metrics from Google Analytics, including page views, session duration, and top pages."
  tags:
    - analytics
    - patient-portal
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: portal-analytics
      port: 8080
      tools:
        - name: get-portal-metrics
          description: "Retrieve patient portal engagement metrics from Google Analytics for a given date range."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "google-analytics.get-report"
          with:
            property_id: "kp-patient-portal"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: page_views
              type: string
              mapping: "$.rows[0].metricValues[0].value"
            - name: avg_session_duration
              type: string
              mapping: "$.rows[0].metricValues[1].value"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: get-report
              method: POST

Searches Google Drive for clinical resources and training materials by keyword.

naftiko: "0.5"
info:
  label: "Google Drive Clinical Resource Search"
  description: "Searches Google Drive for clinical resources and training materials by keyword."
  tags:
    - clinical
    - training
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: clinical-resources
      port: 8080
      tools:
        - name: search-resources
          description: "Search Google Drive for clinical resources and training materials."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "google-drive.search-files"
          with:
            query: "name contains '{{keyword}}' and mimeType != 'application/vnd.google-apps.folder'"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
            - name: total
              type: string
              mapping: "$.files.length"
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?q={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-files
              method: GET

Reads staffing data from a Google Sheets spreadsheet used for department-level nurse and physician staffing ratios.

naftiko: "0.5"
info:
  label: "Google Sheets Staffing Report"
  description: "Reads staffing data from a Google Sheets spreadsheet used for department-level nurse and physician staffing ratios."
  tags:
    - staffing
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: staffing
      port: 8080
      tools:
        - name: get-staffing-data
          description: "Retrieve staffing data from a Google Sheet by spreadsheet ID and range."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets spreadsheet ID."
            - name: range
              in: body
              type: string
              description: "The cell range to read (e.g., Sheet1!A1:F50)."
          call: "gsheets.get-range"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{range}}"
          outputParameters:
            - name: values
              type: array
              mapping: "$.values"
  consumes:
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-range
              method: GET

Runs social determinants of health screenings by querying patient demographics from Databricks, identifying gaps, creating referrals in Salesforce, and logging screening results in the EHR.

naftiko: "0.5"
info:
  label: "Health Equity Screening Pipeline"
  description: "Runs social determinants of health screenings by querying patient demographics from Databricks, identifying gaps, creating referrals in Salesforce, and logging screening results in the EHR."
  tags:
    - health-equity
    - sdoh
    - azure-databricks
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: health-equity
      port: 8080
      tools:
        - name: run-sdoh-screening
          description: "Run social determinants of health screening and create referrals."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: screening_type
              in: body
              type: string
              description: "Type of SDOH screening (food, housing, transportation)."
          steps:
            - name: get-demographics
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM sdoh_screening_data WHERE patient_id = '{{patient_id}}'"
            - name: create-referral
              type: call
              call: "salesforce.create-referral"
              with:
                patient_id: "{{patient_id}}"
                referral_type: "{{screening_type}}"
                risk_factors: "{{get-demographics.risk_factors}}"
            - name: log-screening
              type: call
              call: "epic.create-observation"
              with:
                patient_id: "{{patient_id}}"
                code: "sdoh-screening"
                value: "{{screening_type}}: {{get-demographics.risk_score}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: referrals
          path: "/sobjects/Referral__c"
          operations:
            - name: create-referral
              method: POST
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: observations
          path: "/Observation"
          operations:
            - name: create-observation
              method: POST

Orchestrates HIPAA breach response by creating an incident in ServiceNow, triggering an audit log search in Splunk, notifying the privacy officer via Teams, and generating a breach report in SharePoint.

naftiko: "0.5"
info:
  label: "HIPAA Breach Response Orchestrator"
  description: "Orchestrates HIPAA breach response by creating an incident in ServiceNow, triggering an audit log search in Splunk, notifying the privacy officer via Teams, and generating a breach report in SharePoint."
  tags:
    - compliance
    - hipaa
    - servicenow
    - splunk
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hipaa-breach
      port: 8080
      tools:
        - name: initiate-breach-response
          description: "Initiate HIPAA breach response workflow."
          inputParameters:
            - name: breach_description
              in: body
              type: string
              description: "Description of the potential breach."
            - name: affected_records
              in: body
              type: string
              description: "Estimated number of affected records."
            - name: privacy_officer_email
              in: body
              type: string
              description: "Privacy officer email."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "HIPAA Breach Investigation"
                urgency: "1"
                description: "{{breach_description}}. Estimated affected records: {{affected_records}}."
                category: "privacy"
            - name: search-audit-logs
              type: call
              call: "splunk.run-search"
              with:
                search: "index=hipaa_audit {{breach_description}} | stats count by user, action"
                earliest_time: "-7d"
            - name: notify-privacy-officer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{privacy_officer_email}}"
                text: "HIPAA BREACH ALERT: {{breach_description}}. Incident: {{create-incident.number}}. Audit log matches: {{search-audit-logs.event_count}}. Estimated affected records: {{affected_records}}."
            - name: generate-report
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "compliance"
                folder_path: "BreachReports/{{create-incident.number}}"
                template: "hipaa_breach_report"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://kp-splunk.kaiserpermanente.org:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST

Coordinates home health visits by pulling the patient care plan from Salesforce, optimizing visit routes via Google Maps, scheduling visits, and sending the care team their daily assignment via Teams.

naftiko: "0.5"
info:
  label: "Home Health Visit Coordination Pipeline"
  description: "Coordinates home health visits by pulling the patient care plan from Salesforce, optimizing visit routes via Google Maps, scheduling visits, and sending the care team their daily assignment via Teams."
  tags:
    - home-health
    - care-coordination
    - salesforce
    - google-maps
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: home-health
      port: 8080
      tools:
        - name: coordinate-home-visits
          description: "Coordinate home health visit assignments and routing."
          inputParameters:
            - name: care_team_id
              in: body
              type: string
              description: "The home health care team ID."
            - name: visit_date
              in: body
              type: string
              description: "The visit date in YYYY-MM-DD format."
            - name: team_lead_email
              in: body
              type: string
              description: "Team lead email for notifications."
          steps:
            - name: get-patient-list
              type: call
              call: "salesforce.get-home-health-patients"
              with:
                care_team_id: "{{care_team_id}}"
                visit_date: "{{visit_date}}"
            - name: optimize-routes
              type: call
              call: "googlemaps.optimize-route"
              with:
                addresses: "{{get-patient-list.addresses}}"
                start_location: "{{get-patient-list.office_address}}"
            - name: create-assignments
              type: call
              call: "salesforce.create-visit-assignments"
              with:
                care_team_id: "{{care_team_id}}"
                visit_date: "{{visit_date}}"
                route_order: "{{optimize-routes.optimized_order}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{team_lead_email}}"
                text: "Home health assignments for {{visit_date}}: {{get-patient-list.patient_count}} patients. Optimized route: {{optimize-routes.total_distance}} miles. Assignments created: {{create-assignments.assignment_count}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: home-health
          path: "/sobjects/HomeHealthVisit__c"
          operations:
            - name: get-home-health-patients
              method: GET
            - name: create-visit-assignments
              method: POST
    - type: http
      namespace: googlemaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        header: "key"
        key: "$secrets.google_maps_key"
      resources:
        - name: directions
          path: "/directions/json"
          operations:
            - name: optimize-route
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves employer outreach contact details from HubSpot CRM for the employer partnerships team.

naftiko: "0.5"
info:
  label: "HubSpot Employer Outreach Tracking"
  description: "Retrieves employer outreach contact details from HubSpot CRM for the employer partnerships team."
  tags:
    - partnerships
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: employer-partnerships
      port: 8080
      tools:
        - name: get-employer-contact
          description: "Look up an employer contact in HubSpot by company name."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "The employer company name."
          call: "hubspot.search-contacts"
          with:
            query: "{{company_name}}"
          outputParameters:
            - name: contact_name
              type: string
              mapping: "$.results[0].properties.firstname"
            - name: email
              type: string
              mapping: "$.results[0].properties.email"
            - name: company
              type: string
              mapping: "$.results[0].properties.company"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/search"
          operations:
            - name: search-contacts
              method: POST

Identifies patients due for immunizations from Azure Databricks, sends reminders via MailChimp, and logs the outreach in Salesforce.

naftiko: "0.5"
info:
  label: "Immunization Outreach Campaign"
  description: "Identifies patients due for immunizations from Azure Databricks, sends reminders via MailChimp, and logs the outreach in Salesforce."
  tags:
    - population-health
    - immunizations
    - azure-databricks
    - mailchimp
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: immunization-outreach
      port: 8080
      tools:
        - name: trigger-immunization-campaign
          description: "Given a vaccine type, identify eligible patients, send email reminders, and log the campaign."
          inputParameters:
            - name: vaccine_type
              in: body
              type: string
              description: "The vaccine type (e.g., flu, COVID-19, shingles)."
            - name: campaign_name
              in: body
              type: string
              description: "The outreach campaign name."
          steps:
            - name: find-eligible
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT patient_id, email, name FROM immunization_due WHERE vaccine_type = '{{vaccine_type}}' AND last_dose_date < DATEADD(year, -1, CURRENT_DATE)"
            - name: send-emails
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "immunization-reminders"
                template: "{{vaccine_type}}-reminder"
                recipients: "{{find-eligible.emails}}"
            - name: log-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "{{campaign_name}}"
                type: "immunization"
                vaccine: "{{vaccine_type}}"
                recipients_count: "{{find-eligible.row_count}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST

Monitors infection control data from Azure Databricks, creates alerts in ServiceNow for infection prevention teams, updates the clinical dashboard in Power BI, and notifies leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Infection Control Alert Pipeline"
  description: "Monitors infection control data from Azure Databricks, creates alerts in ServiceNow for infection prevention teams, updates the clinical dashboard in Power BI, and notifies leadership via Microsoft Teams."
  tags:
    - infection-control
    - patient-safety
    - azure-databricks
    - servicenow
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infection-control
      port: 8080
      tools:
        - name: trigger-infection-alert
          description: "Given a facility and infection type, check thresholds, create alerts, refresh dashboards, and notify leadership."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility location code."
            - name: infection_type
              in: body
              type: string
              description: "The infection type to monitor (e.g., MRSA, CLABSI, CAUTI)."
          steps:
            - name: check-data
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM infection_surveillance WHERE facility = '{{facility_code}}' AND infection_type = '{{infection_type}}' AND report_date = CURRENT_DATE"
            - name: create-alert
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Infection alert: {{infection_type}} at {{facility_code}}"
                category: "infection_control"
                priority: "high"
                description: "Infection surveillance alert for {{infection_type}} at {{facility_code}}. Cases: {{check-data.case_count}}."
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "infection-control-dashboard"
            - name: notify-leadership
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "infection-prevention"
                text: "Infection control alert at {{facility_code}}: {{infection_type}} - {{check-data.case_count}} cases detected. ServiceNow: {{create-alert.number}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Schedules interpreter services by checking patient language preferences in Salesforce, finding available interpreters, booking sessions, and confirming with the care team via Teams.

naftiko: "0.5"
info:
  label: "Interpreter Services Scheduling Pipeline"
  description: "Schedules interpreter services by checking patient language preferences in Salesforce, finding available interpreters, booking sessions, and confirming with the care team via Teams."
  tags:
    - interpreter-services
    - language-access
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: interpreter-services
      port: 8080
      tools:
        - name: schedule-interpreter
          description: "Schedule interpreter services for a patient appointment."
          inputParameters:
            - name: appointment_id
              in: body
              type: string
              description: "The appointment ID requiring interpretation."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: provider_email
              in: body
              type: string
              description: "The provider email."
          steps:
            - name: get-language-pref
              type: call
              call: "salesforce.get-patient"
              with:
                patient_id: "{{patient_id}}"
            - name: find-interpreter
              type: call
              call: "scheduling.find-interpreter"
              with:
                language: "{{get-language-pref.preferred_language}}"
                appointment_id: "{{appointment_id}}"
            - name: book-interpreter
              type: call
              call: "scheduling.book-interpreter"
              with:
                interpreter_id: "{{find-interpreter.interpreter_id}}"
                appointment_id: "{{appointment_id}}"
            - name: confirm-with-provider
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{provider_email}}"
                text: "Interpreter scheduled for appointment {{appointment_id}}: {{get-language-pref.preferred_language}} interpreter ({{find-interpreter.interpreter_name}}). Booking ID: {{book-interpreter.booking_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: patients
          path: "/sobjects/Contact/{{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-patient
              method: GET
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: interpreters
          path: "/interpreters/available"
          operations:
            - name: find-interpreter
              method: GET
        - name: bookings
          path: "/interpreters/book"
          operations:
            - name: book-interpreter
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves clinical IT change request details from Jira, including approval status, implementation timeline, and risk assessment.

naftiko: "0.5"
info:
  label: "Jira Clinical Change Request Lookup"
  description: "Retrieves clinical IT change request details from Jira, including approval status, implementation timeline, and risk assessment."
  tags:
    - change-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: change-requests
      port: 8080
      tools:
        - name: get-change-request
          description: "Look up a clinical change request in Jira by issue key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: risk_level
              type: string
              mapping: "$.fields.customfield_10100"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://kaiserpermanente.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Retrieves a Jira issue by key from the clinical IT project, returning summary, status, assignee, and priority.

naftiko: "0.5"
info:
  label: "Jira Clinical IT Task Lookup"
  description: "Retrieves a Jira issue by key from the clinical IT project, returning summary, status, assignee, and priority."
  tags:
    - it-operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: clinical-it
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key from the clinical IT project."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g., CLINIT-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://kaiserpermanente.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Checks the status of a laboratory order in the LIS, returning collection status, processing state, and estimated result availability.

naftiko: "0.5"
info:
  label: "Lab Order Status Check"
  description: "Checks the status of a laboratory order in the LIS, returning collection status, processing state, and estimated result availability."
  tags:
    - laboratory
    - orders
capability:
  exposes:
    - type: mcp
      namespace: lab-orders
      port: 8080
      tools:
        - name: get-lab-order-status
          description: "Look up a lab order by order ID. Returns collection and processing status."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The lab order identifier."
          call: "lis.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.order.status"
            - name: collection_date
              type: string
              mapping: "$.order.collectionDate"
            - name: estimated_result_date
              type: string
              mapping: "$.order.estimatedResultDate"
  consumes:
    - type: http
      namespace: lis
      baseUri: "https://kp-lis.kaiserpermanente.org/api/v2"
      authentication:
        type: bearer
        token: "$secrets.lis_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

Creates a job posting on LinkedIn for physician recruitment, tracking the post in Salesforce.

naftiko: "0.5"
info:
  label: "LinkedIn Provider Recruitment Post"
  description: "Creates a job posting on LinkedIn for physician recruitment, tracking the post in Salesforce."
  tags:
    - recruitment
    - linkedin
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: provider-recruitment
      port: 8080
      tools:
        - name: post-physician-job
          description: "Given job details, create a LinkedIn job post and log it in Salesforce."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "The physician job title."
            - name: specialty
              in: body
              type: string
              description: "The medical specialty."
            - name: location
              in: body
              type: string
              description: "The job location."
            - name: description
              in: body
              type: string
              description: "The job description."
          steps:
            - name: create-post
              type: call
              call: "linkedin.create-job-post"
              with:
                title: "{{job_title}}"
                description: "{{description}}"
                location: "{{location}}"
            - name: log-posting
              type: call
              call: "salesforce.create-job-record"
              with:
                title: "{{job_title}}"
                specialty: "{{specialty}}"
                location: "{{location}}"
                linkedin_post_id: "{{create-post.post_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-posts
          path: "/simpleJobPostings"
          operations:
            - name: create-job-post
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: job-records
          path: "/sobjects/JobPosting__c"
          operations:
            - name: create-job-record
              method: POST

Tracks prenatal care milestones by pulling pregnancy data from the EHR, scheduling overdue appointments, and sending reminder notifications via WhatsApp.

naftiko: "0.5"
info:
  label: "Maternal Health Prenatal Tracker"
  description: "Tracks prenatal care milestones by pulling pregnancy data from the EHR, scheduling overdue appointments, and sending reminder notifications via WhatsApp."
  tags:
    - maternal-health
    - prenatal
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: prenatal-care
      port: 8080
      tools:
        - name: track-prenatal-milestones
          description: "Check prenatal milestones for a patient and schedule overdue visits."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: phone_number
              in: body
              type: string
              description: "The patient phone number for notifications."
          steps:
            - name: get-pregnancy-record
              type: call
              call: "epic.get-pregnancy"
              with:
                patient_id: "{{patient_id}}"
            - name: schedule-overdue
              type: call
              call: "scheduling.create-appointment"
              with:
                patient_id: "{{patient_id}}"
                visit_type: "{{get-pregnancy-record.next_milestone}}"
                provider_npi: "{{get-pregnancy-record.ob_provider_npi}}"
            - name: send-reminder
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{phone_number}}"
                message: "Your next prenatal visit ({{get-pregnancy-record.next_milestone}}) has been scheduled. Appointment ID: {{schedule-overdue.appointment_id}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: pregnancy
          path: "/Condition?patient={{patient_id}}&category=pregnancy"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-pregnancy
              method: GET
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Looks up ICD-10 diagnosis codes and returns descriptions, related codes, and HCC risk categories.

naftiko: "0.5"
info:
  label: "Medical Coding ICD Lookup"
  description: "Looks up ICD-10 diagnosis codes and returns descriptions, related codes, and HCC risk categories."
  tags:
    - coding
    - icd
capability:
  exposes:
    - type: mcp
      namespace: medical-coding
      port: 8080
      tools:
        - name: lookup-icd-code
          description: "Look up an ICD-10 code. Returns description and HCC category."
          inputParameters:
            - name: icd_code
              in: body
              type: string
              description: "The ICD-10 diagnosis code."
          call: "coding.get-icd"
          with:
            code: "{{icd_code}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.code.description"
            - name: hcc_category
              type: string
              mapping: "$.code.hccCategory"
            - name: related_codes
              type: array
              mapping: "$.code.relatedCodes"
  consumes:
    - type: http
      namespace: coding
      baseUri: "https://kp-coding.kaiserpermanente.org/api/v1"
      authentication:
        type: apiKey
        header: "X-API-Key"
        key: "$secrets.coding_api_key"
      resources:
        - name: codes
          path: "/icd10/{{code}}"
          inputParameters:
            - name: code
              in: path
          operations:
            - name: get-icd
              method: GET

Responds to medical device recalls by querying affected devices in Oracle, identifying impacted patients from the EHR, creating recall cases in ServiceNow, and notifying clinical engineering via Teams.

naftiko: "0.5"
info:
  label: "Medical Device Recall Response Orchestrator"
  description: "Responds to medical device recalls by querying affected devices in Oracle, identifying impacted patients from the EHR, creating recall cases in ServiceNow, and notifying clinical engineering via Teams."
  tags:
    - patient-safety
    - device-recall
    - oracle
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: device-recall
      port: 8080
      tools:
        - name: process-device-recall
          description: "Process a medical device recall across clinical and supply systems."
          inputParameters:
            - name: device_model
              in: body
              type: string
              description: "The recalled device model number."
            - name: recall_class
              in: body
              type: string
              description: "FDA recall class (I, II, III)."
            - name: engineering_email
              in: body
              type: string
              description: "Clinical engineering team email."
          steps:
            - name: find-affected-devices
              type: call
              call: "oracle.search-devices"
              with:
                model: "{{device_model}}"
            - name: find-affected-patients
              type: call
              call: "epic.search-device-patients"
              with:
                device_model: "{{device_model}}"
            - name: create-recall-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Device Recall: {{device_model}} (Class {{recall_class}})"
                urgency: "1"
                description: "Affected devices: {{find-affected-devices.count}}. Affected patients: {{find-affected-patients.count}}."
            - name: notify-engineering
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{engineering_email}}"
                text: "DEVICE RECALL: {{device_model}} (Class {{recall_class}}). Devices in inventory: {{find-affected-devices.count}}. Patients with device: {{find-affected-patients.count}}. Incident: {{create-recall-case.number}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: devices
          path: "/medicalDevices"
          operations:
            - name: search-devices
              method: GET
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: device-patients
          path: "/Device?model={{device_model}}"
          inputParameters:
            - name: device_model
              in: path
          operations:
            - name: search-device-patients
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a department requests medical equipment, creates a requisition in SAP, gets budget approval from Workday, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Medical Equipment Procurement Pipeline"
  description: "When a department requests medical equipment, creates a requisition in SAP, gets budget approval from Workday, and notifies the procurement team via Microsoft Teams."
  tags:
    - procurement
    - medical-equipment
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: equipment-procurement
      port: 8080
      tools:
        - name: request-equipment
          description: "Given equipment details and requester info, create a requisition, check budget, and notify procurement."
          inputParameters:
            - name: equipment_name
              in: body
              type: string
              description: "The name of the medical equipment."
            - name: quantity
              in: body
              type: string
              description: "The quantity requested."
            - name: estimated_cost
              in: body
              type: string
              description: "The estimated total cost."
            - name: requester_id
              in: body
              type: string
              description: "The Workday ID of the requester."
            - name: department
              in: body
              type: string
              description: "The requesting department."
          steps:
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                description: "{{equipment_name}} x{{quantity}}"
                amount: "{{estimated_cost}}"
                requester: "{{requester_id}}"
            - name: check-budget
              type: call
              call: "workday.check-budget"
              with:
                department: "{{department}}"
                amount: "{{estimated_cost}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement"
                text: "New equipment request: {{equipment_name}} x{{quantity}} (${{estimated_cost}}) from {{department}}. Requisition: {{create-requisition.req_number}}. Budget available: {{check-budget.available}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-supply.sap.com/sap/opu/odata/sap/MM_PUR_REQ_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/financialManagement/budgets?department={{department}}"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: check-budget
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Performs medication reconciliation at transitions of care by pulling current meds from the EHR, cross-referencing the pharmacy system, flagging interactions, and creating reconciliation tasks in Salesforce.

naftiko: "0.5"
info:
  label: "Medication Reconciliation Orchestrator"
  description: "Performs medication reconciliation at transitions of care by pulling current meds from the EHR, cross-referencing the pharmacy system, flagging interactions, and creating reconciliation tasks in Salesforce."
  tags:
    - pharmacy
    - medication-safety
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: med-reconciliation
      port: 8080
      tools:
        - name: reconcile-medications
          description: "Reconcile a patient's medications across EHR and pharmacy systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: pharmacist_email
              in: body
              type: string
              description: "The assigned pharmacist email."
          steps:
            - name: get-ehr-meds
              type: call
              call: "epic.get-medications"
              with:
                patient_id: "{{patient_id}}"
            - name: get-pharmacy-meds
              type: call
              call: "pharmacy.get-dispensed"
              with:
                patient_id: "{{patient_id}}"
            - name: check-interactions
              type: call
              call: "druginteraction.check"
              with:
                medications: "{{get-ehr-meds.medication_list}}"
            - name: create-reconciliation-task
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Medication reconciliation required for {{patient_id}}"
                description: "EHR meds: {{get-ehr-meds.count}}, Pharmacy records: {{get-pharmacy-meds.count}}, Interactions found: {{check-interactions.interaction_count}}"
                assigned_to: "{{pharmacist_email}}"
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: medications
          path: "/MedicationRequest?patient={{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-medications
              method: GET
    - type: http
      namespace: pharmacy
      baseUri: "https://kp-pharmacy.kaiserpermanente.org/api/v1"
      authentication:
        type: apiKey
        header: "X-API-Key"
        key: "$secrets.pharmacy_api_key"
      resources:
        - name: dispensed
          path: "/patients/{{patient_id}}/dispensed"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-dispensed
              method: GET
    - type: http
      namespace: druginteraction
      baseUri: "https://kp-clinical.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.clinical_api_token"
      resources:
        - name: interactions
          path: "/drug-interactions/check"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

Checks a member's insurance eligibility and benefit details in SAP for a given service type and date of service.

naftiko: "0.5"
info:
  label: "Member Eligibility Verification"
  description: "Checks a member's insurance eligibility and benefit details in SAP for a given service type and date of service."
  tags:
    - claims
    - eligibility
    - sap
capability:
  exposes:
    - type: mcp
      namespace: eligibility
      port: 8080
      tools:
        - name: verify-eligibility
          description: "Verify a member's insurance eligibility for a specific service type and date."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The health plan member ID."
            - name: service_type
              in: body
              type: string
              description: "The type of service to verify (e.g., inpatient, outpatient, lab)."
            - name: date_of_service
              in: body
              type: string
              description: "The date of service in YYYY-MM-DD format."
          call: "sap.check-eligibility"
          with:
            member_id: "{{member_id}}"
            service_type: "{{service_type}}"
            date: "{{date_of_service}}"
          outputParameters:
            - name: eligible
              type: string
              mapping: "$.d.IsEligible"
            - name: copay
              type: string
              mapping: "$.d.CopayAmount"
            - name: deductible_remaining
              type: string
              mapping: "$.d.DeductibleRemaining"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-claims.sap.com/sap/opu/odata/sap/ELIGIBILITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: eligibility
          path: "/Eligibility(MemberId='{{member_id}}',ServiceType='{{service_type}}',Date='{{date}}')"
          inputParameters:
            - name: member_id
              in: path
            - name: service_type
              in: path
            - name: date
              in: path
          operations:
            - name: check-eligibility
              method: GET

Triggers a crisis intervention workflow by creating an urgent case in ServiceNow, notifying the behavioral health team via Teams, scheduling an emergency session, and documenting the intervention in the EHR.

naftiko: "0.5"
info:
  label: "Mental Health Crisis Intervention Pipeline"
  description: "Triggers a crisis intervention workflow by creating an urgent case in ServiceNow, notifying the behavioral health team via Teams, scheduling an emergency session, and documenting the intervention in the EHR."
  tags:
    - behavioral-health
    - crisis
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crisis-intervention
      port: 8080
      tools:
        - name: initiate-crisis-intervention
          description: "Initiate mental health crisis intervention across clinical systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: crisis_level
              in: body
              type: string
              description: "Crisis severity level (acute, urgent, emergent)."
            - name: bh_team_email
              in: body
              type: string
              description: "Behavioral health team email."
          steps:
            - name: create-urgent-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Mental health crisis - {{crisis_level}} - Patient {{patient_id}}"
                urgency: "1"
                category: "behavioral_health"
            - name: notify-bh-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{bh_team_email}}"
                text: "CRISIS ALERT: Patient {{patient_id}}, level {{crisis_level}}. Case: {{create-urgent-case.number}}. Immediate intervention required."
            - name: schedule-emergency-session
              type: call
              call: "scheduling.create-urgent-appointment"
              with:
                patient_id: "{{patient_id}}"
                visit_type: "crisis_intervention"
                priority: "emergency"
            - name: document-in-ehr
              type: call
              call: "epic.create-note"
              with:
                patient_id: "{{patient_id}}"
                note_type: "crisis_intervention"
                content: "Crisis intervention initiated. Level: {{crisis_level}}. Case: {{create-urgent-case.number}}. Emergency session: {{schedule-emergency-session.appointment_id}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: urgent-appointments
          path: "/appointments/urgent"
          operations:
            - name: create-urgent-appointment
              method: POST
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: notes
          path: "/DocumentReference"
          operations:
            - name: create-note
              method: POST

Retrieves clinical or financial data from Oracle Cloud and generates a formatted Microsoft Excel report stored in SharePoint.

naftiko: "0.5"
info:
  label: "Microsoft Excel Report Generator"
  description: "Retrieves clinical or financial data from Oracle Cloud and generates a formatted Microsoft Excel report stored in SharePoint."
  tags:
    - reporting
    - microsoft-excel
    - oracle-cloud
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: report-generation
      port: 8080
      tools:
        - name: generate-excel-report
          description: "Given a report type and date range, pull data from Oracle Cloud and create an Excel report in SharePoint."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "The report type (e.g., claims-summary, utilization, financial)."
            - name: start_date
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: extract-data
              type: call
              call: "oracle.get-report-data"
              with:
                report_type: "{{report_type}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: create-workbook
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "kp-reports"
                folder_path: "Reports/{{report_type}}"
                file_name: "{{report_type}}_{{start_date}}_{{end_date}}.xlsx"
                content: "{{extract-data.results}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: reports
          path: "/reports/{{report_type}}?startDate={{start_date}}&endDate={{end_date}}"
          inputParameters:
            - name: report_type
              in: path
            - name: start_date
              in: query
            - name: end_date
              in: query
          operations:
            - name: get-report-data
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT

Creates a calendar event in Microsoft Outlook for a care team meeting, including attendees and meeting details.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Calendar Event Creation"
  description: "Creates a calendar event in Microsoft Outlook for a care team meeting, including attendees and meeting details."
  tags:
    - scheduling
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: calendar
      port: 8080
      tools:
        - name: create-care-meeting
          description: "Create a calendar event in Microsoft Outlook for a care team meeting."
          inputParameters:
            - name: subject
              in: body
              type: string
              description: "The meeting subject."
            - name: start_time
              in: body
              type: string
              description: "The meeting start time in ISO 8601 format."
            - name: duration_minutes
              in: body
              type: string
              description: "The meeting duration in minutes."
            - name: attendees
              in: body
              type: string
              description: "Comma-separated list of attendee email addresses."
          call: "outlook.create-event"
          with:
            subject: "{{subject}}"
            start_time: "{{start_time}}"
            duration: "{{duration_minutes}}"
            attendees: "{{attendees}}"
  consumes:
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/me/events"
          operations:
            - name: create-event
              method: POST

Retrieves application performance metrics for the patient portal from New Relic, including response times, error rates, and throughput.

naftiko: "0.5"
info:
  label: "New Relic Patient Portal Performance"
  description: "Retrieves application performance metrics for the patient portal from New Relic, including response times, error rates, and throughput."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: portal-performance
      port: 8080
      tools:
        - name: get-portal-metrics
          description: "Fetch patient portal performance metrics from New Relic."
          inputParameters:
            - name: time_period
              in: body
              type: string
              description: "Time period for metrics (e.g., last_hour, last_day)."
          call: "newrelic.get-app-metrics"
          with:
            app_name: "KP-Patient-Portal"
            period: "{{time_period}}"
          outputParameters:
            - name: avg_response_time
              type: number
              mapping: "$.metric_data.metrics[0].timeslices[0].values.average_response_time"
            - name: error_rate
              type: number
              mapping: "$.metric_data.metrics[0].timeslices[0].values.error_percentage"
            - name: throughput
              type: number
              mapping: "$.metric_data.metrics[0].timeslices[0].values.requests_per_minute"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        header: "X-Api-Key"
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/metrics/data.json"
          operations:
            - name: get-app-metrics
              method: GET

Queries patient census data from Azure Databricks, calculates staffing needs, updates shift assignments in Workday, and notifies nurse managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Nurse Staffing Optimization Pipeline"
  description: "Queries patient census data from Azure Databricks, calculates staffing needs, updates shift assignments in Workday, and notifies nurse managers via Microsoft Teams."
  tags:
    - staffing
    - workforce-management
    - azure-databricks
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nurse-staffing
      port: 8080
      tools:
        - name: optimize-staffing
          description: "Given a facility and date, calculate optimal nurse staffing based on census data and update Workday schedules."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility location code."
            - name: target_date
              in: body
              type: string
              description: "The target staffing date in YYYY-MM-DD format."
          steps:
            - name: get-census
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT unit, patient_count, acuity_score FROM census WHERE facility = '{{facility_code}}' AND date = '{{target_date}}'"
            - name: update-schedules
              type: call
              call: "workday.update-shifts"
              with:
                facility: "{{facility_code}}"
                date: "{{target_date}}"
                staffing_plan: "{{get-census.results}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "nurse-staffing"
                text: "Staffing plan updated for {{facility_code}} on {{target_date}}. Census data processed for {{get-census.row_count}} units."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: shifts
          path: "/scheduling/shifts"
          operations:
            - name: update-shifts
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors opioid prescribing patterns by querying prescription data from Databricks, flagging high-risk patterns, creating alerts in the EHR, and notifying the pain management team via Teams.

naftiko: "0.5"
info:
  label: "Opioid Stewardship Monitoring Pipeline"
  description: "Monitors opioid prescribing patterns by querying prescription data from Databricks, flagging high-risk patterns, creating alerts in the EHR, and notifying the pain management team via Teams."
  tags:
    - opioid-stewardship
    - prescribing
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: opioid-stewardship
      port: 8080
      tools:
        - name: monitor-opioid-prescribing
          description: "Monitor opioid prescribing patterns and flag high-risk cases."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The facility code."
            - name: pain_mgmt_email
              in: body
              type: string
              description: "Pain management team email."
          steps:
            - name: analyze-patterns
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM opioid_prescribing WHERE facility = '{{facility_code}}' AND risk_score >= 7 ORDER BY risk_score DESC"
            - name: create-ehr-alerts
              type: call
              call: "epic.create-clinical-alerts"
              with:
                patient_ids: "{{analyze-patterns.high_risk_patients}}"
                alert_type: "opioid_stewardship"
            - name: notify-pain-management
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{pain_mgmt_email}}"
                text: "Opioid stewardship alert for {{facility_code}}: {{analyze-patterns.high_risk_count}} high-risk prescribing patterns identified. EHR alerts created for {{create-ehr-alerts.alert_count}} patients."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: alerts
          path: "/Flag"
          operations:
            - name: create-clinical-alerts
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries Oracle E-Business Suite for current inventory levels of medical supplies at a specified facility location.

naftiko: "0.5"
info:
  label: "Oracle Supply Chain Inventory Query"
  description: "Queries Oracle E-Business Suite for current inventory levels of medical supplies at a specified facility location."
  tags:
    - supply-chain
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: supply-inventory
      port: 8080
      tools:
        - name: get-inventory-level
          description: "Check inventory levels for a supply item at a specific facility."
          inputParameters:
            - name: item_number
              in: body
              type: string
              description: "The supply item number."
            - name: facility_code
              in: body
              type: string
              description: "The facility location code."
          call: "oracle.get-inventory"
          with:
            item_number: "{{item_number}}"
            organization_code: "{{facility_code}}"
          outputParameters:
            - name: quantity_on_hand
              type: number
              mapping: "$.items[0].onHandQuantity"
            - name: reorder_point
              type: number
              mapping: "$.items[0].reorderPoint"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: inventory
          path: "/inventoryBalances"
          operations:
            - name: get-inventory
              method: GET

Coordinates organ transplant waitlist management by pulling patient status from the EHR, updating the transplant registry, notifying the transplant team, and creating follow-up tasks in Salesforce.

naftiko: "0.5"
info:
  label: "Organ Transplant Waitlist Coordinator"
  description: "Coordinates organ transplant waitlist management by pulling patient status from the EHR, updating the transplant registry, notifying the transplant team, and creating follow-up tasks in Salesforce."
  tags:
    - transplant
    - waitlist
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: transplant-waitlist
      port: 8080
      tools:
        - name: update-waitlist-status
          description: "Update a patient's transplant waitlist status across systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: organ_type
              in: body
              type: string
              description: "The organ type (kidney, liver, heart, etc.)."
            - name: new_status
              in: body
              type: string
              description: "The new waitlist status."
            - name: transplant_team_email
              in: body
              type: string
              description: "Transplant team email."
          steps:
            - name: get-patient-data
              type: call
              call: "epic.get-patient"
              with:
                mrn: "{{patient_id}}"
            - name: update-registry
              type: call
              call: "transplant-registry.update-status"
              with:
                patient_id: "{{patient_id}}"
                organ_type: "{{organ_type}}"
                status: "{{new_status}}"
            - name: create-followup
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Transplant waitlist update: {{patient_id}} - {{organ_type}}"
                description: "Status changed to {{new_status}}. Patient: {{get-patient-data.name}}."
                assigned_to: "{{transplant_team_email}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{transplant_team_email}}"
                text: "Transplant waitlist update: Patient {{patient_id}} ({{organ_type}}) status changed to {{new_status}}. Task: {{create-followup.task_id}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: patients
          path: "/Patient/{{mrn}}"
          inputParameters:
            - name: mrn
              in: path
          operations:
            - name: get-patient
              method: GET
    - type: http
      namespace: transplant-registry
      baseUri: "https://kp-transplant.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.transplant_token"
      resources:
        - name: waitlist
          path: "/waitlist/{{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: update-status
              method: PUT
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Processes palliative care referrals by verifying patient eligibility from the EHR, creating referral records in Salesforce, scheduling initial consults, and notifying the palliative care team.

naftiko: "0.5"
info:
  label: "Palliative Care Referral Orchestrator"
  description: "Processes palliative care referrals by verifying patient eligibility from the EHR, creating referral records in Salesforce, scheduling initial consults, and notifying the palliative care team."
  tags:
    - palliative-care
    - referrals
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: palliative-referral
      port: 8080
      tools:
        - name: process-palliative-referral
          description: "Process a palliative care referral across clinical systems."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: referring_provider_npi
              in: body
              type: string
              description: "Referring provider NPI."
            - name: reason
              in: body
              type: string
              description: "Reason for referral."
          steps:
            - name: verify-eligibility
              type: call
              call: "epic.get-patient"
              with:
                mrn: "{{patient_id}}"
            - name: create-referral
              type: call
              call: "salesforce.create-referral"
              with:
                patient_id: "{{patient_id}}"
                referring_provider: "{{referring_provider_npi}}"
                reason: "{{reason}}"
                type: "palliative_care"
            - name: schedule-consult
              type: call
              call: "scheduling.create-appointment"
              with:
                patient_id: "{{patient_id}}"
                visit_type: "palliative_care_consult"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "palliative-care@kaiserpermanente.org"
                text: "New palliative care referral: Patient {{patient_id}}. Reason: {{reason}}. Consult scheduled: {{schedule-consult.appointment_id}}. Referral: {{create-referral.referral_id}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: patients
          path: "/Patient/{{mrn}}"
          inputParameters:
            - name: mrn
              in: path
          operations:
            - name: get-patient
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: referrals
          path: "/sobjects/Referral__c"
          operations:
            - name: create-referral
              method: POST
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

On patient request, checks provider availability in Workday, creates an appointment slot, and sends a confirmation via Microsoft Teams to the care coordinator.

naftiko: "0.5"
info:
  label: "Patient Appointment Scheduler"
  description: "On patient request, checks provider availability in Workday, creates an appointment slot, and sends a confirmation via Microsoft Teams to the care coordinator."
  tags:
    - patient-care
    - scheduling
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: patient-scheduling
      port: 8080
      tools:
        - name: schedule-appointment
          description: "Given a patient ID, provider ID, and preferred date, check provider availability in Workday, reserve the slot, and notify the care coordinator in Microsoft Teams."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: provider_id
              in: body
              type: string
              description: "The Workday worker ID for the provider."
            - name: preferred_date
              in: body
              type: string
              description: "Preferred appointment date in YYYY-MM-DD format."
            - name: appointment_type
              in: body
              type: string
              description: "Type of appointment (e.g., primary-care, specialist, follow-up)."
          steps:
            - name: check-availability
              type: call
              call: "workday.get-worker-schedule"
              with:
                worker_id: "{{provider_id}}"
                date: "{{preferred_date}}"
            - name: create-slot
              type: call
              call: "salesforce.create-appointment"
              with:
                patient_id: "{{patient_id}}"
                provider_id: "{{provider_id}}"
                date: "{{preferred_date}}"
                type: "{{appointment_type}}"
            - name: notify-coordinator
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "care-coordination"
                text: "Appointment scheduled for patient {{patient_id}} with provider {{provider_id}} on {{preferred_date}}. Confirmation: {{create-slot.confirmation_number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker-schedules
          path: "/workers/{{worker_id}}/schedule"
          inputParameters:
            - name: worker_id
              in: path
            - name: date
              in: query
          operations:
            - name: get-worker-schedule
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: appointments
          path: "/sobjects/Appointment__c"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls diagnosis-specific education materials from Confluence, personalizes content based on patient language preference from Salesforce, and sends via WhatsApp with read tracking.

naftiko: "0.5"
info:
  label: "Patient Education Content Delivery Pipeline"
  description: "Pulls diagnosis-specific education materials from Confluence, personalizes content based on patient language preference from Salesforce, and sends via WhatsApp with read tracking."
  tags:
    - patient-education
    - confluence
    - salesforce
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: patient-education
      port: 8080
      tools:
        - name: deliver-education-content
          description: "Deliver personalized patient education materials based on diagnosis."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: diagnosis_code
              in: body
              type: string
              description: "The ICD-10 diagnosis code."
            - name: phone_number
              in: body
              type: string
              description: "Patient phone number."
          steps:
            - name: get-patient-prefs
              type: call
              call: "salesforce.get-patient"
              with:
                patient_id: "{{patient_id}}"
            - name: get-content
              type: call
              call: "confluence.search-content"
              with:
                cql: "label = '{{diagnosis_code}}' AND label = '{{get-patient-prefs.language}}'"
            - name: send-content
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{phone_number}}"
                message: "Health information for your condition: {{get-content.title}}. {{get-content.excerpt}} Read more: {{get-content.url}}"
            - name: log-delivery
              type: call
              call: "salesforce.create-activity"
              with:
                patient_id: "{{patient_id}}"
                type: "education_delivery"
                notes: "Sent {{get-content.title}} in {{get-patient-prefs.language}} via WhatsApp."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: patients
          path: "/sobjects/Contact/{{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-patient
              method: GET
        - name: activities
          path: "/sobjects/Activity__c"
          operations:
            - name: create-activity
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://kaiserpermanente.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search"
          operations:
            - name: search-content
              method: GET
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Identifies patient no-shows from the scheduling system, updates the patient record in Salesforce, sends a rescheduling message via WhatsApp, and logs the outreach in the care coordination platform.

naftiko: "0.5"
info:
  label: "Patient No-Show Follow-Up Pipeline"
  description: "Identifies patient no-shows from the scheduling system, updates the patient record in Salesforce, sends a rescheduling message via WhatsApp, and logs the outreach in the care coordination platform."
  tags:
    - scheduling
    - patient-engagement
    - salesforce
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: no-show-followup
      port: 8080
      tools:
        - name: process-no-show
          description: "Process a patient no-show and trigger follow-up workflows."
          inputParameters:
            - name: appointment_id
              in: body
              type: string
              description: "The missed appointment ID."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: phone_number
              in: body
              type: string
              description: "The patient phone number."
          steps:
            - name: get-appointment-details
              type: call
              call: "scheduling.get-appointment"
              with:
                appointment_id: "{{appointment_id}}"
            - name: update-patient-record
              type: call
              call: "salesforce.update-contact"
              with:
                patient_id: "{{patient_id}}"
                last_no_show_date: "{{get-appointment-details.date}}"
                no_show_count_increment: "1"
            - name: send-reschedule-message
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{phone_number}}"
                message: "We missed you at your {{get-appointment-details.visit_type}} appointment. Please call us to reschedule or reply RESCHEDULE."
            - name: log-outreach
              type: call
              call: "salesforce.create-activity"
              with:
                patient_id: "{{patient_id}}"
                type: "no_show_followup"
                notes: "No-show for {{get-appointment-details.visit_type}} on {{get-appointment-details.date}}. Rescheduling message sent via WhatsApp."
  consumes:
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: appointments
          path: "/appointments/{{appointment_id}}"
          inputParameters:
            - name: appointment_id
              in: path
          operations:
            - name: get-appointment
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: update-contact
              method: PATCH
        - name: activities
          path: "/sobjects/Activity__c"
          operations:
            - name: create-activity
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Retrieves unread patient portal messages from Salesforce for a given provider, used by clinical support staff.

naftiko: "0.5"
info:
  label: "Patient Portal Message Lookup"
  description: "Retrieves unread patient portal messages from Salesforce for a given provider, used by clinical support staff."
  tags:
    - patient-care
    - messaging
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: patient-messaging
      port: 8080
      tools:
        - name: get-unread-messages
          description: "Retrieve unread patient portal messages for a provider from Salesforce."
          inputParameters:
            - name: provider_id
              in: body
              type: string
              description: "The provider Salesforce record ID."
          call: "salesforce.query-messages"
          with:
            provider_id: "{{provider_id}}"
          outputParameters:
            - name: message_count
              type: string
              mapping: "$.totalSize"
            - name: messages
              type: string
              mapping: "$.records"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: messages
          path: "/query/?q=SELECT+Id,Subject,Body+FROM+PatientMessage__c+WHERE+ProviderId__c='{{provider_id}}'+AND+IsRead__c=false"
          inputParameters:
            - name: provider_id
              in: query
          operations:
            - name: query-messages
              method: GET

After a completed appointment, sends a patient satisfaction survey via Google Forms, collects responses in Google Sheets, and creates a follow-up task in Salesforce if the score is low.

naftiko: "0.5"
info:
  label: "Patient Satisfaction Survey Pipeline"
  description: "After a completed appointment, sends a patient satisfaction survey via Google Forms, collects responses in Google Sheets, and creates a follow-up task in Salesforce if the score is low."
  tags:
    - patient-experience
    - google-forms
    - google-sheets
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: patient-satisfaction
      port: 8080
      tools:
        - name: trigger-survey
          description: "Given an appointment ID, send a satisfaction survey, monitor responses, and escalate low scores."
          inputParameters:
            - name: appointment_id
              in: body
              type: string
              description: "The completed appointment ID."
            - name: patient_email
              in: body
              type: string
              description: "The patient email to receive the survey."
            - name: provider_name
              in: body
              type: string
              description: "The provider name for the survey context."
          steps:
            - name: send-survey
              type: call
              call: "google-forms.send-form"
              with:
                form_id: "patient-satisfaction-v2"
                recipient_email: "{{patient_email}}"
                provider_name: "{{provider_name}}"
            - name: log-response
              type: call
              call: "google-sheets.append-row"
              with:
                spreadsheet_id: "patient-satisfaction-tracker"
                values: "{{appointment_id}},{{patient_email}},{{provider_name}},{{send-survey.response_id}}"
            - name: check-escalation
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Low satisfaction follow-up: {{appointment_id}}"
                description: "Patient satisfaction survey sent for appointment {{appointment_id}} with {{provider_name}}."
                assigned_to: "patient-experience-team"
  consumes:
    - type: http
      namespace: google-forms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_forms_token"
      resources:
        - name: forms
          path: "/forms/{{form_id}}/responses"
          inputParameters:
            - name: form_id
              in: path
          operations:
            - name: send-form
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

Coordinates patient transfers between facilities by verifying bed availability, creating transfer orders in the EHR, notifying the receiving care team via Teams, and updating the bed management system.

naftiko: "0.5"
info:
  label: "Patient Transfer Coordination Pipeline"
  description: "Coordinates patient transfers between facilities by verifying bed availability, creating transfer orders in the EHR, notifying the receiving care team via Teams, and updating the bed management system."
  tags:
    - patient-care
    - transfers
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: patient-transfers
      port: 8080
      tools:
        - name: coordinate-transfer
          description: "Orchestrate a patient transfer between Kaiser facilities."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: destination_facility
              in: body
              type: string
              description: "The destination facility code."
            - name: transfer_reason
              in: body
              type: string
              description: "The clinical reason for transfer."
            - name: receiving_team_email
              in: body
              type: string
              description: "The receiving care team email."
          steps:
            - name: check-beds
              type: call
              call: "bedmgmt.check-availability"
              with:
                facility_code: "{{destination_facility}}"
                unit_type: "{{transfer_reason}}"
            - name: create-transfer-order
              type: call
              call: "epic.create-transfer"
              with:
                patient_id: "{{patient_id}}"
                destination: "{{destination_facility}}"
                reason: "{{transfer_reason}}"
                bed_assignment: "{{check-beds.bed_id}}"
            - name: notify-receiving-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{receiving_team_email}}"
                text: "Incoming transfer: Patient {{patient_id}} to {{destination_facility}}. Bed {{check-beds.bed_id}}. Transfer order: {{create-transfer-order.order_id}}."
            - name: update-bed-status
              type: call
              call: "bedmgmt.assign-bed"
              with:
                bed_id: "{{check-beds.bed_id}}"
                patient_id: "{{patient_id}}"
                status: "pending_arrival"
  consumes:
    - type: http
      namespace: bedmgmt
      baseUri: "https://kp-bedmgmt.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bedmgmt_token"
      resources:
        - name: beds
          path: "/beds"
          operations:
            - name: check-availability
              method: GET
            - name: assign-bed
              method: PUT
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: transfers
          path: "/ServiceRequest"
          operations:
            - name: create-transfer
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Manages pediatric vaccination schedules by pulling immunization records from the EHR, identifying overdue vaccines, scheduling appointments, and notifying parents via WhatsApp.

naftiko: "0.5"
info:
  label: "Pediatric Vaccination Schedule Pipeline"
  description: "Manages pediatric vaccination schedules by pulling immunization records from the EHR, identifying overdue vaccines, scheduling appointments, and notifying parents via WhatsApp."
  tags:
    - pediatrics
    - immunization
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: pediatric-vaccines
      port: 8080
      tools:
        - name: check-vaccination-schedule
          description: "Check and manage a pediatric patient's vaccination schedule."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The pediatric patient MRN."
            - name: parent_phone
              in: body
              type: string
              description: "Parent phone number for notifications."
          steps:
            - name: get-immunizations
              type: call
              call: "epic.get-immunizations"
              with:
                patient_id: "{{patient_id}}"
            - name: schedule-vaccines
              type: call
              call: "scheduling.create-appointment"
              with:
                patient_id: "{{patient_id}}"
                visit_type: "immunization"
                vaccines_due: "{{get-immunizations.overdue_vaccines}}"
            - name: notify-parent
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{parent_phone}}"
                message: "Your child has {{get-immunizations.overdue_count}} overdue vaccinations. An appointment has been scheduled: {{schedule-vaccines.appointment_id}} on {{schedule-vaccines.date}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: immunizations
          path: "/Immunization?patient={{patient_id}}"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-immunizations
              method: GET
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Checks the Kaiser Permanente drug formulary to determine coverage status, tier, and prior authorization requirements for a given medication.

naftiko: "0.5"
info:
  label: "Pharmacy Drug Formulary Lookup"
  description: "Checks the Kaiser Permanente drug formulary to determine coverage status, tier, and prior authorization requirements for a given medication."
  tags:
    - pharmacy
    - formulary
capability:
  exposes:
    - type: mcp
      namespace: pharmacy
      port: 8080
      tools:
        - name: check-formulary
          description: "Look up a drug by NDC code in the formulary. Returns coverage tier and PA requirements."
          inputParameters:
            - name: ndc_code
              in: body
              type: string
              description: "The National Drug Code."
          call: "formulary.get-drug"
          with:
            ndc_code: "{{ndc_code}}"
          outputParameters:
            - name: covered
              type: boolean
              mapping: "$.drug.isCovered"
            - name: tier
              type: string
              mapping: "$.drug.formularyTier"
            - name: requires_pa
              type: boolean
              mapping: "$.drug.requiresPriorAuth"
  consumes:
    - type: http
      namespace: formulary
      baseUri: "https://kp-pharmacy.kaiserpermanente.org/api/v1"
      authentication:
        type: apiKey
        header: "X-API-Key"
        key: "$secrets.formulary_api_key"
      resources:
        - name: drugs
          path: "/formulary/drugs/{{ndc_code}}"
          inputParameters:
            - name: ndc_code
              in: path
          operations:
            - name: get-drug
              method: GET

Monitors physician workload indicators from Workday and scheduling data, generates burnout risk scores, and alerts department leads via Teams when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Physician Burnout Monitoring Pipeline"
  description: "Monitors physician workload indicators from Workday and scheduling data, generates burnout risk scores, and alerts department leads via Teams when thresholds are exceeded."
  tags:
    - physician-wellness
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: burnout-monitoring
      port: 8080
      tools:
        - name: assess-burnout-risk
          description: "Assess physician burnout risk based on workload indicators."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "The department code."
            - name: department_lead_email
              in: body
              type: string
              description: "Department lead email."
          steps:
            - name: get-workload-data
              type: call
              call: "workday.get-department-hours"
              with:
                department_code: "{{department_code}}"
            - name: get-scheduling-data
              type: call
              call: "scheduling.get-department-coverage"
              with:
                department_code: "{{department_code}}"
            - name: alert-leadership
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{department_lead_email}}"
                text: "Burnout risk report for {{department_code}}: Avg hours/week: {{get-workload-data.avg_hours}}. Overtime providers: {{get-workload-data.overtime_count}}. Unfilled shifts: {{get-scheduling-data.unfilled_count}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: hours
          path: "/workers/hours"
          operations:
            - name: get-department-hours
              method: GET
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: coverage
          path: "/departments/{{department_code}}/coverage"
          inputParameters:
            - name: department_code
              in: path
          operations:
            - name: get-department-coverage
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a population health risk score for a patient cohort from Azure Databricks, used by care management teams to prioritize outreach.

naftiko: "0.5"
info:
  label: "Population Health Risk Score"
  description: "Retrieves a population health risk score for a patient cohort from Azure Databricks, used by care management teams to prioritize outreach."
  tags:
    - population-health
    - analytics
    - azure-databricks
capability:
  exposes:
    - type: mcp
      namespace: population-health
      port: 8080
      tools:
        - name: get-risk-score
          description: "Retrieve population health risk scores for a specified patient cohort."
          inputParameters:
            - name: cohort_id
              in: body
              type: string
              description: "The identifier for the patient cohort."
          call: "databricks.run-query"
          with:
            query: "SELECT * FROM risk_scores WHERE cohort_id = '{{cohort_id}}'"
          outputParameters:
            - name: average_risk
              type: string
              mapping: "$.result[0].avg_risk_score"
            - name: high_risk_count
              type: string
              mapping: "$.result[0].high_risk_count"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST

Manages transitions to post-acute care facilities by verifying SNF availability, creating referral packages in SharePoint, transferring records via the health information exchange, and tracking in Salesforce.

naftiko: "0.5"
info:
  label: "Post-Acute Care Transition Pipeline"
  description: "Manages transitions to post-acute care facilities by verifying SNF availability, creating referral packages in SharePoint, transferring records via the health information exchange, and tracking in Salesforce."
  tags:
    - care-transitions
    - post-acute
    - sharepoint
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: post-acute-transition
      port: 8080
      tools:
        - name: coordinate-post-acute-transition
          description: "Coordinate patient transition to post-acute care facility."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: facility_type
              in: body
              type: string
              description: "Post-acute care facility type (SNF, rehab, LTACH)."
            - name: target_facility
              in: body
              type: string
              description: "Target facility name."
          steps:
            - name: check-availability
              type: call
              call: "hie.check-facility-beds"
              with:
                facility_name: "{{target_facility}}"
                facility_type: "{{facility_type}}"
            - name: create-referral-package
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "care-transitions"
                folder_path: "Referrals/{{patient_id}}/{{target_facility}}"
                template: "post_acute_referral"
            - name: transfer-records
              type: call
              call: "hie.send-ccd"
              with:
                patient_id: "{{patient_id}}"
                destination: "{{target_facility}}"
            - name: track-transition
              type: call
              call: "salesforce.create-transition-record"
              with:
                patient_id: "{{patient_id}}"
                destination: "{{target_facility}}"
                facility_type: "{{facility_type}}"
                referral_url: "{{create-referral-package.url}}"
  consumes:
    - type: http
      namespace: hie
      baseUri: "https://kp-hie.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.hie_token"
      resources:
        - name: facilities
          path: "/facilities/availability"
          operations:
            - name: check-facility-beds
              method: GET
        - name: records
          path: "/ccd/send"
          operations:
            - name: send-ccd
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: transitions
          path: "/sobjects/CareTransition__c"
          operations:
            - name: create-transition-record
              method: POST

Triggers a refresh of the clinical outcomes Power BI dataset to ensure dashboards reflect the latest patient data.

naftiko: "0.5"
info:
  label: "Power BI Clinical Dashboard Refresh"
  description: "Triggers a refresh of the clinical outcomes Power BI dataset to ensure dashboards reflect the latest patient data."
  tags:
    - analytics
    - clinical
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: clinical-analytics
      port: 8080
      tools:
        - name: refresh-clinical-dashboard
          description: "Trigger a Power BI dataset refresh for the clinical outcomes dashboard."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset identifier."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

When a patient requests a prescription refill, validates the prescription in Oracle Cloud, checks pharmacy inventory in SAP, and sends a ready notification via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Prescription Refill Orchestrator"
  description: "When a patient requests a prescription refill, validates the prescription in Oracle Cloud, checks pharmacy inventory in SAP, and sends a ready notification via Microsoft Teams."
  tags:
    - pharmacy
    - patient-care
    - oracle-cloud
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pharmacy
      port: 8080
      tools:
        - name: process-refill
          description: "Given a prescription ID and patient ID, validate the prescription, check pharmacy stock, and notify the patient when ready."
          inputParameters:
            - name: prescription_id
              in: body
              type: string
              description: "The prescription identifier."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: pharmacy_location
              in: body
              type: string
              description: "The preferred pharmacy location code."
          steps:
            - name: validate-rx
              type: call
              call: "oracle.get-prescription"
              with:
                prescription_id: "{{prescription_id}}"
            - name: check-stock
              type: call
              call: "sap.check-inventory"
              with:
                medication_code: "{{validate-rx.medication_code}}"
                location: "{{pharmacy_location}}"
            - name: notify-patient
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{validate-rx.patient_email}}"
                text: "Your prescription for {{validate-rx.medication_name}} is ready for pickup at {{pharmacy_location}}. Stock status: {{check-stock.availability}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: prescriptions
          path: "/prescriptions/{{prescription_id}}"
          inputParameters:
            - name: prescription_id
              in: path
          operations:
            - name: get-prescription
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://kp-pharmacy.sap.com/sap/opu/odata/sap/INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/Inventory(MedicationCode='{{medication_code}}',Location='{{location}}')"
          inputParameters:
            - name: medication_code
              in: path
            - name: location
              in: path
          operations:
            - name: check-inventory
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a provider requests prior authorization, retrieves clinical criteria from Oracle Cloud, checks benefit limits in SAP, creates the auth request in Salesforce, and notifies the utilization review team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Prior Authorization Workflow"
  description: "When a provider requests prior authorization, retrieves clinical criteria from Oracle Cloud, checks benefit limits in SAP, creates the auth request in Salesforce, and notifies the utilization review team via Microsoft Teams."
  tags:
    - claims
    - prior-authorization
    - oracle-cloud
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: prior-auth
      port: 8080
      tools:
        - name: submit-prior-auth
          description: "Given a member ID, procedure code, and provider ID, process a prior authorization request across clinical and financial systems."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The health plan member ID."
            - name: procedure_code
              in: body
              type: string
              description: "The CPT or HCPCS procedure code."
            - name: provider_id
              in: body
              type: string
              description: "The requesting provider ID."
            - name: clinical_notes
              in: body
              type: string
              description: "Supporting clinical documentation."
          steps:
            - name: get-criteria
              type: call
              call: "oracle.get-auth-criteria"
              with:
                procedure_code: "{{procedure_code}}"
            - name: check-benefits
              type: call
              call: "sap.check-benefit-limits"
              with:
                member_id: "{{member_id}}"
                procedure_code: "{{procedure_code}}"
            - name: create-auth
              type: call
              call: "salesforce.create-auth-request"
              with:
                member_id: "{{member_id}}"
                procedure_code: "{{procedure_code}}"
                provider_id: "{{provider_id}}"
                clinical_notes: "{{clinical_notes}}"
                criteria_met: "{{get-criteria.criteria_status}}"
                benefit_available: "{{check-benefits.available}}"
            - name: notify-ur-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "utilization-review"
                text: "New prior auth request {{create-auth.auth_number}} for member {{member_id}}, procedure {{procedure_code}}. Criteria met: {{get-criteria.criteria_status}}. Benefit available: {{check-benefits.available}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: auth-criteria
          path: "/authorizationCriteria/{{procedure_code}}"
          inputParameters:
            - name: procedure_code
              in: path
          operations:
            - name: get-auth-criteria
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://kp-claims.sap.com/sap/opu/odata/sap/BENEFITS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: benefit-limits
          path: "/BenefitLimits(MemberId='{{member_id}}',ProcedureCode='{{procedure_code}}')"
          inputParameters:
            - name: member_id
              in: path
            - name: procedure_code
              in: path
          operations:
            - name: check-benefit-limits
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: auth-requests
          path: "/sobjects/PriorAuthorization__c"
          operations:
            - name: create-auth-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a new provider application is received in Salesforce, verifies license with an external registry, creates a credentialing case in ServiceNow, and updates the provider record.

naftiko: "0.5"
info:
  label: "Provider Credentialing Workflow"
  description: "When a new provider application is received in Salesforce, verifies license with an external registry, creates a credentialing case in ServiceNow, and updates the provider record."
  tags:
    - credentialing
    - provider-management
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: provider-credentialing
      port: 8080
      tools:
        - name: process-credentialing
          description: "Given a provider application ID, verify license, create credentialing case, and update provider record."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Salesforce provider application record ID."
            - name: license_number
              in: body
              type: string
              description: "The provider's medical license number."
            - name: state
              in: body
              type: string
              description: "The state of licensure."
          steps:
            - name: get-application
              type: call
              call: "salesforce.get-application"
              with:
                application_id: "{{application_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Credentialing: {{get-application.provider_name}}"
                category: "credentialing"
                license_number: "{{license_number}}"
                state: "{{state}}"
            - name: update-provider
              type: call
              call: "salesforce.update-provider"
              with:
                provider_id: "{{get-application.provider_id}}"
                credentialing_case: "{{create-case.number}}"
                status: "in_review"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: applications
          path: "/sobjects/ProviderApplication__c/{{application_id}}"
          inputParameters:
            - name: application_id
              in: path
          operations:
            - name: get-application
              method: GET
        - name: providers
          path: "/sobjects/Provider__c/{{provider_id}}"
          inputParameters:
            - name: provider_id
              in: path
          operations:
            - name: update-provider
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST

Manages provider peer review by pulling case data from the EHR, assigning reviewers in Salesforce, creating review documents in SharePoint, and tracking completion in Jira.

naftiko: "0.5"
info:
  label: "Provider Peer Review Orchestrator"
  description: "Manages provider peer review by pulling case data from the EHR, assigning reviewers in Salesforce, creating review documents in SharePoint, and tracking completion in Jira."
  tags:
    - quality
    - peer-review
    - salesforce
    - sharepoint
    - jira
capability:
  exposes:
    - type: mcp
      namespace: peer-review
      port: 8080
      tools:
        - name: initiate-peer-review
          description: "Initiate a provider peer review workflow."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The clinical case identifier."
            - name: provider_npi
              in: body
              type: string
              description: "The provider NPI under review."
            - name: reviewer_email
              in: body
              type: string
              description: "The assigned reviewer email."
          steps:
            - name: get-case-data
              type: call
              call: "epic.get-encounter"
              with:
                case_id: "{{case_id}}"
            - name: assign-reviewer
              type: call
              call: "salesforce.create-review-assignment"
              with:
                case_id: "{{case_id}}"
                provider_npi: "{{provider_npi}}"
                reviewer_email: "{{reviewer_email}}"
            - name: create-review-doc
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "quality-management"
                folder_path: "PeerReviews/{{provider_npi}}/{{case_id}}"
                template: "peer_review_form"
            - name: create-tracking-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "QUALITY"
                summary: "Peer review: {{provider_npi}} - Case {{case_id}}"
                assignee: "{{reviewer_email}}"
                description: "Case summary: {{get-case-data.summary}}. Review document: {{create-review-doc.url}}"
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: encounters
          path: "/Encounter/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-encounter
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: reviews
          path: "/sobjects/PeerReview__c"
          operations:
            - name: create-review-assignment
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://kaiserpermanente.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Queries provider scheduling system to return available appointment slots for a given provider and date range.

naftiko: "0.5"
info:
  label: "Provider Schedule Availability"
  description: "Queries provider scheduling system to return available appointment slots for a given provider and date range."
  tags:
    - scheduling
    - provider
capability:
  exposes:
    - type: mcp
      namespace: provider-scheduling
      port: 8080
      tools:
        - name: get-provider-availability
          description: "Retrieve available slots for a provider within a date range."
          inputParameters:
            - name: provider_npi
              in: body
              type: string
              description: "The provider NPI number."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "scheduling.get-slots"
          with:
            provider_npi: "{{provider_npi}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: available_slots
              type: array
              mapping: "$.slots"
  consumes:
    - type: http
      namespace: scheduling
      baseUri: "https://kp-scheduling.kaiserpermanente.org/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: slots
          path: "/providers/{{provider_npi}}/slots"
          inputParameters:
            - name: provider_npi
              in: path
          operations:
            - name: get-slots
              method: GET

Extracts HEDIS quality measure data from Azure Databricks, generates a summary in Google Sheets, and distributes via Microsoft Teams to quality improvement teams.

naftiko: "0.5"
info:
  label: "Quality Measure Reporting Pipeline"
  description: "Extracts HEDIS quality measure data from Azure Databricks, generates a summary in Google Sheets, and distributes via Microsoft Teams to quality improvement teams."
  tags:
    - quality
    - hedis
    - azure-databricks
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-reporting
      port: 8080
      tools:
        - name: generate-hedis-report
          description: "Given a reporting period, extract HEDIS measures, generate a summary spreadsheet, and notify the quality team."
          inputParameters:
            - name: reporting_period
              in: body
              type: string
              description: "The HEDIS reporting period (e.g., 2025-Q4)."
            - name: measure_set
              in: body
              type: string
              description: "The measure set to report (e.g., diabetes-care, preventive)."
          steps:
            - name: extract-measures
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM hedis_measures WHERE period = '{{reporting_period}}' AND measure_set = '{{measure_set}}'"
            - name: create-sheet
              type: call
              call: "google-sheets.create-spreadsheet"
              with:
                title: "HEDIS Report - {{measure_set}} - {{reporting_period}}"
                data: "{{extract-measures.results}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-improvement"
                text: "HEDIS report for {{measure_set}} ({{reporting_period}}) is ready: {{create-sheet.spreadsheet_url}}."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Fetches a radiology report from the PACS system by accession number, returning the radiologist's findings and impressions.

naftiko: "0.5"
info:
  label: "Radiology Report Retrieval"
  description: "Fetches a radiology report from the PACS system by accession number, returning the radiologist's findings and impressions."
  tags:
    - radiology
    - imaging
capability:
  exposes:
    - type: mcp
      namespace: radiology
      port: 8080
      tools:
        - name: get-radiology-report
          description: "Retrieve a radiology report by accession number. Returns findings and impression text."
          inputParameters:
            - name: accession_number
              in: body
              type: string
              description: "The radiology accession number."
          call: "pacs.get-report"
          with:
            accession_number: "{{accession_number}}"
          outputParameters:
            - name: findings
              type: string
              mapping: "$.report.findings"
            - name: impression
              type: string
              mapping: "$.report.impression"
            - name: modality
              type: string
              mapping: "$.report.modality"
  consumes:
    - type: http
      namespace: pacs
      baseUri: "https://kp-pacs.kaiserpermanente.org/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pacs_token"
      resources:
        - name: reports
          path: "/reports/{{accession_number}}"
          inputParameters:
            - name: accession_number
              in: path
          operations:
            - name: get-report
              method: GET

Scores patients for 30-day readmission risk using Azure Machine Learning, creates preventive care tasks in Salesforce, and alerts the care transition team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Readmission Risk Prediction Pipeline"
  description: "Scores patients for 30-day readmission risk using Azure Machine Learning, creates preventive care tasks in Salesforce, and alerts the care transition team via Microsoft Teams."
  tags:
    - population-health
    - readmission
    - azure-machine-learning
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: readmission-prevention
      port: 8080
      tools:
        - name: assess-readmission-risk
          description: "Given a patient ID, score readmission risk, create preventive tasks, and alert the care team."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: discharge_date
              in: body
              type: string
              description: "The discharge date in YYYY-MM-DD format."
          steps:
            - name: score-risk
              type: call
              call: "azureml.score"
              with:
                model: "readmission-risk-v3"
                patient_id: "{{patient_id}}"
                discharge_date: "{{discharge_date}}"
            - name: create-tasks
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Readmission prevention: {{patient_id}}"
                description: "Risk score: {{score-risk.risk_score}}. Recommended interventions: {{score-risk.interventions}}."
                priority: "{{score-risk.priority}}"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "care-transitions"
                text: "Readmission risk alert for patient {{patient_id}} (discharged {{discharge_date}}). Risk score: {{score-risk.risk_score}}. Task created: {{create-tasks.task_id}}."
  consumes:
    - type: http
      namespace: azureml
      baseUri: "https://kp-ml.eastus.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a primary care provider creates a referral in Salesforce, validates insurance eligibility in SAP, finds an available specialist in Workday, and notifies the patient via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Referral Processing Pipeline"
  description: "When a primary care provider creates a referral in Salesforce, validates insurance eligibility in SAP, finds an available specialist in Workday, and notifies the patient via Microsoft Teams."
  tags:
    - patient-care
    - referrals
    - salesforce
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: referral-management
      port: 8080
      tools:
        - name: process-referral
          description: "Given a referral ID, validate insurance coverage, find a specialist, and notify the patient."
          inputParameters:
            - name: referral_id
              in: body
              type: string
              description: "The Salesforce referral record ID."
            - name: patient_email
              in: body
              type: string
              description: "The patient email for notification."
            - name: specialty
              in: body
              type: string
              description: "The medical specialty required."
          steps:
            - name: get-referral
              type: call
              call: "salesforce.get-referral"
              with:
                referral_id: "{{referral_id}}"
            - name: check-eligibility
              type: call
              call: "sap.check-eligibility"
              with:
                member_id: "{{get-referral.member_id}}"
                service_type: "{{specialty}}"
            - name: find-specialist
              type: call
              call: "workday.search-providers"
              with:
                specialty: "{{specialty}}"
                region: "{{get-referral.region}}"
            - name: notify-patient
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{patient_email}}"
                text: "Your referral to {{specialty}} has been approved. Specialist: {{find-specialist.provider_name}}. Please call {{find-specialist.phone}} to schedule."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: referrals
          path: "/sobjects/Referral__c/{{referral_id}}"
          inputParameters:
            - name: referral_id
              in: path
          operations:
            - name: get-referral
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://kp-claims.sap.com/sap/opu/odata/sap/ELIGIBILITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: eligibility
          path: "/Eligibility(MemberId='{{member_id}}',ServiceType='{{service_type}}')"
          inputParameters:
            - name: member_id
              in: path
            - name: service_type
              in: path
          operations:
            - name: check-eligibility
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: providers
          path: "/workers?specialty={{specialty}}&region={{region}}"
          inputParameters:
            - name: specialty
              in: query
            - name: region
              in: query
          operations:
            - name: search-providers
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Manages claim denials by pulling denial data from SAP, categorizing by denial reason in Databricks, creating appeal tasks in Salesforce, and reporting trends in Power BI.

naftiko: "0.5"
info:
  label: "Revenue Cycle Denials Management Pipeline"
  description: "Manages claim denials by pulling denial data from SAP, categorizing by denial reason in Databricks, creating appeal tasks in Salesforce, and reporting trends in Power BI."
  tags:
    - revenue-cycle
    - denials
    - sap
    - azure-databricks
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: denials-management
      port: 8080
      tools:
        - name: process-denial-batch
          description: "Process a batch of claim denials and create appeal workflows."
          inputParameters:
            - name: batch_date
              in: body
              type: string
              description: "The denial batch date in YYYY-MM-DD format."
            - name: payer_code
              in: body
              type: string
              description: "The payer code to filter denials."
          steps:
            - name: get-denials
              type: call
              call: "sap.get-denials"
              with:
                batch_date: "{{batch_date}}"
                payer_code: "{{payer_code}}"
            - name: categorize-denials
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT denial_reason, COUNT(*) as count, SUM(amount) as total FROM denials WHERE batch_date = '{{batch_date}}' GROUP BY denial_reason"
            - name: create-appeal-tasks
              type: call
              call: "salesforce.bulk-create"
              with:
                object: "DenialAppeal__c"
                records: "{{get-denials.appealable_claims}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "denial-trends"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-sap.kaiserpermanente.org/sap/opu/odata/sap/CLAIMS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: denials
          path: "/ClaimDenials"
          operations:
            - name: get-denials
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kp-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: bulk
          path: "/composite/sobjects"
          operations:
            - name: bulk-create
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Retrieves a patient case from Salesforce by case number, returning status, subject, priority, and assigned owner.

naftiko: "0.5"
info:
  label: "Salesforce Patient Case Lookup"
  description: "Retrieves a patient case from Salesforce by case number, returning status, subject, priority, and assigned owner."
  tags:
    - patient-care
    - case-management
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: patient-cases
      port: 8080
      tools:
        - name: get-patient-case
          description: "Look up a patient case in Salesforce by case number."
          inputParameters:
            - name: case_number
              in: body
              type: string
              description: "The Salesforce case number."
          call: "salesforce.get-case"
          with:
            case_number: "{{case_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: subject
              type: string
              mapping: "$.Subject"
            - name: priority
              type: string
              mapping: "$.Priority"
            - name: owner
              type: string
              mapping: "$.Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/query/?q=SELECT+Id,Status,Subject,Priority,Owner.Name+FROM+Case+WHERE+CaseNumber='{{case_number}}'"
          inputParameters:
            - name: case_number
              in: query
          operations:
            - name: get-case
              method: GET

Retrieves a travel expense report from SAP Concur by report ID, returning total amount, approval status, and expense line items.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Lookup"
  description: "Retrieves a travel expense report from SAP Concur by report ID, returning total amount, approval status, and expense line items."
  tags:
    - finance
    - travel
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: travel-expenses
      port: 8080
      tools:
        - name: get-expense-report
          description: "Look up a SAP Concur expense report by report ID."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          call: "concur.get-report"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: total_amount
              type: string
              mapping: "$.Total"
            - name: approval_status
              type: string
              mapping: "$.ApprovalStatusName"
            - name: submit_date
              type: string
              mapping: "$.SubmitDate"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET

Checks the payment status of a vendor invoice in SAP, returning payment date, amount, and clearing document number.

naftiko: "0.5"
info:
  label: "SAP Vendor Payment Status"
  description: "Checks the payment status of a vendor invoice in SAP, returning payment date, amount, and clearing document number."
  tags:
    - finance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up vendor invoice payment status in SAP by invoice number."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice document number."
          call: "sap.get-invoice-payment"
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: payment_status
              type: string
              mapping: "$.d.PaymentStatus"
            - name: payment_date
              type: string
              mapping: "$.d.PaymentDate"
            - name: clearing_doc
              type: string
              mapping: "$.d.ClearingDocument"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-sap.kaiserpermanente.org/sap/opu/odata/sap/FI_VENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/VendorInvoices('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice-payment
              method: GET

Monitors real-time patient vitals from the EHR, scores sepsis risk via the ML model in Azure Machine Learning, creates alerts in ServiceNow, and pages the rapid response team via Teams.

naftiko: "0.5"
info:
  label: "Sepsis Early Warning Pipeline"
  description: "Monitors real-time patient vitals from the EHR, scores sepsis risk via the ML model in Azure Machine Learning, creates alerts in ServiceNow, and pages the rapid response team via Teams."
  tags:
    - clinical-decision-support
    - sepsis
    - azure-machine-learning
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sepsis-warning
      port: 8080
      tools:
        - name: evaluate-sepsis-risk
          description: "Evaluate sepsis risk and trigger rapid response if indicated."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: rapid_response_email
              in: body
              type: string
              description: "Rapid response team email."
          steps:
            - name: get-vitals
              type: call
              call: "epic.get-vitals"
              with:
                patient_id: "{{patient_id}}"
            - name: score-sepsis-risk
              type: call
              call: "azureml.score"
              with:
                model_name: "sepsis-risk-model"
                features: "{{get-vitals.vital_signs}}"
            - name: create-alert
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Sepsis risk alert - Patient {{patient_id}}"
                urgency: "1"
                description: "Sepsis risk score: {{score-sepsis-risk.risk_score}}. Patient vitals: HR={{get-vitals.heart_rate}}, Temp={{get-vitals.temperature}}, WBC={{get-vitals.wbc}}."
            - name: page-rrt
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{rapid_response_email}}"
                text: "SEPSIS ALERT: Patient {{patient_id}}, risk score {{score-sepsis-risk.risk_score}}. Incident: {{create-alert.number}}. Immediate assessment required."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: vitals
          path: "/Observation?patient={{patient_id}}&category=vital-signs&_sort=-date&_count=1"
          inputParameters:
            - name: patient_id
              in: path
          operations:
            - name: get-vitals
              method: GET
    - type: http
      namespace: azureml
      baseUri: "https://kp-ml.westus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: models
          path: "/score"
          operations:
            - name: score
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a ServiceNow incident by number and returns priority, status, assigned group, and resolution notes.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns priority, status, assigned group, and resolution notes."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number and return its current state."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kaiserpermanente.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Fetches a clinical document from SharePoint by document ID and returns the file URL, last modified date, and author.

naftiko: "0.5"
info:
  label: "SharePoint Clinical Document Retrieval"
  description: "Fetches a clinical document from SharePoint by document ID and returns the file URL, last modified date, and author."
  tags:
    - clinical
    - documents
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: clinical-docs
      port: 8080
      tools:
        - name: get-clinical-document
          description: "Retrieve a clinical document from SharePoint by document ID."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID."
          call: "sharepoint.get-document"
          with:
            document_id: "{{document_id}}"
          outputParameters:
            - name: file_url
              type: string
              mapping: "$.webUrl"
            - name: last_modified
              type: string
              mapping: "$.lastModifiedDateTime"
            - name: author
              type: string
              mapping: "$.createdBy.user.displayName"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/kp-clinical/drive/items/{{document_id}}"
          inputParameters:
            - name: document_id
              in: path
          operations:
            - name: get-document
              method: GET

Searches Splunk for security events matching a specified query, returning matching log entries and event counts.

naftiko: "0.5"
info:
  label: "Splunk Security Event Search"
  description: "Searches Splunk for security events matching a specified query, returning matching log entries and event counts."
  tags:
    - security
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: security-events
      port: 8080
      tools:
        - name: search-security-events
          description: "Run a Splunk search for security events. Returns matching events."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The Splunk SPL query string."
            - name: time_range
              in: body
              type: string
              description: "Time range for the search (e.g., -24h)."
          call: "splunk.run-search"
          with:
            search: "{{search_query}}"
            earliest_time: "{{time_range}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
            - name: event_count
              type: integer
              mapping: "$.resultCount"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://kp-splunk.kaiserpermanente.org:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: run-search
              method: POST

Retrieves a medical supply purchase order from SAP by PO number, returning vendor, total value, delivery status, and expected arrival date.

naftiko: "0.5"
info:
  label: "Supply Chain Purchase Order Status"
  description: "Retrieves a medical supply purchase order from SAP by PO number, returning vendor, total value, delivery status, and expected arrival date."
  tags:
    - supply-chain
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: get-supply-po
          description: "Look up a medical supply purchase order in SAP by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: delivery_status
              type: string
              mapping: "$.d.DeliveryStatus"
            - name: expected_date
              type: string
              mapping: "$.d.ExpectedDeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-supply.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Prepares for scheduled surgeries by verifying pre-op labs in the EHR, confirming equipment availability in Oracle, notifying the surgical team via Teams, and creating the pre-op checklist in SharePoint.

naftiko: "0.5"
info:
  label: "Surgical Scheduling Prep Orchestrator"
  description: "Prepares for scheduled surgeries by verifying pre-op labs in the EHR, confirming equipment availability in Oracle, notifying the surgical team via Teams, and creating the pre-op checklist in SharePoint."
  tags:
    - surgery
    - scheduling
    - oracle
    - microsoft-teams
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: surgical-prep
      port: 8080
      tools:
        - name: prepare-surgery
          description: "Orchestrate pre-surgical preparation across multiple systems."
          inputParameters:
            - name: surgery_id
              in: body
              type: string
              description: "The scheduled surgery identifier."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: surgical_team_email
              in: body
              type: string
              description: "Surgical team distribution list email."
          steps:
            - name: verify-preop-labs
              type: call
              call: "epic.get-lab-results"
              with:
                patient_id: "{{patient_id}}"
                category: "pre-operative"
            - name: check-equipment
              type: call
              call: "oracle.check-equipment"
              with:
                surgery_id: "{{surgery_id}}"
            - name: create-checklist
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "surgical-services"
                folder_path: "PreOpChecklists/{{surgery_id}}"
                template: "preop_checklist"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{surgical_team_email}}"
                text: "Surgery {{surgery_id}} prep complete. Pre-op labs: {{verify-preop-labs.status}}. Equipment: {{check-equipment.status}}. Checklist: {{create-checklist.url}}."
  consumes:
    - type: http
      namespace: epic
      baseUri: "https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4"
      authentication:
        type: bearer
        token: "$secrets.epic_token"
      resources:
        - name: labs
          path: "/DiagnosticReport?patient={{patient_id}}&category={{category}}"
          inputParameters:
            - name: patient_id
              in: path
            - name: category
              in: path
          operations:
            - name: get-lab-results
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: equipment
          path: "/surgicalEquipment/{{surgery_id}}"
          inputParameters:
            - name: surgery_id
              in: path
          operations:
            - name: check-equipment
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Tableau dashboard embed URL for a specific clinical workbook, used to embed dashboards in internal portals.

naftiko: "0.5"
info:
  label: "Tableau Clinical Dashboard Link"
  description: "Retrieves a Tableau dashboard embed URL for a specific clinical workbook, used to embed dashboards in internal portals."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: tableau-dashboards
      port: 8080
      tools:
        - name: get-dashboard-url
          description: "Retrieve the embed URL for a Tableau clinical dashboard by workbook name."
          inputParameters:
            - name: workbook_name
              in: body
              type: string
              description: "The Tableau workbook name."
          call: "tableau.get-workbook"
          with:
            workbook_name: "{{workbook_name}}"
          outputParameters:
            - name: embed_url
              type: string
              mapping: "$.workbook.contentUrl"
            - name: updated_at
              type: string
              mapping: "$.workbook.updatedAt"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://kp-tableau.kaiserpermanente.org/api/3.14"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}"
          inputParameters:
            - name: workbook_name
              in: query
          operations:
            - name: get-workbook
              method: GET

Triggers a data extract refresh for operational metrics dashboards in Tableau Server.

naftiko: "0.5"
info:
  label: "Tableau Operational Metrics Refresh"
  description: "Triggers a data extract refresh for operational metrics dashboards in Tableau Server."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: tableau-ops
      port: 8080
      tools:
        - name: refresh-ops-dashboard
          description: "Trigger a Tableau data extract refresh for an operational dashboard."
          inputParameters:
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau datasource ID."
          call: "tableau.refresh-extract"
          with:
            datasource_id: "{{datasource_id}}"
          outputParameters:
            - name: job_id
              type: string
              mapping: "$.job.id"
            - name: status
              type: string
              mapping: "$.job.status"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://kp-tableau.kaiserpermanente.org/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/kp-site/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

When a telehealth visit is scheduled, creates a Zoom meeting, sends the link to the patient via Microsoft Teams, and logs the visit in Salesforce.

naftiko: "0.5"
info:
  label: "Telehealth Visit Orchestrator"
  description: "When a telehealth visit is scheduled, creates a Zoom meeting, sends the link to the patient via Microsoft Teams, and logs the visit in Salesforce."
  tags:
    - telehealth
    - patient-care
    - zoom
    - microsoft-teams
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: telehealth
      port: 8080
      tools:
        - name: setup-telehealth-visit
          description: "Given patient and provider details, create a Zoom meeting, notify the patient, and log the visit."
          inputParameters:
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: patient_email
              in: body
              type: string
              description: "The patient email address."
            - name: provider_name
              in: body
              type: string
              description: "The provider name."
            - name: visit_time
              in: body
              type: string
              description: "The scheduled visit time in ISO 8601 format."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Telehealth Visit - {{provider_name}}"
                start_time: "{{visit_time}}"
                duration: 30
            - name: notify-patient
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{patient_email}}"
                text: "Your telehealth visit with {{provider_name}} is scheduled for {{visit_time}}. Join here: {{create-meeting.join_url}}"
            - name: log-visit
              type: call
              call: "salesforce.create-visit-record"
              with:
                patient_id: "{{patient_id}}"
                provider_name: "{{provider_name}}"
                visit_time: "{{visit_time}}"
                zoom_link: "{{create-meeting.join_url}}"
                visit_type: "telehealth"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: visit-records
          path: "/sobjects/Visit__c"
          operations:
            - name: create-visit-record
              method: POST

Monitors telemedicine visit quality by collecting Zoom meeting metrics, correlating with patient satisfaction from Salesforce, and generating quality reports in Google Sheets.

naftiko: "0.5"
info:
  label: "Telemedicine Visit Quality Pipeline"
  description: "Monitors telemedicine visit quality by collecting Zoom meeting metrics, correlating with patient satisfaction from Salesforce, and generating quality reports in Google Sheets."
  tags:
    - telehealth
    - quality
    - zoom
    - salesforce
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: telehealth-quality
      port: 8080
      tools:
        - name: assess-visit-quality
          description: "Assess telemedicine visit quality across technical and patient satisfaction metrics."
          inputParameters:
            - name: meeting_id
              in: body
              type: string
              description: "The Zoom meeting ID."
            - name: patient_id
              in: body
              type: string
              description: "The patient medical record number."
            - name: report_spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets report spreadsheet ID."
          steps:
            - name: get-meeting-quality
              type: call
              call: "zoom.get-meeting-quality"
              with:
                meeting_id: "{{meeting_id}}"
            - name: get-satisfaction
              type: call
              call: "salesforce.get-survey-response"
              with:
                patient_id: "{{patient_id}}"
                meeting_id: "{{meeting_id}}"
            - name: append-report
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "{{report_spreadsheet_id}}"
                range: "QualityData!A:F"
                values: "{{meeting_id}},{{get-meeting-quality.audio_quality}},{{get-meeting-quality.video_quality}},{{get-meeting-quality.connection_issues}},{{get-satisfaction.rating}},{{get-satisfaction.comments}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/metrics/meetings/{{meeting_id}}/participants"
          inputParameters:
            - name: meeting_id
              in: path
          operations:
            - name: get-meeting-quality
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kaiserpermanente.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: surveys
          path: "/sobjects/SurveyResponse__c"
          operations:
            - name: get-survey-response
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

When a vendor invoice arrives, validates against the SAP purchase order, creates a payment request in Oracle Cloud, and notifies accounts payable via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "When a vendor invoice arrives, validates against the SAP purchase order, creates a payment request in Oracle Cloud, and notifies accounts payable via Microsoft Teams."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle-cloud
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: invoice-processing
      port: 8080
      tools:
        - name: process-invoice
          description: "Given an invoice and PO number, validate, create payment request, and notify AP."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: amount
              in: body
              type: string
              description: "The invoice amount."
          steps:
            - name: validate-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: create-payment
              type: call
              call: "oracle.create-payment-request"
              with:
                invoice_number: "{{invoice_number}}"
                po_number: "{{po_number}}"
                amount: "{{amount}}"
                vendor: "{{validate-po.Supplier.CompanyName}}"
            - name: notify-ap
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "accounts-payable"
                text: "Invoice {{invoice_number}} processed for PO {{po_number}}. Amount: {{amount}}. Vendor: {{validate-po.Supplier.CompanyName}}. Payment request: {{create-payment.request_id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kp-supply.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://kp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payment-requests
          path: "/paymentRequests"
          operations:
            - name: create-payment-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves an employee's current benefits enrollment from Workday, including medical plan, dental plan, and enrollment status.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Lookup"
  description: "Retrieves an employee's current benefits enrollment from Workday, including medical plan, dental plan, and enrollment status."
  tags:
    - hr
    - benefits
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-benefits
      port: 8080
      tools:
        - name: get-benefits-enrollment
          description: "Look up an employee's benefits enrollment in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-benefits"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: medical_plan
              type: string
              mapping: "$.benefits.medicalPlan"
            - name: dental_plan
              type: string
              mapping: "$.benefits.dentalPlan"
            - name: enrollment_status
              type: string
              mapping: "$.benefits.enrollmentStatus"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/workers/{{worker_id}}/benefits"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-benefits
              method: GET

Looks up an employee in Workday by employee ID and returns name, department, title, and contact information.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Looks up an employee in Workday by employee ID and returns name, department, title, and contact information."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee by Workday worker ID. Returns name, department, title, and email."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.descriptor"
            - name: department
              type: string
              mapping: "$.worker.primarySupervisoryOrganization.descriptor"
            - name: title
              type: string
              mapping: "$.worker.businessTitle"
            - name: email
              type: string
              mapping: "$.worker.primaryWorkEmail"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves an employee's current time-off balance from Workday, including PTO, sick leave, and floating holidays.

naftiko: "0.5"
info:
  label: "Workday Time Off Balance Lookup"
  description: "Retrieves an employee's current time-off balance from Workday, including PTO, sick leave, and floating holidays."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: time-off
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Look up time-off balances by employee ID. Returns PTO, sick, and holiday balances."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-balance"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: pto_balance
              type: number
              mapping: "$.timeOffBalances[?(@.type=='PTO')].balance"
            - name: sick_balance
              type: number
              mapping: "$.timeOffBalances[?(@.type=='Sick')].balance"
            - name: holiday_balance
              type: number
              mapping: "$.timeOffBalances[?(@.type=='FloatingHoliday')].balance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-off
          path: "/workers/{{employee_id}}/timeOffBalance"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-balance
              method: GET

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assigned agent.

naftiko: "0.5"
info:
  label: "Zendesk Patient Support Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assigned agent."
  tags:
    - patient-support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: patient-support
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Look up a Zendesk support ticket by ticket ID."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assignee
              type: string
              mapping: "$.ticket.assignee_id"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://kaiserpermanente.zendesk.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.zendesk_user"
        password: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET