Bristol Myers Squibb Capabilities
Naftiko 0.5 capability definitions for Bristol Myers Squibb - 100 capabilities showing integration workflows and service orchestrations.
Retrieves adverse event case details from the BMS pharmacovigilance database.
naftiko: "0.5"
info:
title: Adverse Event Lookup
version: "1.0"
description: Retrieves adverse event case details from the BMS pharmacovigilance database.
tags: [pharmacovigilance, clinical, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_adverse_event
description: Returns AE case details including seriousness and causality assessment.
inputParameters:
- name: case_id
in: query
required: true
type: string
call:
operationId: getAECase
input:
caseId: "{{case_id}}"
outputParameters:
- name: seriousness
type: string
- name: causality
type: string
- name: reporter_type
type: string
consumes:
- type: http
baseUri: https://api.bms.com/pharmacovigilance/v1
authentication:
type: bearer
token: $secrets.bms_pv_token
resources:
- path: /cases/{caseId}
operations:
- id: getAECase
method: GET
Processes a new adverse event report, submits to FDA, and notifies the pharmacovigilance team.
naftiko: "0.5"
info:
title: Adverse Event Reporting Workflow
version: "1.0"
description: Processes a new adverse event report, submits to FDA, and notifies the pharmacovigilance team.
tags: [pharmacovigilance, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_ae_report
description: Creates AE case, submits to FDA, notifies PV team.
inputParameters:
- name: patient_id
in: body
required: true
type: string
- name: drug_code
in: body
required: true
type: string
- name: event_description
in: body
required: true
type: string
steps:
- name: create-case
call:
operationId: createAECase
input:
patientId: "{{patient_id}}"
drugCode: "{{drug_code}}"
description: "{{event_description}}"
- name: submit-fda
call:
operationId: submitFDAReport
input:
caseId: "{{create-case.case_id}}"
seriousness: "{{create-case.seriousness}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "pharmacovigilance"
message: "AE case {{create-case.case_id}} submitted to FDA."
consumes:
- type: http
baseUri: https://api.bms.com/pharmacovigilance/v1
authentication:
type: bearer
token: $secrets.bms_pv_token
resources:
- path: /cases
operations:
- id: createAECase
method: POST
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /fda/reports
operations:
- id: submitFDAReport
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team.
naftiko: "0.5"
info:
label: "AI-Assisted Scientific Literature Summarizer"
description: "Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team."
tags:
- ai
- automation
- anthropic
- snowflake
- medical-affairs
- life-sciences
capability:
exposes:
- type: mcp
namespace: ai-research
port: 8080
tools:
- name: summarize-literature
description: "Given a BMS compound name and list of PubMed article IDs, generate structured clinical evidence summaries via Anthropic Claude and store in Snowflake for medical affairs access. Use for competitive intelligence and evidence synthesis."
inputParameters:
- name: compound_name
in: body
type: string
description: "The BMS drug or compound name, e.g. 'Opdivo', 'Revlimid'."
- name: article_ids
in: body
type: string
description: "Comma-separated PubMed article IDs to summarize."
steps:
- name: generate-summary
type: call
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 2048
system: "You are a pharmaceutical research summarizer. Create structured summaries with sections for efficacy, safety, and patient population."
content: "Summarize the following clinical evidence for {{compound_name}}: article IDs {{article_ids}}"
- name: store-summaries
type: call
call: "snowflake.insert-rows"
with:
table: "MEDICAL_AFFAIRS.LITERATURE_SUMMARIES"
data: "{{generate-summary.content}}"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://bms.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: rows
path: "/databases/bms/schemas/medical_affairs/tables/{{table}}/insertRows"
inputParameters:
- name: table
in: path
operations:
- name: insert-rows
method: POST
Auto-scales AKS.
naftiko: "0.5"
info:
title: Azure BMS Scaler
version: "1.0"
description: Auto-scales AKS.
tags: [infrastructure, observability, healthcare, azure]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: scale_bms
description: Checks, scales, alerts.
inputParameters:
- name: cluster
in: body
required: true
type: string
- name: threshold
in: body
required: true
type: number
steps:
- name: check
call:
operationId: queryMetric
input:
query: "avg:kubernetes.cpu{cluster:{{cluster}}}"
- name: scale
call:
operationId: scaleNodes
input:
cluster: "{{cluster}}"
- name: alert
call:
operationId: sendTeamsMessage
input:
channelId: "platform"
message: "Scaled."
consumes:
- type: http
baseUri: https://api.datadoghq.com/api/v1
authentication:
type: apikey
name: DD-API-KEY
in: header
key: $secrets.datadog_api_key
resources:
- path: /metrics/query
operations:
- id: queryMetric
method: GET
- type: http
baseUri: https://management.azure.com/subscriptions/bms
authentication:
type: bearer
token: $secrets.azure_mgmt_token
resources:
- path: /resourceGroups/research/providers/Microsoft.ContainerService/managedClusters/{cluster}
operations:
- id: scaleNodes
method: PATCH
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Responder"
description: "When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel."
tags:
- cloud
- finops
- azure
- jira
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: finops-ops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID, anomaly detection alert, and the owning team name, retrieve cost breakdown details, create a Jira ticket, and alert the FinOps channel in Teams. Use when cloud spend exceeds expected variance."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the anomaly was detected."
- name: anomaly_amount
in: body
type: number
description: "The dollar amount above the expected baseline."
- name: team_name
in: body
type: string
description: "The owning team name for Jira routing."
steps:
- name: get-cost-detail
type: call
call: "azure.get-subscription-costs"
with:
subscription_id: "{{subscription_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "FINOPS"
issuetype: "Task"
summary: "Azure cost anomaly: {{subscription_id}} exceeded by ${{anomaly_amount}}"
description: "Subscription: {{subscription_id}}\nOverage: ${{anomaly_amount}}\nTeam: {{team_name}}"
- name: notify-finops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.finops_channel_id"
text: "Azure cost anomaly on subscription {{subscription_id}}: ${{anomaly_amount}} over baseline. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: subscription-costs
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-subscription-costs
method: POST
- type: http
namespace: jira
baseUri: "https://bms.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
- 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: post-channel-message
method: POST
Monitors batch processing jobs.
naftiko: "0.5"
info:
title: BMS Batch Monitor
version: "1.0"
description: Monitors batch processing jobs.
tags: [manufacturing, itsm, healthcare, observability]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: monitor_bms_batch
description: Checks, incidents, alerts.
inputParameters:
- name: batch
in: body
required: true
type: string
- name: time
in: body
required: true
type: string
steps:
- name: check
call:
operationId: queryMetric
input:
query: "avg:batch.status{job:{{batch}}}"
- name: incident
call:
operationId: createIncident
input:
short_description: "Batch {{batch}} failure"
urgency: "1"
- name: alert
call:
operationId: sendTeamsMessage
input:
channelId: "mfg-ops"
message: "Batch failed."
consumes:
- type: http
baseUri: https://api.datadoghq.com/api/v1
authentication:
type: apikey
name: DD-API-KEY
in: header
key: $secrets.datadog_api_key
resources:
- path: /metrics/query
operations:
- id: queryMetric
method: GET
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Checks the storage status and availability of a biobank sample.
naftiko: "0.5"
info:
title: BMS Biobank Sample Status
version: "1.0"
description: Checks the storage status and availability of a biobank sample.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_biobank_sample
description: Returns sample location, condition, and availability.
inputParameters:
- name: sample_id
in: query
required: true
type: string
call:
operationId: getSampleStatus
input:
sampleId: "{{sample_id}}"
outputParameters:
- name: location
type: string
- name: condition
type: string
- name: available
type: boolean
consumes:
- type: http
baseUri: https://api.bms.com/biobank/v1
authentication:
type: bearer
token: $secrets.bms_biobank_token
resources:
- path: /samples/{sampleId}
operations:
- id: getSampleStatus
method: GET
Reconciles clinical data management datasets between EDC and central lab.
naftiko: "0.5"
info:
title: BMS CDM Data Reconciliation
version: "1.0"
description: Reconciles clinical data management datasets between EDC and central lab.
tags: [clinical, analytics, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: reconcile_cdm_data
description: Queries discrepancies and creates tickets.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: visit
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT subject, field FROM cdm_discrepancies WHERE trial='{{trial_id}}'"
- name: ticket
call:
operationId: createIssue
input:
project: "CDM"
summary: "Discrepancy in {{trial_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-data"
message: "Discrepancies found."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/rest/api/3
authentication:
type: basic
username: $secrets.jira_user
password: $secrets.jira_api_token
resources:
- path: /issue
operations:
- id: createIssue
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Analyzes adverse event data for safety signals and escalates to the safety committee.
naftiko: "0.5"
info:
title: BMS Clinical Safety Signal Detection
version: "1.0"
description: Analyzes adverse event data for safety signals and escalates to the safety committee.
tags: [pharmacovigilance, analytics, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: detect_safety_signals
description: Queries AE data, detects signals, escalates.
inputParameters:
- name: drug_code
in: body
required: true
type: string
- name: analysis_period
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT event_type, count, expected_rate FROM ae_signals WHERE drug='{{drug_code}}' AND period='{{analysis_period}}'"
- name: escalate
call:
operationId: createIncident
input:
short_description: "Safety signal detected for {{drug_code}}"
urgency: "1"
category: "pharmacovigilance"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "safety-committee"
message: "Safety signal for {{drug_code}} detected. Review required."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Activates a new clinical trial site by completing regulatory documents, training, and system setup.
naftiko: "0.5"
info:
title: BMS Clinical Site Activation
version: "1.0"
description: Activates a new clinical trial site by completing regulatory documents, training, and system setup.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: activate_clinical_site
description: Submits documents, assigns training, sets up systems.
inputParameters:
- name: site_id
in: body
required: true
type: string
- name: trial_id
in: body
required: true
type: string
steps:
- name: submit-docs
call:
operationId: submitSiteDocuments
input:
siteId: "{{site_id}}"
trialId: "{{trial_id}}"
- name: assign-training
call:
operationId: assignSiteTraining
input:
siteId: "{{site_id}}"
trialId: "{{trial_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-ops"
message: "Site {{site_id}} activation initiated for trial {{trial_id}}."
consumes:
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /sites/{siteId}/documents
operations:
- id: submitSiteDocuments
method: POST
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /sites/{siteId}/training
operations:
- id: assignSiteTraining
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves enrollment and performance metrics for a clinical trial site.
naftiko: "0.5"
info:
title: BMS Clinical Site Performance
version: "1.0"
description: Retrieves enrollment and performance metrics for a clinical trial site.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_site_performance
description: Returns site enrollment rate and protocol deviations.
inputParameters:
- name: site_id
in: query
required: true
type: string
- name: trial_id
in: query
required: true
type: string
call:
operationId: getSitePerformance
input:
siteId: "{{site_id}}"
trialId: "{{trial_id}}"
outputParameters:
- name: enrollment_rate
type: number
- name: deviations
type: integer
- name: screen_fail_rate
type: number
consumes:
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /sites/{siteId}/performance
operations:
- id: getSitePerformance
method: GET
Forecasts clinical trial drug supply needs and triggers manufacturing orders.
naftiko: "0.5"
info:
title: BMS Clinical Supply Forecast
version: "1.0"
description: Forecasts clinical trial drug supply needs and triggers manufacturing orders.
tags: [clinical, supply-chain, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: forecast_clinical_supply
description: Queries enrollment, forecasts demand, creates orders.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: forecast_months
in: body
required: true
type: integer
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT site_id, enrolled, projected FROM trial_enrollment WHERE trial='{{trial_id}}'"
- name: forecast
call:
operationId: forecastDemand
input:
trialId: "{{trial_id}}"
enrollment: "{{query.results}}"
months: "{{forecast_months}}"
- name: order
call:
operationId: createSupplyOrder
input:
trialId: "{{trial_id}}"
quantity: "{{forecast.required_units}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /supply/forecast
operations:
- id: forecastDemand
method: POST
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /orders
operations:
- id: createSupplyOrder
method: POST
Monitors cold chain temperature during drug shipment and alerts on excursions.
naftiko: "0.5"
info:
title: BMS Cold Chain Monitoring
version: "1.0"
description: Monitors cold chain temperature during drug shipment and alerts on excursions.
tags: [supply-chain, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: monitor_cold_chain
description: Checks temp, creates deviation, alerts.
inputParameters:
- name: shipment_id
in: body
required: true
type: string
- name: max_temp
in: body
required: true
type: number
steps:
- name: check
call:
operationId: getShipmentTemp
input:
shipmentId: "{{shipment_id}}"
- name: deviation
call:
operationId: createDeviation
input:
type: "temperature_excursion"
shipment: "{{shipment_id}}"
temp: "{{check.max_recorded}}"
- name: alert
call:
operationId: sendTeamsMessage
input:
channelId: "supply-chain-quality"
message: "Temperature excursion on shipment {{shipment_id}}: {{check.max_recorded}}C."
consumes:
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /shipments/{shipmentId}/temperature
operations:
- id: getShipmentTemp
method: GET
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /deviations
operations:
- id: createDeviation
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Refreshes commercial performance analytics and notifies the commercial team.
naftiko: "0.5"
info:
title: BMS Commercial Performance Dashboard
version: "1.0"
description: Refreshes commercial performance analytics and notifies the commercial team.
tags: [commercial, analytics, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: refresh_commercial
description: Queries sales, refreshes, notifies.
inputParameters:
- name: product
in: body
required: true
type: string
- name: quarter
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT territory, revenue, market_share FROM sales_data WHERE product='{{product}}' AND quarter='{{quarter}}'"
- name: refresh
call:
operationId: refreshDataset
input:
dataset: "commercial-perf"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "commercial-analytics"
message: "Commercial dashboard refreshed for {{product}}."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.powerbi.com/v1.0/myorg
authentication:
type: bearer
token: $secrets.powerbi_token
resources:
- path: /groups/commercial/datasets/commercial-perf/refreshes
operations:
- id: refreshDataset
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Tracks companion diagnostic test results and links to treatment decisions.
naftiko: "0.5"
info:
title: BMS Companion Diagnostic Tracker
version: "1.0"
description: Tracks companion diagnostic test results and links to treatment decisions.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: track_companion_dx
description: Queries results, links to treatment, notifies.
inputParameters:
- name: patient_id
in: body
required: true
type: string
- name: test_type
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT result, biomarker_status FROM companion_dx WHERE patient_id='{{patient_id}}' AND test='{{test_type}}'"
- name: update
call:
operationId: updateTreatmentPlan
input:
patientId: "{{patient_id}}"
biomarkerStatus: "{{query.results}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "precision-medicine"
message: "Companion dx for patient {{patient_id}}: {{query.results}}."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/patient-services/v1
authentication:
type: bearer
token: $secrets.bms_patient_token
resources:
- path: /patients/{patientId}/treatment-plan
operations:
- id: updateTreatmentPlan
method: PATCH
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Monitors competitive pipeline.
naftiko: "0.5"
info:
title: BMS Competitive Intelligence
version: "1.0"
description: Monitors competitive pipeline.
tags: [commercial, research, healthcare, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_bms_competitive
description: Queries and publishes.
inputParameters:
- name: therapeutic_area
in: body
required: true
type: string
- name: quarter
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT competitor, compound FROM competitive WHERE ta='{{therapeutic_area}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "Competitive Intel — {{therapeutic_area}}"
space: "STRATEGY"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Processes clinical trial site payments.
naftiko: "0.5"
info:
title: BMS CTMS Site Payment
version: "1.0"
description: Processes clinical trial site payments.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_site_payments
description: Calculates and submits payments.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: site_id
in: body
required: true
type: string
- name: period
in: body
required: true
type: string
steps:
- name: calc
call:
operationId: calculatePayment
input:
trialId: "{{trial_id}}"
siteId: "{{site_id}}"
- name: submit
call:
operationId: submitPayment
input:
siteId: "{{site_id}}"
amount: "{{calc.total}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-finance"
message: "Payment processed."
consumes:
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /sites/{siteId}/payments
operations:
- id: calculatePayment
method: GET
- type: http
baseUri: https://bms-sap.com/api/v1
authentication:
type: bearer
token: $secrets.sap_token
resources:
- path: /payments
operations:
- id: submitPayment
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Monitors data lake ingestion.
naftiko: "0.5"
info:
title: BMS Data Ingestion Monitor
version: "1.0"
description: Monitors data lake ingestion.
tags: [analytics, observability, healthcare, azure]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: monitor_bms_ingestion
description: Checks, incidents, notifies.
inputParameters:
- name: pipeline
in: body
required: true
type: string
- name: lag
in: body
required: true
type: integer
steps:
- name: check
call:
operationId: queryMetric
input:
query: "avg:ingestion.lag{pipeline:{{pipeline}}}"
- name: incident
call:
operationId: createIncident
input:
short_description: "Ingestion lag: {{pipeline}}"
urgency: "2"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "data-eng"
message: "Alert."
consumes:
- type: http
baseUri: https://api.datadoghq.com/api/v1
authentication:
type: apikey
name: DD-API-KEY
in: header
key: $secrets.datadog_api_key
resources:
- path: /metrics/query
operations:
- id: queryMetric
method: GET
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Processes drug label updates through regulatory review and approval.
naftiko: "0.5"
info:
title: BMS Drug Label Update Workflow
version: "1.0"
description: Processes drug label updates through regulatory review and approval.
tags: [regulatory, compliance, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_label_update
description: Creates update, routes review, notifies.
inputParameters:
- name: product_code
in: body
required: true
type: string
- name: update_type
in: body
required: true
type: string
- name: description
in: body
required: true
type: string
steps:
- name: create
call:
operationId: createLabelUpdate
input:
productCode: "{{product_code}}"
updateType: "{{update_type}}"
description: "{{description}}"
- name: route
call:
operationId: routeForApproval
input:
updateId: "{{create.update_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "regulatory-labels"
message: "Label update for {{product_code}} submitted for review."
consumes:
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /labels
operations:
- id: createLabelUpdate
method: POST
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /workflows/route
operations:
- id: routeForApproval
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves stability testing results for a drug product batch.
naftiko: "0.5"
info:
title: BMS Drug Stability Data
version: "1.0"
description: Retrieves stability testing results for a drug product batch.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_stability_data
description: Returns stability test results and shelf life prediction.
inputParameters:
- name: batch_number
in: query
required: true
type: string
- name: time_point
in: query
required: true
type: string
call:
operationId: getStabilityData
input:
batchNumber: "{{batch_number}}"
timePoint: "{{time_point}}"
outputParameters:
- name: results
type: array
- name: shelf_life_months
type: integer
consumes:
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /stability/{batchNumber}
operations:
- id: getStabilityData
method: GET
Offboards employees with access revocation and asset collection.
naftiko: "0.5"
info:
title: BMS Employee Offboarding
version: "1.0"
description: Offboards employees with access revocation and asset collection.
tags: [human-resources, identity-management, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: offboard_bms
description: Revokes access, collects assets, logs.
inputParameters:
- name: eid
in: body
required: true
type: string
- name: last_day
in: body
required: true
type: string
steps:
- name: revoke
call:
operationId: revokeAccess
input:
eid: "{{eid}}"
date: "{{last_day}}"
- name: assets
call:
operationId: collectAssets
input:
eid: "{{eid}}"
- name: log
call:
operationId: createIncident
input:
short_description: "Offboarding: {{eid}}"
category: "hr_offboarding"
urgency: "3"
consumes:
- type: http
baseUri: https://bms.okta.com/api/v1
authentication:
type: bearer
token: $secrets.okta_token
resources:
- path: /users/{eid}/deactivate
operations:
- id: revokeAccess
method: POST
- type: http
baseUri: https://api.bms.com/hr/v1
authentication:
type: bearer
token: $secrets.bms_hr_token
resources:
- path: /assets/collect
operations:
- id: collectAssets
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
Retrieves cleanroom environmental monitoring data from the manufacturing facility.
naftiko: "0.5"
info:
title: BMS Environmental Monitoring
version: "1.0"
description: Retrieves cleanroom environmental monitoring data from the manufacturing facility.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_env_monitoring
description: Returns particle counts, temperature, and humidity readings.
inputParameters:
- name: facility_id
in: query
required: true
type: string
- name: room_id
in: query
required: true
type: string
call:
operationId: getEnvData
input:
facilityId: "{{facility_id}}"
roomId: "{{room_id}}"
outputParameters:
- name: particle_count
type: number
- name: temperature
type: number
- name: humidity
type: number
consumes:
- type: http
baseUri: https://api.bms.com/manufacturing/v1
authentication:
type: bearer
token: $secrets.bms_mfg_token
resources:
- path: /facilities/{facilityId}/rooms/{roomId}/monitoring
operations:
- id: getEnvData
method: GET
Manages GxP system audit trails and creates compliance findings.
naftiko: "0.5"
info:
title: BMS GxP Audit Workflow
version: "1.0"
description: Manages GxP system audit trails and creates compliance findings.
tags: [compliance, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_gxp_audit
description: Queries audit logs, identifies findings, creates CAPAs.
inputParameters:
- name: system_name
in: body
required: true
type: string
- name: audit_period
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT event_type, user_id, timestamp FROM gxp_audit WHERE system='{{system_name}}' AND period='{{audit_period}}' AND anomaly=true"
- name: create-finding
call:
operationId: createDeviation
input:
type: "gxp_audit_finding"
system: "{{system_name}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "quality-compliance"
message: "GxP audit findings for {{system_name}}."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /deviations
operations:
- id: createDeviation
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves healthcare professional engagement history from Veeva CRM.
naftiko: "0.5"
info:
title: BMS HCP Engagement Lookup
version: "1.0"
description: Retrieves healthcare professional engagement history from Veeva CRM.
tags: [commercial, hcp-engagement, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_hcp_engagement
description: Returns HCP interaction history and territory details.
inputParameters:
- name: hcp_id
in: query
required: true
type: string
call:
operationId: getHCPEngagement
input:
hcpId: "{{hcp_id}}"
outputParameters:
- name: interactions
type: array
- name: territory
type: string
consumes:
- type: http
baseUri: https://bms.veevacrm.com/api/v1
authentication:
type: bearer
token: $secrets.veeva_crm_token
resources:
- path: /hcps/{hcpId}/engagement
operations:
- id: getHCPEngagement
method: GET
Audits PHI access in clinical systems.
naftiko: "0.5"
info:
title: BMS HIPAA PHI Audit
version: "1.0"
description: Audits PHI access in clinical systems.
tags: [compliance, hipaa, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: audit_bms_phi
description: Queries, incidents, notifies.
inputParameters:
- name: start
in: body
required: true
type: string
- name: end
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT user_id FROM phi_log WHERE access BETWEEN '{{start}}' AND '{{end}}' AND anomaly=true"
- name: incident
call:
operationId: createIncident
input:
short_description: "PHI anomaly"
urgency: "1"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "privacy"
message: "PHI anomaly detected."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Updates the investigator brochure with new safety data and distributes to sites.
naftiko: "0.5"
info:
title: BMS Investigator Brochure Update
version: "1.0"
description: Updates the investigator brochure with new safety data and distributes to sites.
tags: [clinical, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: update_ib
description: Gets safety data, updates IB, distributes.
inputParameters:
- name: compound
in: body
required: true
type: string
- name: version
in: body
required: true
type: string
steps:
- name: get-safety
call:
operationId: executeQuery
input:
statement: "SELECT ae_type, frequency FROM safety_data WHERE compound='{{compound}}'"
- name: update-ib
call:
operationId: updateInvestigatorBrochure
input:
compound: "{{compound}}"
version: "{{version}}"
safetyData: "{{get-safety.results}}"
- name: distribute
call:
operationId: distributToSites
input:
compound: "{{compound}}"
version: "{{version}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /documents/ib
operations:
- id: updateInvestigatorBrochure
method: PUT
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /distribution
operations:
- id: distributToSites
method: POST
Analyzes competitive patent landscape for a therapeutic area.
naftiko: "0.5"
info:
title: BMS IP Landscape Analysis
version: "1.0"
description: Analyzes competitive patent landscape for a therapeutic area.
tags: [commercial, intellectual-property, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: analyze_ip_landscape
description: Queries patent data, publishes analysis.
inputParameters:
- name: therapeutic_area
in: body
required: true
type: string
- name: compound
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT patent_number, assignee, expiry FROM patent_landscape WHERE therapeutic_area='{{therapeutic_area}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "IP Landscape — {{therapeutic_area}}"
space: "IP"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Tracks IRB submissions.
naftiko: "0.5"
info:
title: BMS IRB Submission Tracker
version: "1.0"
description: Tracks IRB submissions.
tags: [clinical, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: track_irb
description: Submits, tracks, notifies.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: site_id
in: body
required: true
type: string
- name: type
in: body
required: true
type: string
steps:
- name: submit
call:
operationId: submitIRB
input:
trialId: "{{trial_id}}"
siteId: "{{site_id}}"
- name: track
call:
operationId: trackStatus
input:
submissionId: "{{submit.submission_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-regulatory"
message: "IRB submitted."
consumes:
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /irb/submissions
operations:
- id: submitIRB
method: POST
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /irb/submissions/{submissionId}
operations:
- id: trackStatus
method: GET
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Schedules and tracks laboratory equipment maintenance and calibration.
naftiko: "0.5"
info:
title: BMS Lab Equipment Maintenance
version: "1.0"
description: Schedules and tracks laboratory equipment maintenance and calibration.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: schedule_equipment_maintenance
description: Checks calibration, schedules service, notifies.
inputParameters:
- name: equipment_id
in: body
required: true
type: string
- name: facility_id
in: body
required: true
type: string
steps:
- name: check
call:
operationId: getCalibrationStatus
input:
equipmentId: "{{equipment_id}}"
- name: schedule
call:
operationId: scheduleService
input:
equipmentId: "{{equipment_id}}"
facility: "{{facility_id}}"
dueDate: "{{check.next_calibration}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "lab-ops"
message: "Maintenance scheduled for {{equipment_id}} at {{facility_id}}."
consumes:
- type: http
baseUri: https://api.bms.com/manufacturing/v1
authentication:
type: bearer
token: $secrets.bms_mfg_token
resources:
- path: /equipment/{equipmentId}/calibration
operations:
- id: getCalibrationStatus
method: GET
- type: http
baseUri: https://api.bms.com/manufacturing/v1
authentication:
type: bearer
token: $secrets.bms_mfg_token
resources:
- path: /maintenance/schedule
operations:
- id: scheduleService
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Aggregates manufacturing deviations and publishes quality reports to Confluence.
naftiko: "0.5"
info:
title: BMS Manufacturing Deviation Report
version: "1.0"
description: Aggregates manufacturing deviations and publishes quality reports to Confluence.
tags: [manufacturing, quality, healthcare, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: generate_deviation_report
description: Queries deviations, publishes report.
inputParameters:
- name: facility
in: body
required: true
type: string
- name: period
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT deviation_type, count, impact FROM mfg_deviations WHERE facility='{{facility}}' AND period='{{period}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "Deviation Report — {{facility}} — {{period}}"
space: "QUALITY"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Analyzes payer coverage data and publishes market access reports.
naftiko: "0.5"
info:
title: BMS Market Access Analytics
version: "1.0"
description: Analyzes payer coverage data and publishes market access reports.
tags: [commercial, analytics, healthcare, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_market_access
description: Queries, analyzes, publishes.
inputParameters:
- name: product
in: body
required: true
type: string
- name: market
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT payer, tier, lives_covered FROM market_access WHERE product='{{product}}' AND market='{{market}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "Market Access — {{product}} — {{market}}"
space: "COMMERCIAL"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Retrieves payer formulary positioning and market access data for a BMS product.
naftiko: "0.5"
info:
title: BMS Market Access Data
version: "1.0"
description: Retrieves payer formulary positioning and market access data for a BMS product.
tags: [commercial, market-access, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_market_access
description: Returns formulary status across major payers.
inputParameters:
- name: product_code
in: query
required: true
type: string
- name: market
in: query
required: true
type: string
call:
operationId: getMarketAccess
input:
productCode: "{{product_code}}"
market: "{{market}}"
outputParameters:
- name: payer_coverage
type: array
- name: tier_distribution
type: object
consumes:
- type: http
baseUri: https://api.bms.com/commercial/v1
authentication:
type: bearer
token: $secrets.bms_commercial_token
resources:
- path: /products/{productCode}/market-access
operations:
- id: getMarketAccess
method: GET
Queries medical affairs scientific publication data.
naftiko: "0.5"
info:
title: BMS Medical Affairs Query
version: "1.0"
description: Queries medical affairs scientific publication data.
tags: [clinical, medical-affairs, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: query_med_affairs
description: Returns publications and KOL interactions.
inputParameters:
- name: compound_id
in: query
required: true
type: string
- name: year
in: query
required: true
type: string
call:
operationId: getMedAffairsData
input:
compoundId: "{{compound_id}}"
year: "{{year}}"
outputParameters:
- name: publications
type: array
- name: kol_interactions
type: integer
consumes:
- type: http
baseUri: https://api.bms.com/medical-affairs/v1
authentication:
type: bearer
token: $secrets.bms_medaffairs_token
resources:
- path: /compounds/{compoundId}/data
operations:
- id: getMedAffairsData
method: GET
Processes healthcare professional medical information requests.
naftiko: "0.5"
info:
title: BMS Medical Information Request
version: "1.0"
description: Processes healthcare professional medical information requests.
tags: [medical-affairs, clinical, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_med_info
description: Receives request, retrieves literature, responds.
inputParameters:
- name: hcp_id
in: body
required: true
type: string
- name: topic
in: body
required: true
type: string
- name: compound
in: body
required: true
type: string
steps:
- name: search
call:
operationId: searchLiterature
input:
compound: "{{compound}}"
topic: "{{topic}}"
- name: respond
call:
operationId: createResponse
input:
hcpId: "{{hcp_id}}"
literature: "{{search.results}}"
compound: "{{compound}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "medical-affairs"
message: "Med info request from HCP {{hcp_id}} for {{compound}} processed."
consumes:
- type: http
baseUri: https://api.bms.com/medical-affairs/v1
authentication:
type: bearer
token: $secrets.bms_medaffairs_token
resources:
- path: /literature/search
operations:
- id: searchLiterature
method: GET
- type: http
baseUri: https://api.bms.com/medical-affairs/v1
authentication:
type: bearer
token: $secrets.bms_medaffairs_token
resources:
- path: /responses
operations:
- id: createResponse
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves patent expiration and exclusivity data for a BMS compound.
naftiko: "0.5"
info:
title: BMS Patent Portfolio Check
version: "1.0"
description: Retrieves patent expiration and exclusivity data for a BMS compound.
tags: [commercial, intellectual-property, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: check_patent_status
description: Returns patent expiry dates and market exclusivity periods.
inputParameters:
- name: compound_id
in: query
required: true
type: string
call:
operationId: getPatentStatus
input:
compoundId: "{{compound_id}}"
outputParameters:
- name: patents
type: array
- name: exclusivity_end
type: string
consumes:
- type: http
baseUri: https://api.bms.com/ip/v1
authentication:
type: bearer
token: $secrets.bms_ip_token
resources:
- path: /compounds/{compoundId}/patents
operations:
- id: getPatentStatus
method: GET
Identifies non-adherent patients.
naftiko: "0.5"
info:
title: BMS Patient Adherence Outreach
version: "1.0"
description: Identifies non-adherent patients.
tags: [clinical, patient-services, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: trigger_bms_adherence
description: Queries and creates tasks.
inputParameters:
- name: program
in: body
required: true
type: string
- name: threshold
in: body
required: true
type: number
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT patient_id FROM adherence WHERE program='{{program}}' AND rate < {{threshold}}"
- name: create
call:
operationId: createOutreach
input:
patients: "{{query.results}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "patient-services"
message: "Outreach initiated."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/patient-services/v1
authentication:
type: bearer
token: $secrets.bms_patient_token
resources:
- path: /outreach/tasks
operations:
- id: createOutreach
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Runs pharmacogenomics analysis.
naftiko: "0.5"
info:
title: BMS Pharmacogenomics Analysis
version: "1.0"
description: Runs pharmacogenomics analysis.
tags: [clinical, research, healthcare, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_pgx_analysis
description: Queries genomic data, publishes.
inputParameters:
- name: compound
in: body
required: true
type: string
- name: biomarker
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT patient_id, genotype FROM pgx_data WHERE compound='{{compound}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "PGx — {{compound}}"
space: "RESEARCH"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Generates periodic safety update reports from AE data and submits to regulatory.
naftiko: "0.5"
info:
title: BMS Pharmacovigilance Periodic Report
version: "1.0"
description: Generates periodic safety update reports from AE data and submits to regulatory.
tags: [pharmacovigilance, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: generate_psur
description: Queries AE data, generates report, submits.
inputParameters:
- name: drug_code
in: body
required: true
type: string
- name: report_period
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT ae_type, count, seriousness FROM adverse_events WHERE drug='{{drug_code}}' AND period='{{report_period}}'"
- name: generate
call:
operationId: generatePSUR
input:
drugCode: "{{drug_code}}"
period: "{{report_period}}"
data: "{{query.results}}"
- name: submit
call:
operationId: submitToAgency
input:
reportId: "{{generate.report_id}}"
agency: "FDA"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/pharmacovigilance/v1
authentication:
type: bearer
token: $secrets.bms_pv_token
resources:
- path: /reports/psur
operations:
- id: generatePSUR
method: POST
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /submissions
operations:
- id: submitToAgency
method: POST
Processes a clinical trial protocol amendment through review and approval.
naftiko: "0.5"
info:
title: BMS Protocol Amendment Workflow
version: "1.0"
description: Processes a clinical trial protocol amendment through review and approval.
tags: [clinical, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_protocol_amendment
description: Submits amendment, routes review, notifies.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: amendment_number
in: body
required: true
type: string
- name: description
in: body
required: true
type: string
steps:
- name: submit
call:
operationId: submitAmendment
input:
trialId: "{{trial_id}}"
amendmentNumber: "{{amendment_number}}"
description: "{{description}}"
- name: route
call:
operationId: routeReview
input:
trialId: "{{trial_id}}"
amendmentId: "{{submit.amendment_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-regulatory"
message: "Protocol amendment {{amendment_number}} for trial {{trial_id}} submitted for review."
consumes:
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /trials/{trialId}/amendments
operations:
- id: submitAmendment
method: POST
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /workflows/route
operations:
- id: routeReview
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Runs real-world evidence analysis from claims and EHR data.
naftiko: "0.5"
info:
title: BMS Real World Evidence Pipeline
version: "1.0"
description: Runs real-world evidence analysis from claims and EHR data.
tags: [clinical, analytics, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_rwe_analysis
description: Queries RWE data, publishes findings.
inputParameters:
- name: compound
in: body
required: true
type: string
- name: indication
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT patient_count, outcome_rate FROM rwe_data WHERE compound='{{compound}}' AND indication='{{indication}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "RWE — {{compound}} — {{indication}}"
space: "MEDAFFAIRS"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Submits regulatory filings.
naftiko: "0.5"
info:
title: BMS Regulatory Filing
version: "1.0"
description: Submits regulatory filings.
tags: [regulatory, compliance, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: submit_bms_filing
description: Gets, submits, logs.
inputParameters:
- name: filing
in: body
required: true
type: string
- name: agency
in: body
required: true
type: string
steps:
- name: req
call:
operationId: getRequirements
input:
filing: "{{filing}}"
agency: "{{agency}}"
- name: submit
call:
operationId: submitFiling
input:
filing: "{{filing}}"
data: "{{req.data}}"
- name: log
call:
operationId: createIncident
input:
short_description: "Filing: {{filing}} — {{agency}}"
urgency: "2"
consumes:
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /filings/requirements
operations:
- id: getRequirements
method: GET
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /filings/submit
operations:
- id: submitFiling
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
Tracks drug product serialization for regulatory compliance and supply chain visibility.
naftiko: "0.5"
info:
title: BMS Drug Serialization Tracking
version: "1.0"
description: Tracks drug product serialization for regulatory compliance and supply chain visibility.
tags: [supply-chain, regulatory, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: track_serialization
description: Queries serial data, validates compliance, reports.
inputParameters:
- name: lot_number
in: body
required: true
type: string
- name: product_code
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT serial_number, status, location FROM serialization WHERE lot='{{lot_number}}' AND product='{{product_code}}'"
- name: validate
call:
operationId: validateCompliance
input:
lotNumber: "{{lot_number}}"
serials: "{{query.results}}"
- name: report
call:
operationId: sendTeamsMessage
input:
channelId: "supply-chain-compliance"
message: "Serialization validation for lot {{lot_number}}: {{validate.status}}."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /serialization/validate
operations:
- id: validateCompliance
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Monitors supply chain risks.
naftiko: "0.5"
info:
title: BMS Supply Chain Risk Monitor
version: "1.0"
description: Monitors supply chain risks.
tags: [supply-chain, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: monitor_supply_risk
description: Queries and creates alerts.
inputParameters:
- name: category
in: body
required: true
type: string
- name: threshold
in: body
required: true
type: number
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT supplier, risk FROM supply_risk WHERE category='{{category}}' AND risk > {{threshold}}"
- name: alert
call:
operationId: createIncident
input:
short_description: "Supply risk: {{category}}"
urgency: "2"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "supply-risk"
message: "Risk detected."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams.
naftiko: "0.5"
info:
label: "Change Management Approval Gate"
description: "When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- gxp
- compliance
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: route-change-request
description: "Given a ServiceNow change request number for a GxP system, retrieve the change details and risk level, notify the CAB in Teams, and update the change record status to under review. Use for all changes to validated pharmaceutical systems."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number, e.g. 'CHG0002345'."
steps:
- name: get-change
type: call
call: "servicenow.get-change"
with:
number: "{{change_number}}"
- name: notify-cab
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.cab_channel_id"
text: "GxP Change Advisory Review: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | System: {{get-change.cmdb_ci}}"
- name: update-change
type: call
call: "servicenow-update.patch-change"
with:
sys_id: "{{get-change.sys_id}}"
state: "2"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bms.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: get-change
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: post-channel-message
method: POST
- type: http
namespace: servicenow-update
baseUri: "https://bms.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-patch
path: "/table/change_request/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: patch-change
method: PATCH
When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a PagerDuty incident for on-call engineers.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Handler"
description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a PagerDuty incident for on-call engineers."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
- pagerduty
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions failure on a protected branch with repo, branch, run ID, and failed job name, create a Jira bug, post a Teams alert, and trigger a PagerDuty incident. Use for automated CI/CD failure triage."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. 'bms/clinical-data-platform'."
- name: branch
in: body
type: string
description: "The Git branch where the failure occurred."
- name: run_id
in: body
type: string
description: "The GitHub Actions run ID."
- name: failed_job
in: body
type: string
description: "The name of the failed CI job."
steps:
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{failed_job}}"
description: "Repository: {{repo}}\nBranch: {{branch}}\nRun ID: {{run_id}}"
- name: alert-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.engineering_alerts_channel_id"
text: "Pipeline failure: {{repo}} on {{branch}} — job {{failed_job}}. Jira: {{create-bug.key}}."
- name: create-pd-incident
type: call
call: "pagerduty.create-incident"
with:
title: "CI Failure: {{repo}} {{branch}} {{failed_job}}"
service_id: "$secrets.pagerduty_engineering_service_id"
consumes:
- type: http
namespace: jira
baseUri: "https://bms.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
- 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: post-channel-message
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Runs data quality checks on clinical trial data and creates CAPA items for discrepancies.
naftiko: "0.5"
info:
title: Clinical Data Quality Pipeline
version: "1.0"
description: Runs data quality checks on clinical trial data and creates CAPA items for discrepancies.
tags: [clinical, analytics, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_clinical_dq
description: Queries data, identifies issues, creates CAPAs.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: visit_window
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT subject_id, discrepancy_type FROM clinical_dq WHERE trial='{{trial_id}}' AND visit_window='{{visit_window}}'"
- name: create-capa
call:
operationId: createDeviation
input:
type: "data_quality"
trial: "{{trial_id}}"
details: "{{query.results}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "clinical-data"
message: "DQ issues found for trial {{trial_id}}. CAPA created."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /deviations
operations:
- id: createDeviation
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Runs clinical endpoint analysis from Snowflake and publishes results to Confluence.
naftiko: "0.5"
info:
title: Clinical Endpoint Analysis Pipeline
version: "1.0"
description: Runs clinical endpoint analysis from Snowflake and publishes results to Confluence.
tags: [clinical, analytics, healthcare, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_endpoint_analysis
description: Queries, analyzes, publishes.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: endpoint
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT subject_id, value FROM endpoints WHERE trial='{{trial_id}}' AND endpoint='{{endpoint}}'"
- name: publish
call:
operationId: createContent
input:
type: "page"
title: "Endpoint Analysis — {{trial_id}} — {{endpoint}}"
space: "CLINICAL"
body: "{{query.results}}"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content
operations:
- id: createContent
method: POST
Queries trial enrollment data, identifies underperforming sites, and creates Jira improvement stories.
naftiko: "0.5"
info:
title: Clinical Trial Enrollment Pipeline
version: "1.0"
description: Queries trial enrollment data, identifies underperforming sites, and creates Jira improvement stories.
tags: [clinical, research, healthcare, jira]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: run_enrollment_pipeline
description: Queries enrollment, identifies gaps, creates stories.
inputParameters:
- name: trial_id
in: body
required: true
type: string
- name: target_rate
in: body
required: true
type: number
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT site_id, enrolled, target FROM trial_enrollment WHERE trial='{{trial_id}}' AND enrolled < {{target_rate}}"
- name: create
call:
operationId: createIssue
input:
project: "CLINICAL"
summary: "Enrollment gap for trial {{trial_id}}"
priority: "High"
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.atlassian.net/rest/api/3
authentication:
type: basic
username: $secrets.jira_user
password: $secrets.jira_api_token
resources:
- path: /issue
operations:
- id: createIssue
method: POST
Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams.
naftiko: "0.5"
info:
label: "Clinical Trial Milestone Tracker"
description: "Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams."
tags:
- clinical-trials
- veeva
- jira
- microsoft-teams
- life-sciences
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: track-trial-milestone
description: "Given a Veeva Vault study ID and milestone name, retrieve current milestone status, create a Jira tracking task for the clinical operations team, and notify the study lead via Teams. Use for clinical trial milestone monitoring and escalation."
inputParameters:
- name: study_id
in: body
type: string
description: "The Veeva Vault clinical study ID."
- name: milestone_name
in: body
type: string
description: "The clinical milestone name, e.g. 'First Patient In', 'Last Patient Out', 'Database Lock'."
steps:
- name: get-milestone
type: call
call: "veeva.get-study-milestone"
with:
study_id: "{{study_id}}"
milestone: "{{milestone_name}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project_key: "CLIN"
issuetype: "Task"
summary: "Milestone update: {{milestone_name}} for study {{study_id}}"
description: "Status: {{get-milestone.status}}\nPlanned date: {{get-milestone.planned_date}}\nActual date: {{get-milestone.actual_date}}"
- name: notify-lead
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.clinical_ops_channel_id"
text: "Trial {{study_id}} — {{milestone_name}}: {{get-milestone.status}}. Jira: {{create-task.key}}."
consumes:
- type: http
namespace: veeva
baseUri: "https://bms.veevavault.com/api/v23.3"
authentication:
type: bearer
token: "$secrets.veeva_token"
resources:
- name: study-milestones
path: "/objects/study__v/{{study_id}}/milestones"
inputParameters:
- name: study_id
in: path
operations:
- name: get-study-milestone
method: GET
- type: http
namespace: jira
baseUri: "https://bms.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
- 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: post-channel-message
method: POST
Retrieves the current status and enrollment metrics for a BMS clinical trial.
naftiko: "0.5"
info:
title: Clinical Trial Status Lookup
version: "1.0"
description: Retrieves the current status and enrollment metrics for a BMS clinical trial.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_trial_status
description: Returns trial phase, enrollment, and site count.
inputParameters:
- name: trial_id
in: query
required: true
type: string
call:
operationId: getTrialStatus
input:
trialId: "{{trial_id}}"
outputParameters:
- name: phase
type: string
- name: enrolled
type: integer
- name: sites
type: integer
consumes:
- type: http
baseUri: https://api.bms.com/clinical-trials/v1
authentication:
type: bearer
token: $secrets.bms_clinical_token
resources:
- path: /trials/{trialId}
operations:
- id: getTrialStatus
method: GET
Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams.
naftiko: "0.5"
info:
label: "Concur Expense Report Approval Escalation"
description: "Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: escalate-pending-expenses
description: "Retrieve expense reports pending approval for more than the specified number of days from SAP Concur, and send reminder messages to the pending approvers via Teams. Use for weekly expense approval monitoring."
inputParameters:
- name: pending_days
in: body
type: integer
description: "Minimum number of days an expense report must be pending to trigger a reminder."
steps:
- name: get-pending-reports
type: call
call: "concur.list-pending-reports"
with:
approvalStatusCode: "A_PEND"
limit: "50"
- name: notify-approvers
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-pending-reports.approver_email}}"
text: "Reminder: You have {{get-pending-reports.count}} expense report(s) pending approval in SAP Concur. Please review at your earliest convenience."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: list-pending-reports
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Searches Confluence for standard operating procedures.
naftiko: "0.5"
info:
title: Confluence BMS SOP Search
version: "1.0"
description: Searches Confluence for standard operating procedures.
tags: [knowledge-management, quality, confluence]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: search_bms_sops
description: Returns matching SOP pages.
inputParameters:
- name: query
in: query
required: true
type: string
- name: space
in: query
required: true
type: string
call:
operationId: searchContent
input:
cql: "space={{space}} AND type=page AND text~'{{query}}'"
limit: "20"
outputParameters:
- name: results
type: array
consumes:
- type: http
baseUri: https://bms.atlassian.net/wiki/rest/api
authentication:
type: basic
username: $secrets.confluence_user
password: $secrets.confluence_api_token
resources:
- path: /content/search
operations:
- id: searchContent
method: GET
Triggers ML pipeline for drug discovery.
naftiko: "0.5"
info:
title: Databricks BMS ML Pipeline
version: "1.0"
description: Triggers ML pipeline for drug discovery.
tags: [analytics, research, healthcare, databricks]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: trigger_bms_ml
description: Runs, refreshes, notifies.
inputParameters:
- name: pipeline
in: body
required: true
type: string
- name: model
in: body
required: true
type: string
steps:
- name: run
call:
operationId: triggerJob
input:
pipeline: "{{pipeline}}"
- name: refresh
call:
operationId: refreshDataset
input:
dataset: "drug-predictions"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "data-science"
message: "ML complete."
consumes:
- type: http
baseUri: https://bms-databricks.azuredatabricks.net/api/2.1
authentication:
type: bearer
token: $secrets.databricks_token
resources:
- path: /jobs/run-now
operations:
- id: triggerJob
method: POST
- type: http
baseUri: https://api.powerbi.com/v1.0/myorg
authentication:
type: bearer
token: $secrets.powerbi_token
resources:
- path: /groups/research/datasets/drug-predictions/refreshes
operations:
- id: refreshDataset
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Queries Datadog for BMS digital platform health metrics.
naftiko: "0.5"
info:
title: Datadog BMS Platform Health
version: "1.0"
description: Queries Datadog for BMS digital platform health metrics.
tags: [observability, datadog, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: query_bms_health
description: Returns error rates and latency.
inputParameters:
- name: service
in: query
required: true
type: string
- name: range
in: query
required: true
type: string
call:
operationId: queryMetric
input:
query: "avg:http.errors{service:{{service}}}"
from: "{{range}}"
outputParameters:
- name: error_rate
type: number
- name: p99_ms
type: number
consumes:
- type: http
baseUri: https://api.datadoghq.com/api/v1
authentication:
type: apikey
name: DD-API-KEY
in: header
key: $secrets.datadog_api_key
resources:
- path: /metrics/query
operations:
- id: queryMetric
method: GET
When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team.
naftiko: "0.5"
info:
label: "Datadog Production Alert Escalation"
description: "When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team."
tags:
- observability
- datadog
- pagerduty
- incident-response
- monitoring
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: escalate-monitor-alert
description: "Given a Datadog monitor ID in ALERT state and the responsible PagerDuty service ID, fetch monitor details and create a PagerDuty incident. Use for any production monitor requiring on-call response."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "The Datadog monitor ID that entered ALERT state."
- name: pagerduty_service_id
in: body
type: string
description: "The PagerDuty service ID for routing the incident."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "{{get-monitor.name}} — ALERT"
service_id: "{{pagerduty_service_id}}"
body: "Monitor: {{get-monitor.name}}\nQuery: {{get-monitor.query}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves the current development pipeline status for a BMS compound.
naftiko: "0.5"
info:
title: Drug Pipeline Status
version: "1.0"
description: Retrieves the current development pipeline status for a BMS compound.
tags: [research, drug-development, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_pipeline_status
description: Returns compound phase, indication, and expected milestones.
inputParameters:
- name: compound_id
in: query
required: true
type: string
call:
operationId: getPipelineStatus
input:
compoundId: "{{compound_id}}"
outputParameters:
- name: phase
type: string
- name: indication
type: string
- name: next_milestone
type: string
consumes:
- type: http
baseUri: https://api.bms.com/pipeline/v1
authentication:
type: bearer
token: $secrets.bms_pipeline_token
resources:
- path: /compounds/{compoundId}
operations:
- id: getPipelineStatus
method: GET
Creates a drug supply order, validates inventory, and schedules distribution.
naftiko: "0.5"
info:
title: Drug Supply Chain Order
version: "1.0"
description: Creates a drug supply order, validates inventory, and schedules distribution.
tags: [manufacturing, supply-chain, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: create_drug_supply_order
description: Checks inventory, creates order, notifies logistics.
inputParameters:
- name: product_code
in: body
required: true
type: string
- name: quantity
in: body
required: true
type: integer
- name: destination
in: body
required: true
type: string
steps:
- name: check
call:
operationId: checkInventory
input:
productCode: "{{product_code}}"
- name: order
call:
operationId: createSupplyOrder
input:
productCode: "{{product_code}}"
quantity: "{{quantity}}"
destination: "{{destination}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "supply-chain"
message: "Supply order {{order.order_id}} created for {{product_code}}."
consumes:
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /inventory/{productCode}
operations:
- id: checkInventory
method: GET
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /orders
operations:
- id: createSupplyOrder
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
When an employee termination is processed in Workday, revokes Okta access, closes open ServiceNow tickets, and notifies the IT offboarding team via Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is processed in Workday, revokes Okta access, closes open ServiceNow tickets, and notifies the IT offboarding team via Teams."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate the employee's Okta account, close their open ServiceNow tickets, and notify the IT offboarding team in Teams. Invoke when an employee departure is confirmed."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's final working day in ISO 8601 format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_login: "{{get-employee.work_email}}"
- name: notify-it
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.it_offboarding_channel_id"
text: "Offboarding initiated: {{get-employee.full_name}} ({{get-employee.work_email}}). Okta deactivated. Last day: {{termination_date}}."
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: "/bms/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://bms.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-deactivate
path: "/users/{{user_login}}/lifecycle/deactivate"
inputParameters:
- name: user_login
in: path
operations:
- name: deactivate-user
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: post-channel-message
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message to the employee and their manager.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message to the employee and their manager."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- 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, Okta, and Microsoft Teams. Invoke when a new hire record is confirmed in Workday."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire, e.g. 'WD-00456'."
- name: start_date
in: body
type: string
description: "The employee's start date in ISO 8601 format, e.g. '2026-04-14'."
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:
category: "hr_onboarding"
short_description: "New hire onboarding: {{get-employee.full_name}}"
assigned_group: "IT_Onboarding"
- name: provision-okta
type: call
call: "okta.create-user"
with:
first_name: "{{get-employee.first_name}}"
last_name: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Bristol Myers Squibb, {{get-employee.first_name}}! Your IT ticket is {{open-ticket.number}}. Start date: {{start_date}}."
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: "/bms/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://bms.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: okta
baseUri: "https://bms.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
App release workflow.
naftiko: "0.5"
info:
title: GitHub BMS Release
version: "1.0"
description: App release workflow.
tags: [devops, research, healthcare, github]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: release_bms_app
description: Builds, changes, notifies.
inputParameters:
- name: repo
in: body
required: true
type: string
- name: tag
in: body
required: true
type: string
steps:
- name: build
call:
operationId: triggerWorkflow
input:
repo: "{{repo}}"
ref: "{{tag}}"
- name: change
call:
operationId: createChange
input:
short_description: "Release {{tag}} for {{repo}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "releases"
message: "Release {{tag}} initiated."
consumes:
- type: http
baseUri: https://api.github.com
authentication:
type: bearer
token: $secrets.github_token
resources:
- path: /repos/bms/{repo}/actions/workflows/release.yml/dispatches
operations:
- id: triggerWorkflow
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/change_request
operations:
- id: createChange
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty."
tags:
- devops
- security
- github
- jira
- pagerduty
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-security-vulnerability
description: "Given a GitHub repository, CVE ID, and severity level, create a Jira security ticket with full vulnerability context and trigger a PagerDuty alert for the security engineering team. Use for critical and high-severity CVE findings."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. 'bms/genomics-pipeline'."
- name: cve_id
in: body
type: string
description: "The CVE identifier, e.g. 'CVE-2025-1234'."
- name: severity
in: body
type: string
description: "Severity level: 'critical', 'high', 'medium', 'low'."
steps:
- name: create-sec-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "[{{severity}}] {{cve_id}} in {{repo}}"
description: "Repository: {{repo}}\nCVE: {{cve_id}}\nSeverity: {{severity}}"
- name: page-security
type: call
call: "pagerduty.create-incident"
with:
title: "Security vulnerability {{cve_id}} in {{repo}} — {{severity}}"
service_id: "$secrets.pagerduty_security_service_id"
body: "Jira: {{create-sec-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://bms.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
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Identifies target HCPs from Snowflake data and creates engagement campaigns in Veeva CRM.
naftiko: "0.5"
info:
title: HCP Engagement Campaign Orchestrator
version: "1.0"
description: Identifies target HCPs from Snowflake data and creates engagement campaigns in Veeva CRM.
tags: [commercial, hcp-engagement, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: orchestrate_hcp_campaign
description: Queries HCPs, creates campaign, assigns reps.
inputParameters:
- name: product_code
in: body
required: true
type: string
- name: specialty
in: body
required: true
type: string
steps:
- name: query
call:
operationId: executeQuery
input:
statement: "SELECT hcp_id, prescribing_volume FROM hcp_data WHERE product='{{product_code}}' AND specialty='{{specialty}}'"
- name: campaign
call:
operationId: createCampaign
input:
product: "{{product_code}}"
hcps: "{{query.results}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "commercial"
message: "HCP campaign launched for {{product_code}}."
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
- type: http
baseUri: https://bms.veevacrm.com/api/v1
authentication:
type: bearer
token: $secrets.veeva_crm_token
resources:
- path: /campaigns
operations:
- id: createCampaign
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Queries the Jira backlog for BMS R&D platform stories.
naftiko: "0.5"
info:
title: Jira BMS Backlog Query
version: "1.0"
description: Queries the Jira backlog for BMS R&D platform stories.
tags: [project-management, research, jira]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: query_bms_backlog
description: Returns backlog items.
inputParameters:
- name: project
in: query
required: true
type: string
- name: priority
in: query
required: true
type: string
call:
operationId: searchIssues
input:
jql: "project={{project}} AND priority={{priority}}"
maxResults: "50"
outputParameters:
- name: issues
type: array
- name: total
type: integer
consumes:
- type: http
baseUri: https://bms.atlassian.net/rest/api/3
authentication:
type: basic
username: $secrets.jira_user
password: $secrets.jira_api_token
resources:
- path: /search
operations:
- id: searchIssues
method: GET
Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel.
naftiko: "0.5"
info:
label: "Jira Regulatory Sprint Digest"
description: "Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel."
tags:
- regulatory
- jira
- microsoft-teams
- sprint-planning
- reporting
capability:
exposes:
- type: mcp
namespace: regulatory-reporting
port: 8080
tools:
- name: digest-regulatory-sprint
description: "Given a Jira project key and sprint ID for regulatory affairs, fetch all open issues and their status, then post a structured digest to the regulatory leadership Teams channel. Use weekly for sprint reviews."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key for regulatory work, e.g. 'REGY'."
- name: sprint_id
in: body
type: integer
description: "The Jira sprint ID to digest."
steps:
- name: get-issues
type: call
call: "jira.search-issues"
with:
jql: "project={{project_key}} AND sprint={{sprint_id}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.regulatory_leadership_channel_id"
text: "Regulatory sprint {{sprint_id}} digest: {{get-issues.total}} issues in scope."
consumes:
- type: http
namespace: jira
baseUri: "https://bms.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue-search
path: "/search"
operations:
- name: search-issues
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: post-channel-message
method: POST
Retrieves laboratory assay results for a clinical sample from the LIMS.
naftiko: "0.5"
info:
title: Lab Result Query
version: "1.0"
description: Retrieves laboratory assay results for a clinical sample from the LIMS.
tags: [clinical, research, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_lab_results
description: Returns assay results, QC status, and analyst details.
inputParameters:
- name: sample_id
in: query
required: true
type: string
- name: assay_type
in: query
required: true
type: string
call:
operationId: getLabResult
input:
sampleId: "{{sample_id}}"
assayType: "{{assay_type}}"
outputParameters:
- name: result_value
type: number
- name: qc_status
type: string
- name: analyst
type: string
consumes:
- type: http
baseUri: https://api.bms.com/lims/v1
authentication:
type: bearer
token: $secrets.bms_lims_token
resources:
- path: /samples/{sampleId}/results
operations:
- id: getLabResult
method: GET
Validates quality test results for a batch and routes through release approval with notification.
naftiko: "0.5"
info:
title: Manufacturing Batch Release Workflow
version: "1.0"
description: Validates quality test results for a batch and routes through release approval with notification.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_batch_release
description: Checks QC, submits release, notifies.
inputParameters:
- name: batch_number
in: body
required: true
type: string
- name: product_code
in: body
required: true
type: string
steps:
- name: check-qc
call:
operationId: getQCResults
input:
batchNumber: "{{batch_number}}"
- name: submit-release
call:
operationId: submitBatchRelease
input:
batchNumber: "{{batch_number}}"
qcPassed: "{{check-qc.all_passed}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "manufacturing-quality"
message: "Batch {{batch_number}} release: {{submit-release.status}}."
consumes:
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /batches/{batchNumber}/qc
operations:
- id: getQCResults
method: GET
- type: http
baseUri: https://api.bms.com/manufacturing/v1
authentication:
type: bearer
token: $secrets.bms_mfg_token
resources:
- path: /batches/{batchNumber}/release
operations:
- id: submitBatchRelease
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Provisions access.
naftiko: "0.5"
info:
title: Okta BMS Access
version: "1.0"
description: Provisions access.
tags: [identity-management, okta, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: provision_bms
description: Role, provision, log.
inputParameters:
- name: eid
in: body
required: true
type: string
- name: app
in: body
required: true
type: string
steps:
- name: role
call:
operationId: getRole
input:
eid: "{{eid}}"
- name: provision
call:
operationId: assignApp
input:
eid: "{{eid}}"
app: "{{app}}"
- name: log
call:
operationId: createIncident
input:
short_description: "Access: {{eid}}"
urgency: "4"
consumes:
- type: http
baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
authentication:
type: bearer
token: $secrets.workday_token
resources:
- path: /workers/{eid}
operations:
- id: getRole
method: GET
- type: http
baseUri: https://bms.okta.com/api/v1
authentication:
type: bearer
token: $secrets.okta_token
resources:
- path: /apps/{app}/users
operations:
- id: assignApp
method: PUT
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team.
naftiko: "0.5"
info:
label: "Okta User Access Review for GxP Systems"
description: "Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team."
tags:
- identity
- security
- okta
- servicenow
- compliance
- gxp
- access-management
capability:
exposes:
- type: mcp
namespace: identity-compliance
port: 8080
tools:
- name: run-gxp-access-review
description: "Given an Okta GxP application ID and ServiceNow assignment group, list all application users, compile an access roster, and create a ServiceNow task for the compliance team to review. Use for quarterly GxP system access reviews."
inputParameters:
- name: okta_app_id
in: body
type: string
description: "The Okta application ID for the GxP-regulated system."
- name: assignment_group
in: body
type: string
description: "The ServiceNow assignment group for the compliance review task."
steps:
- name: list-app-users
type: call
call: "okta.list-app-users"
with:
app_id: "{{okta_app_id}}"
- name: create-review-task
type: call
call: "servicenow.create-incident"
with:
category: "access_review"
short_description: "GxP access review: {{okta_app_id}} — {{list-app-users.count}} users"
assigned_group: "{{assignment_group}}"
consumes:
- type: http
namespace: okta
baseUri: "https://bms.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: app-users
path: "/apps/{{app_id}}/users"
inputParameters:
- name: app_id
in: path
operations:
- name: list-app-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://bms.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
Retrieves patient enrollment details for a BMS patient support program.
naftiko: "0.5"
info:
title: Patient Enrollment Lookup
version: "1.0"
description: Retrieves patient enrollment details for a BMS patient support program.
tags: [clinical, patient-services, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_patient_enrollment
description: Returns enrollment status and assigned nurse navigator.
inputParameters:
- name: patient_id
in: query
required: true
type: string
- name: program_id
in: query
required: true
type: string
call:
operationId: getPatientEnrollment
input:
patientId: "{{patient_id}}"
programId: "{{program_id}}"
outputParameters:
- name: status
type: string
- name: navigator
type: string
- name: enrollment_date
type: string
consumes:
- type: http
baseUri: https://api.bms.com/patient-services/v1
authentication:
type: bearer
token: $secrets.bms_patient_token
resources:
- path: /patients/{patientId}/enrollment
operations:
- id: getPatientEnrollment
method: GET
Enrolls a patient in a BMS support program, assigns a nurse navigator, and sends welcome materials.
naftiko: "0.5"
info:
title: Patient Support Enrollment Workflow
version: "1.0"
description: Enrolls a patient in a BMS support program, assigns a nurse navigator, and sends welcome materials.
tags: [clinical, patient-services, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: enroll_patient_support
description: Enrolls patient, assigns navigator, sends welcome.
inputParameters:
- name: patient_id
in: body
required: true
type: string
- name: program_id
in: body
required: true
type: string
- name: prescriber_npi
in: body
required: true
type: string
steps:
- name: enroll
call:
operationId: enrollPatient
input:
patientId: "{{patient_id}}"
programId: "{{program_id}}"
prescriberNpi: "{{prescriber_npi}}"
- name: assign
call:
operationId: assignNavigator
input:
patientId: "{{patient_id}}"
programId: "{{program_id}}"
- name: welcome
call:
operationId: sendEmail
input:
to: "{{patient_id}}@bms-patient-portal.com"
subject: "Welcome to BMS Patient Support"
body: "You have been enrolled in program {{program_id}}. Your navigator: {{assign.navigator_name}}."
consumes:
- type: http
baseUri: https://api.bms.com/patient-services/v1
authentication:
type: bearer
token: $secrets.bms_patient_token
resources:
- path: /enrollment
operations:
- id: enrollPatient
method: POST
- type: http
baseUri: https://api.bms.com/patient-services/v1
authentication:
type: bearer
token: $secrets.bms_patient_token
resources:
- path: /patients/{patientId}/navigator
operations:
- id: assignNavigator
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /me/sendMail
operations:
- id: sendEmail
method: POST
When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder.
naftiko: "0.5"
info:
label: "Pharmacovigilance Adverse Event Reporter"
description: "When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder."
tags:
- pharmacovigilance
- safety
- veeva
- microsoft-teams
- compliance
- life-sciences
capability:
exposes:
- type: mcp
namespace: pv-ops
port: 8080
tools:
- name: report-adverse-event
description: "Given an adverse event case ID, drug name, and reporter contact, create a Veeva Vault safety case record and notify the pharmacovigilance team in Teams with the 15-day regulatory deadline. Use for post-market safety reporting."
inputParameters:
- name: case_id
in: body
type: string
description: "The internal adverse event case identifier."
- name: drug_name
in: body
type: string
description: "The BMS product name involved in the adverse event."
- name: seriousness
in: body
type: string
description: "Seriousness classification: 'Serious' or 'Non-Serious'."
steps:
- name: create-vault-case
type: call
call: "veeva.create-safety-case"
with:
case_id: "{{case_id}}"
product: "{{drug_name}}"
seriousness: "{{seriousness}}"
- name: notify-pv-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.pv_team_channel_id"
text: "New {{seriousness}} AE case {{case_id}} for {{drug_name}} submitted to Vault ({{create-vault-case.doc_id}}). 15-day deadline applies."
consumes:
- type: http
namespace: veeva
baseUri: "https://bms.veevavault.com/api/v23.3"
authentication:
type: bearer
token: "$secrets.veeva_token"
resources:
- name: safety-cases
path: "/objects/safety_case__v"
operations:
- name: create-safety-case
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: post-channel-message
method: POST
Refreshes analytics dashboard.
naftiko: "0.5"
info:
title: Power BI BMS Refresh
version: "1.0"
description: Refreshes analytics dashboard.
tags: [analytics, research, healthcare, power-bi]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: refresh_bms_dash
description: Refreshes and notifies.
inputParameters:
- name: dataset
in: body
required: true
type: string
- name: workspace
in: body
required: true
type: string
steps:
- name: refresh
call:
operationId: refreshDataset
input:
dataset: "{{dataset}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "analytics"
message: "Dashboard refreshed."
consumes:
- type: http
baseUri: https://api.powerbi.com/v1.0/myorg
authentication:
type: bearer
token: $secrets.powerbi_token
resources:
- path: /groups/{workspace}/datasets/{dataset}/refreshes
operations:
- id: refreshDataset
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete.
naftiko: "0.5"
info:
label: "Power BI Regulatory KPI Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete."
tags:
- data
- analytics
- power-bi
- microsoft-teams
- reporting
- regulatory
capability:
exposes:
- type: mcp
namespace: regulatory-reporting
port: 8080
tools:
- name: refresh-regulatory-dashboard
description: "Given a Power BI dataset ID and workspace ID, trigger a dataset refresh and send a Teams notification to regulatory leadership when complete. Use before monthly regulatory review meetings."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID containing the regulatory dashboard."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-leadership
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.regulatory_leadership_channel_id"
text: "Regulatory KPI dashboard dataset {{dataset_id}} has been refreshed and is ready for review."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- 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: post-channel-message
method: POST
Creates a CAPA for a quality deviation, assigns investigators, and tracks resolution.
naftiko: "0.5"
info:
title: Quality Deviation CAPA Workflow
version: "1.0"
description: Creates a CAPA for a quality deviation, assigns investigators, and tracks resolution.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_deviation_capa
description: Creates CAPA, assigns, tracks.
inputParameters:
- name: deviation_id
in: body
required: true
type: string
- name: root_cause
in: body
required: true
type: string
steps:
- name: create-capa
call:
operationId: createCAPA
input:
deviationId: "{{deviation_id}}"
rootCause: "{{root_cause}}"
- name: assign
call:
operationId: assignInvestigator
input:
capaId: "{{create-capa.capa_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "quality-ops"
message: "CAPA {{create-capa.capa_id}} created for deviation {{deviation_id}}."
consumes:
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /capas
operations:
- id: createCAPA
method: POST
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /capas/{capaId}/assign
operations:
- id: assignInvestigator
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves details of a quality deviation or CAPA from the BMS quality management system.
naftiko: "0.5"
info:
title: Quality Deviation Lookup
version: "1.0"
description: Retrieves details of a quality deviation or CAPA from the BMS quality management system.
tags: [manufacturing, quality, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_quality_deviation
description: Returns deviation type, root cause, and CAPA status.
inputParameters:
- name: deviation_id
in: query
required: true
type: string
call:
operationId: getDeviation
input:
deviationId: "{{deviation_id}}"
outputParameters:
- name: type
type: string
- name: root_cause
type: string
- name: capa_status
type: string
consumes:
- type: http
baseUri: https://api.bms.com/quality/v1
authentication:
type: bearer
token: $secrets.bms_quality_token
resources:
- path: /deviations/{deviationId}
operations:
- id: getDeviation
method: GET
Monitors Veeva Vault for regulatory submission documents approaching deadline, creates ServiceNow tasks for the regulatory affairs team, and sends Teams alerts.
naftiko: "0.5"
info:
label: "Regulatory Document Submission Tracker"
description: "Monitors Veeva Vault for regulatory submission documents approaching deadline, creates ServiceNow tasks for the regulatory affairs team, and sends Teams alerts."
tags:
- regulatory
- veeva
- servicenow
- microsoft-teams
- compliance
- life-sciences
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: track-submission-deadline
description: "Given a Veeva Vault submission ID, retrieve the submission package status and upcoming deadline, create a ServiceNow task for regulatory affairs, and alert the regulatory team in Teams. Use for proactive deadline monitoring."
inputParameters:
- name: submission_id
in: body
type: string
description: "The Veeva Vault regulatory submission ID."
- name: days_until_deadline
in: body
type: integer
description: "Number of days until the submission deadline to trigger the alert."
steps:
- name: get-submission
type: call
call: "veeva.get-submission"
with:
submission_id: "{{submission_id}}"
- name: create-task
type: call
call: "servicenow.create-incident"
with:
category: "regulatory_submission"
short_description: "Submission {{submission_id}} due in {{days_until_deadline}} days: {{get-submission.submission_type}}"
- name: alert-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.regulatory_affairs_channel_id"
text: "Regulatory submission {{submission_id}} ({{get-submission.submission_type}}) is due in {{days_until_deadline}} days. ServiceNow: {{create-task.number}}."
consumes:
- type: http
namespace: veeva
baseUri: "https://bms.veevavault.com/api/v23.3"
authentication:
type: bearer
token: "$secrets.veeva_token"
resources:
- name: submissions
path: "/objects/regulatory_submission__v/{{submission_id}}"
inputParameters:
- name: submission_id
in: path
operations:
- name: get-submission
method: GET
- type: http
namespace: servicenow
baseUri: "https://bms.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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates a regulatory submission by compiling documents from Veeva, generating the submission package, and tracking in ServiceNow.
naftiko: "0.5"
info:
title: Regulatory Submission Orchestrator
version: "1.0"
description: Orchestrates a regulatory submission by compiling documents from Veeva, generating the submission package, and tracking in ServiceNow.
tags: [regulatory, compliance, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: orchestrate_submission
description: Compiles documents, generates package, tracks progress.
inputParameters:
- name: submission_id
in: body
required: true
type: string
- name: submission_type
in: body
required: true
type: string
steps:
- name: compile
call:
operationId: compileDocuments
input:
submissionId: "{{submission_id}}"
type: "{{submission_type}}"
- name: generate
call:
operationId: generatePackage
input:
submissionId: "{{submission_id}}"
documents: "{{compile.document_ids}}"
- name: track
call:
operationId: createIncident
input:
short_description: "Regulatory submission {{submission_id}} initiated"
category: "regulatory"
urgency: "2"
consumes:
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /submissions/{submissionId}/documents
operations:
- id: compileDocuments
method: GET
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /submissions/{submissionId}/package
operations:
- id: generatePackage
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
Checks the status of an FDA or EMA regulatory submission.
naftiko: "0.5"
info:
title: Regulatory Submission Status
version: "1.0"
description: Checks the status of an FDA or EMA regulatory submission.
tags: [regulatory, compliance, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_submission_status
description: Returns submission status, target action date, and reviewer assignment.
inputParameters:
- name: submission_id
in: query
required: true
type: string
call:
operationId: getSubmissionStatus
input:
submissionId: "{{submission_id}}"
outputParameters:
- name: status
type: string
- name: target_date
type: string
- name: reviewer
type: string
consumes:
- type: http
baseUri: https://api.bms.com/regulatory/v1
authentication:
type: bearer
token: $secrets.bms_regulatory_token
resources:
- path: /submissions/{submissionId}
operations:
- id: getSubmissionStatus
method: GET
Manages key opinion leader engagement tracking in Salesforce.
naftiko: "0.5"
info:
title: Salesforce BMS KOL Engagement
version: "1.0"
description: Manages key opinion leader engagement tracking in Salesforce.
tags: [commercial, medical-affairs, healthcare, salesforce]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: track_kol_engagement
description: Creates engagement records and assigns follow-ups.
inputParameters:
- name: kol_id
in: body
required: true
type: string
- name: interaction_type
in: body
required: true
type: string
- name: compound
in: body
required: true
type: string
steps:
- name: create
call:
operationId: createEngagement
input:
kolId: "{{kol_id}}"
type: "{{interaction_type}}"
compound: "{{compound}}"
- name: followup
call:
operationId: createTask
input:
kolId: "{{kol_id}}"
type: "follow_up"
compound: "{{compound}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "medical-affairs"
message: "KOL {{kol_id}} engagement recorded for {{compound}}."
consumes:
- type: http
baseUri: https://bms.my.salesforce.com/services/data/v58.0
authentication:
type: bearer
token: $secrets.salesforce_token
resources:
- path: /sobjects/Engagement__c
operations:
- id: createEngagement
method: POST
- type: http
baseUri: https://bms.my.salesforce.com/services/data/v58.0
authentication:
type: bearer
token: $secrets.salesforce_token
resources:
- path: /sobjects/Task
operations:
- id: createTask
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping.
naftiko: "0.5"
info:
label: "Salesforce CRM New Lead Routing"
description: "When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping."
tags:
- crm
- sales
- salesforce
- lead-management
capability:
exposes:
- type: mcp
namespace: crm-ops
port: 8080
tools:
- name: route-new-lead
description: "Given a Salesforce lead ID from a marketing event, retrieve the lead details, assign to the correct territory-based sales representative, and update the lead source field. Use for automated lead routing from conferences and digital campaigns."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce Lead ID (18-character)."
- name: territory_code
in: body
type: string
description: "The sales territory code for routing, e.g. 'NE-ONCO-01'."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: update-lead
type: call
call: "salesforce-update.update-lead"
with:
lead_id: "{{lead_id}}"
Territory__c: "{{territory_code}}"
Status: "Working"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bms.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: salesforce-update
baseUri: "https://bms.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead-update
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams."
tags:
- procurement
- sap-ariba
- microsoft-teams
- supplier-management
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: onboard-supplier
description: "Given a supplier name, DUNS number, and commodity code, create the supplier profile in SAP Ariba, trigger the qualification workflow, and notify the procurement team in Teams. Use when a new supplier relationship is approved."
inputParameters:
- name: supplier_name
in: body
type: string
description: "The legal name of the supplier company."
- name: duns_number
in: body
type: string
description: "The Dun & Bradstreet DUNS number for the supplier."
- name: commodity_code
in: body
type: string
description: "The UNSPSC commodity code for supplier classification."
steps:
- name: create-supplier
type: call
call: "ariba.create-supplier"
with:
name: "{{supplier_name}}"
duns: "{{duns_number}}"
commodity: "{{commodity_code}}"
- name: trigger-qualification
type: call
call: "ariba-qual.trigger-qualification-survey"
with:
supplier_id: "{{create-supplier.id}}"
- name: notify-procurement
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.procurement_channel_id"
text: "Supplier {{supplier_name}} onboarded in Ariba (ID: {{create-supplier.id}}). Qualification survey triggered."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: ariba-qual
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: qualification-surveys
path: "/suppliers/{{supplier_id}}/qualificationSurveys"
inputParameters:
- name: supplier_id
in: path
operations:
- name: trigger-qualification-survey
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: post-channel-message
method: POST
Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams channel.
naftiko: "0.5"
info:
label: "SAP Budget vs Actuals Variance Report"
description: "Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams channel."
tags:
- finance
- erp
- sap
- reporting
- budgeting
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: publish-budget-variance
description: "Given a SAP controlling area and fiscal period, retrieve actuals vs. budget by cost center and post a variance summary to the finance Teams channel. Use monthly for budget review meetings."
inputParameters:
- name: controlling_area
in: body
type: string
description: "The SAP controlling area code."
- name: fiscal_period
in: body
type: string
description: "The fiscal period in YYYYMM format, e.g. '202603'."
steps:
- name: get-actuals
type: call
call: "sap.get-cost-center-actuals"
with:
controlling_area: "{{controlling_area}}"
period: "{{fiscal_period}}"
- name: post-summary
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.finance_leadership_channel_id"
text: "Budget variance for period {{fiscal_period}}: Actuals {{get-actuals.total_actual}}, Budget {{get-actuals.total_budget}}. Variance: {{get-actuals.variance_pct}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://bms-s4.sap.com/sap/opu/odata/sap/FCO_PI_CONTROLLING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-center-actuals
path: "/CostCenterActualsSet"
operations:
- name: get-cost-center-actuals
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: post-channel-message
method: POST
Retrieves a manufacturing production order from the BMS SAP system.
naftiko: "0.5"
info:
title: SAP Manufacturing Order Lookup
version: "1.0"
description: Retrieves a manufacturing production order from the BMS SAP system.
tags: [manufacturing, sap, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_mfg_order
description: Returns order status, batch number, and completion percentage.
inputParameters:
- name: order_number
in: query
required: true
type: string
call:
operationId: getProductionOrder
input:
orderNumber: "{{order_number}}"
outputParameters:
- name: status
type: string
- name: batch_number
type: string
- name: completion_pct
type: number
consumes:
- type: http
baseUri: https://bms-sap.com/api/v1
authentication:
type: bearer
token: $secrets.sap_token
resources:
- path: /production-orders/{orderNumber}
operations:
- id: getProductionOrder
method: GET
Routes BMS procurement requests through SAP and notifies finance.
naftiko: "0.5"
info:
title: SAP BMS Procurement Approval
version: "1.0"
description: Routes BMS procurement requests through SAP and notifies finance.
tags: [procurement, sap, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: process_bms_procurement
description: Gets requisition, submits, notifies.
inputParameters:
- name: req_id
in: body
required: true
type: string
- name: dept
in: body
required: true
type: string
steps:
- name: get
call:
operationId: getRequisition
input:
reqId: "{{req_id}}"
- name: submit
call:
operationId: submitApproval
input:
reqId: "{{req_id}}"
dept: "{{dept}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "finance"
message: "Procurement {{req_id}} submitted."
consumes:
- type: http
baseUri: https://bms-sap.com/api/v1
authentication:
type: bearer
token: $secrets.sap_token
resources:
- path: /requisitions/{reqId}
operations:
- id: getRequisition
method: GET
- type: http
baseUri: https://bms-sap.com/api/v1
authentication:
type: bearer
token: $secrets.sap_token
resources:
- path: /approvals
operations:
- id: submitApproval
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and open line items.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and open line items."
tags:
- finance
- erp
- sap
- procurement
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, retrieve the full PO header including status, vendor, total amount, currency, and line item count. Use for procurement status checks and AP validation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number, e.g. '4500012345'."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_amount
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://bms-s4.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
Retrieves IT incident details from BMS ServiceNow.
naftiko: "0.5"
info:
title: ServiceNow BMS Ticket Lookup
version: "1.0"
description: Retrieves IT incident details from BMS ServiceNow.
tags: [itsm, servicenow, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_bms_ticket
description: Returns ticket state.
inputParameters:
- name: number
in: query
required: true
type: string
call:
operationId: getIncident
input:
number: "{{number}}"
outputParameters:
- name: state
type: string
- name: assigned_to
type: string
consumes:
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: getIncident
method: GET
When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel.
naftiko: "0.5"
info:
label: "ServiceNow Incident Triage and On-Call Routing"
description: "When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel."
tags:
- itsm
- incident-response
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: triage-incident
description: "Given a ServiceNow incident number and priority, fetch incident details, find the on-call engineer via PagerDuty, assign the ticket, and post an alert to the IT Teams channel. Use for P1/P2 incidents requiring immediate response."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. 'INC0009876'."
- name: priority
in: body
type: string
description: "Priority level: 1 (Critical), 2 (High)."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
- name: get-oncall
type: call
call: "pagerduty.get-oncall-user"
with:
schedule_id: "$secrets.pagerduty_it_schedule_id"
- name: assign-incident
type: call
call: "servicenow-assign.update-incident"
with:
sys_id: "{{get-incident.sys_id}}"
assigned_to: "{{get-oncall.user_email}}"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.it_ops_channel_id"
text: "P{{priority}} {{incident_number}}: {{get-incident.short_description}} assigned to {{get-oncall.user_name}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bms.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall-user
method: GET
- type: http
namespace: servicenow-assign
baseUri: "https://bms.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident-update
path: "/table/incident/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-incident
method: PATCH
- 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: post-channel-message
method: POST
Queries Snowflake for clinical trial analytics data.
naftiko: "0.5"
info:
title: Snowflake BMS Clinical Query
version: "1.0"
description: Queries Snowflake for clinical trial analytics data.
tags: [clinical, analytics, snowflake]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: query_bms_clinical
description: Returns clinical data aggregates.
inputParameters:
- name: trial_id
in: query
required: true
type: string
- name: endpoint
in: query
required: true
type: string
call:
operationId: executeQuery
input:
statement: "SELECT subject_id, endpoint_value FROM clinical_data WHERE trial='{{trial_id}}' AND endpoint='{{endpoint}}'"
outputParameters:
- name: results
type: array
consumes:
- type: http
baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
authentication:
type: bearer
token: $secrets.snowflake_token
resources:
- path: /statements
operations:
- id: executeQuery
method: POST
Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team.
naftiko: "0.5"
info:
label: "Snowflake Clinical Data Quality Monitor"
description: "Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team."
tags:
- data
- analytics
- snowflake
- jira
- data-quality
- clinical-trials
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-clinical-data-quality
description: "Given a Snowflake schema and clinical study ID, execute data quality validation rules and create Jira tasks for any failing checks. Use for automated data quality gates before database lock."
inputParameters:
- name: study_id
in: body
type: string
description: "The clinical study identifier to scope the quality checks."
- name: snowflake_schema
in: body
type: string
description: "The Snowflake schema containing clinical trial data, e.g. 'CLINICAL.STUDY_CA125'."
steps:
- name: run-checks
type: call
call: "snowflake.execute-quality-checks"
with:
schema: "{{snowflake_schema}}"
study_id: "{{study_id}}"
- name: create-dq-task
type: call
call: "jira.create-issue"
with:
project_key: "DG"
issuetype: "Task"
summary: "Data quality issues in study {{study_id}}: {{run-checks.failed_count}} checks failed"
description: "Schema: {{snowflake_schema}}\nFailed checks: {{run-checks.failed_count}}\nDetails: {{run-checks.summary}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bms.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: execute-quality-checks
method: POST
- type: http
namespace: jira
baseUri: "https://bms.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
Correlates security events.
naftiko: "0.5"
info:
title: Splunk BMS Security
version: "1.0"
description: Correlates security events.
tags: [security, compliance, healthcare, splunk]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: correlate_bms
description: Queries, escalates, notifies.
inputParameters:
- name: window
in: body
required: true
type: string
- name: type
in: body
required: true
type: string
steps:
- name: query
call:
operationId: searchEvents
input:
query: "index=security event_type={{type}}"
- name: escalate
call:
operationId: createIncident
input:
short_description: "Security: {{type}}"
urgency: "1"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "soc"
message: "Escalation: {{type}}."
consumes:
- type: http
baseUri: https://bms-splunk.com:8089/services
authentication:
type: bearer
token: $secrets.splunk_token
resources:
- path: /search/jobs
operations:
- id: searchEvents
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/incident
operations:
- id: createIncident
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Checks drug product inventory levels at a BMS distribution center.
naftiko: "0.5"
info:
title: Supply Chain Inventory Check
version: "1.0"
description: Checks drug product inventory levels at a BMS distribution center.
tags: [manufacturing, supply-chain, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: check_drug_inventory
description: Returns current stock level and reorder point.
inputParameters:
- name: product_code
in: query
required: true
type: string
- name: warehouse
in: query
required: true
type: string
call:
operationId: checkInventory
input:
productCode: "{{product_code}}"
warehouse: "{{warehouse}}"
outputParameters:
- name: quantity_on_hand
type: integer
- name: reorder_point
type: integer
- name: lot_number
type: string
consumes:
- type: http
baseUri: https://api.bms.com/supply-chain/v1
authentication:
type: bearer
token: $secrets.bms_supply_token
resources:
- path: /inventory/{productCode}
operations:
- id: checkInventory
method: GET
Provisions GxP infrastructure.
naftiko: "0.5"
info:
title: Terraform BMS Provisioner
version: "1.0"
description: Provisions GxP infrastructure.
tags: [infrastructure, devops, healthcare, terraform]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: provision_bms_env
description: Terraform, CMDB, notify.
inputParameters:
- name: env
in: body
required: true
type: string
- name: workspace
in: body
required: true
type: string
steps:
- name: apply
call:
operationId: triggerRun
input:
workspace: "{{workspace}}"
- name: register
call:
operationId: createCI
input:
name: "{{env}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "platform"
message: "Provisioned."
consumes:
- type: http
baseUri: https://app.terraform.io/api/v2
authentication:
type: bearer
token: $secrets.terraform_token
resources:
- path: /runs
operations:
- id: triggerRun
method: POST
- type: http
baseUri: https://bms.service-now.com/api/now/v1
authentication:
type: basic
username: $secrets.snow_user
password: $secrets.snow_password
resources:
- path: /table/cmdb_ci
operations:
- id: createCI
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams.
naftiko: "0.5"
info:
label: "Veeva Vault Document Approval Workflow"
description: "Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams."
tags:
- regulatory
- veeva
- microsoft-teams
- document-management
- approval
- compliance
capability:
exposes:
- type: mcp
namespace: document-ops
port: 8080
tools:
- name: initiate-document-approval
description: "Given a Veeva Vault document ID and list of approver emails, submit the document for approval in Vault, assign approvers, and send Teams notifications to each approver. Use for SOP revisions, regulatory filings, and quality document approvals."
inputParameters:
- name: vault_document_id
in: body
type: string
description: "The Veeva Vault document ID to submit for approval."
- name: approver_emails
in: body
type: string
description: "Comma-separated list of approver email addresses."
- name: due_date
in: body
type: string
description: "The approval due date in ISO 8601 format."
steps:
- name: submit-for-approval
type: call
call: "veeva.submit-document-approval"
with:
document_id: "{{vault_document_id}}"
- name: notify-approvers
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{approver_emails}}"
text: "Document {{vault_document_id}} requires your approval in Veeva Vault by {{due_date}}. Workflow: {{submit-for-approval.workflow_id}}."
consumes:
- type: http
namespace: veeva
baseUri: "https://bms.veevavault.com/api/v23.3"
authentication:
type: bearer
token: "$secrets.veeva_token"
resources:
- name: document-workflows
path: "/objects/documents/{{document_id}}/lifecycles"
inputParameters:
- name: document_id
in: path
operations:
- name: submit-document-approval
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Routes a regulatory document through multi-level approval in Veeva Vault and notifies stakeholders.
naftiko: "0.5"
info:
title: Veeva Vault Document Approval Chain
version: "1.0"
description: Routes a regulatory document through multi-level approval in Veeva Vault and notifies stakeholders.
tags: [regulatory, document-management, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: route_document_approval
description: Submits for review, gets approval, notifies.
inputParameters:
- name: document_id
in: body
required: true
type: string
- name: approver_group
in: body
required: true
type: string
steps:
- name: submit
call:
operationId: submitForReview
input:
documentId: "{{document_id}}"
approverGroup: "{{approver_group}}"
- name: approve
call:
operationId: getApprovalStatus
input:
documentId: "{{document_id}}"
- name: notify
call:
operationId: sendTeamsMessage
input:
channelId: "regulatory-docs"
message: "Document {{document_id}} approval status: {{approve.status}}."
consumes:
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /objects/documents/{documentId}/actions/submit
operations:
- id: submitForReview
method: POST
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /objects/documents/{documentId}/workflow
operations:
- id: getApprovalStatus
method: GET
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /teams/messages
operations:
- id: sendTeamsMessage
method: POST
Retrieves a regulatory document from Veeva Vault by document number.
naftiko: "0.5"
info:
title: Veeva Vault Document Lookup
version: "1.0"
description: Retrieves a regulatory document from Veeva Vault by document number.
tags: [regulatory, document-management, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: get_vault_document
description: Returns document metadata and approval status.
inputParameters:
- name: document_id
in: query
required: true
type: string
call:
operationId: getDocument
input:
documentId: "{{document_id}}"
outputParameters:
- name: title
type: string
- name: status
type: string
- name: version
type: string
consumes:
- type: http
baseUri: https://bms.veevavault.com/api/v23.1
authentication:
type: bearer
token: $secrets.veeva_token
resources:
- path: /objects/documents/{documentId}
operations:
- id: getDocument
method: GET
Syncs employee benefit elections.
naftiko: "0.5"
info:
title: Workday BMS Benefits Sync
version: "1.0"
description: Syncs employee benefit elections.
tags: [human-resources, workday, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: sync_bms_benefits
description: Gets, syncs, confirms.
inputParameters:
- name: eid
in: body
required: true
type: string
- name: period
in: body
required: true
type: string
steps:
- name: get
call:
operationId: getElections
input:
eid: "{{eid}}"
- name: sync
call:
operationId: syncBenefits
input:
eid: "{{eid}}"
- name: confirm
call:
operationId: sendEmail
input:
to: "{{eid}}@bms.com"
subject: "Benefits"
body: "Processed."
consumes:
- type: http
baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
authentication:
type: bearer
token: $secrets.workday_token
resources:
- path: /benefits/elections
operations:
- id: getElections
method: GET
- type: http
baseUri: https://api.bms.com/hr/v1
authentication:
type: bearer
token: $secrets.bms_hr_token
resources:
- path: /benefits/sync
operations:
- id: syncBenefits
method: POST
- type: http
baseUri: https://graph.microsoft.com/v1.0
authentication:
type: bearer
token: $secrets.ms_graph_token
resources:
- path: /me/sendMail
operations:
- id: sendEmail
method: POST
Onboards BMS staff.
naftiko: "0.5"
info:
title: Workday BMS Onboarding
version: "1.0"
description: Onboards BMS staff.
tags: [human-resources, workday, healthcare]
capability:
exposes:
type: mcp
port: 8080
tools:
- name: onboard_bms
description: Creates, provisions, trains.
inputParameters:
- name: eid
in: body
required: true
type: string
- name: dept
in: body
required: true
type: string
- name: role
in: body
required: true
type: string
steps:
- name: create
call:
operationId: createWorker
input:
eid: "{{eid}}"
dept: "{{dept}}"
- name: provision
call:
operationId: provisionAccess
input:
eid: "{{eid}}"
- name: train
call:
operationId: assignLearning
input:
eid: "{{eid}}"
courses: "GxP,HIPAA,Safety"
consumes:
- type: http
baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
authentication:
type: bearer
token: $secrets.workday_token
resources:
- path: /workers
operations:
- id: createWorker
method: POST
- type: http
baseUri: https://bms.okta.com/api/v1
authentication:
type: bearer
token: $secrets.okta_token
resources:
- path: /apps/assignments
operations:
- id: provisionAccess
method: POST
- type: http
baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
authentication:
type: bearer
token: $secrets.workday_token
resources:
- path: /learning/assignments
operations:
- id: assignLearning
method: POST
Returns current headcount by department and cost center from Workday for finance planning, headcount budgeting, and HR reporting.
naftiko: "0.5"
info:
label: "Workday Headcount and Payroll Snapshot"
description: "Returns current headcount by department and cost center from Workday for finance planning, headcount budgeting, and HR reporting."
tags:
- hr
- finance
- workday
- reporting
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns all active employees with department, cost center, and employment type from Workday. Use for headcount planning, finance budgeting, and HR analytics."
call: "workday.list-workers"
outputParameters:
- name: employees
type: array
mapping: "$.data[*]"
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: "/bms/workers"
operations:
- name: list-workers
method: GET
When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions.
naftiko: "0.5"
info:
label: "Workday Open Role Requisition Creator"
description: "When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions."
tags:
- hr
- recruiting
- workday
- linkedin
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: create-job-requisition
description: "Given a Workday department ID, role title, grade level, and hiring manager ID, create a job requisition in Workday and publish the job posting to LinkedIn. Use when a headcount request is approved."
inputParameters:
- name: department_id
in: body
type: string
description: "The Workday department ID for the open role."
- name: role_title
in: body
type: string
description: "The job title for the open position."
- name: hiring_manager_id
in: body
type: string
description: "The Workday worker ID of the hiring manager."
steps:
- name: get-manager
type: call
call: "workday.get-worker"
with:
worker_id: "{{hiring_manager_id}}"
- name: create-requisition
type: call
call: "workday-rec.create-job-req"
with:
department_id: "{{department_id}}"
title: "{{role_title}}"
manager_id: "{{hiring_manager_id}}"
- name: post-linkedin
type: call
call: "linkedin.create-job-posting"
with:
title: "{{role_title}}"
company_id: "$secrets.bms_linkedin_company_id"
req_id: "{{create-requisition.id}}"
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: "/bms/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: workday-rec
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/bms/recruiting/jobRequisitions"
operations:
- name: create-job-req
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: create-job-posting
method: POST
Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Kickoff"
description: "Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams."
tags:
- hr
- performance-management
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: kickoff-review-cycle
description: "Given a Workday division ID and review cycle period, initiate the performance review process, create a Jira tracking epic, and notify HR business partners in Teams. Use at the start of each semi-annual performance review period."
inputParameters:
- name: division_id
in: body
type: string
description: "The Workday division or department ID."
- name: review_period
in: body
type: string
description: "The review cycle label, e.g. 'H1-2026'."
steps:
- name: initiate-review
type: call
call: "workday.create-review-process"
with:
division_id: "{{division_id}}"
period: "{{review_period}}"
- name: create-epic
type: call
call: "jira.create-issue"
with:
project_key: "HR"
issuetype: "Epic"
summary: "Performance Review {{review_period}} — {{division_id}}"
- name: notify-hrbp
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hrbp_channel_id"
text: "Performance review {{review_period}} initiated for division {{division_id}}. Jira epic: {{create-epic.key}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-processes
path: "/bms/performanceManagement/reviewProcesses"
operations:
- name: create-review-process
method: POST
- type: http
namespace: jira
baseUri: "https://bms.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
- 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: post-channel-message
method: POST