Kaiser Permanente Capabilities
Naftiko 0.5 capability definitions for Kaiser Permanente - 100 capabilities showing integration workflows and service orchestrations.
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}}®ion={{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