Becton Dickinson Capabilities
Naftiko 0.5 capability definitions for Becton Dickinson - 100 capabilities showing integration workflows and service orchestrations.
Retrieves a file from Amazon S3, such as clinical data exports or regulatory submission documents.
naftiko: "0.5"
info:
label: "Amazon S3 File Retrieval"
description: "Retrieves a file from Amazon S3, such as clinical data exports or regulatory submission documents."
tags:
- medical-devices
- amazon-s3
capability:
exposes:
- type: mcp
namespace: s3
port: 8080
tools:
- name: get-file
description: "Retrieve a file from Amazon S3."
inputParameters:
- name: bucket
in: body
type: string
description: "S3 bucket."
- name: key
in: body
type: string
description: "Object key."
call: "s3.get-object"
with:
bucket: "{{bucket}}"
key: "{{key}}"
outputParameters:
- name: content_type
type: string
mapping: "$.ContentType"
- name: size
type: number
mapping: "$.ContentLength"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: get-object
method: GET
Compiles annual product review data by querying Snowflake for yearly quality metrics, creating review tasks in Jira, and distributing the report via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Annual Product Review Pipeline"
description: "Compiles annual product review data by querying Snowflake for yearly quality metrics, creating review tasks in Jira, and distributing the report via Microsoft Outlook."
tags:
- medical-devices
- snowflake
- jira
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: apr
port: 8080
tools:
- name: generate-annual-review
description: "Orchestrate annual product review."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: year
in: body
type: string
description: "Review year."
steps:
- name: get-annual-data
type: call
call: "snowflake.get-annual-metrics"
with:
product_code: "{{product_code}}"
year: "{{year}}"
- name: create-review
type: call
call: "jira.create-issue"
with:
project: "QA"
summary: "Annual Product Review: {{product_code}} - {{year}}"
issue_type: "Epic"
- name: distribute
type: call
call: "outlook.send-email"
with:
to: "quality-leadership@bd.com"
subject: "Annual Product Review: {{product_code}} - {{year}}"
body: "Complaints: {{get-annual-data.complaint_count}}. CAPAs: {{get-annual-data.capa_count}}. Lots produced: {{get-annual-data.lot_count}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-annual-metrics
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Creates an Azure AD security group for a new project team.
naftiko: "0.5"
info:
label: "Azure Active Directory Group Provisioner"
description: "Creates an Azure AD security group for a new project team."
tags:
- identity
- azure-active-directory
capability:
exposes:
- type: mcp
namespace: identity-mgmt
port: 8080
tools:
- name: create-project-group
description: "Create an Azure AD group for a project team."
inputParameters:
- name: project_name
in: body
type: string
description: "Project name."
- name: owner_email
in: body
type: string
description: "Group owner email."
steps:
- name: create-group
type: call
call: "azuread.create-group"
with:
display_name: "BD-{{project_name}}"
owner: "{{owner_email}}"
- name: notify-owner
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{owner_email}}"
text: "Azure AD group created: BD-{{project_name}}. Group ID: {{create-group.id}}."
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: groups
path: "/groups"
operations:
- name: create-group
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/chat/messages"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Looks up a user in Azure Active Directory by UPN, returning profile and department details.
naftiko: "0.5"
info:
label: "Azure Active Directory User Lookup"
description: "Looks up a user in Azure Active Directory by UPN, returning profile and department details."
tags:
- medical-devices
- azure-active-directory
capability:
exposes:
- type: mcp
namespace: aad
port: 8080
tools:
- name: lookup-user
description: "Look up user in Azure AD."
inputParameters:
- name: upn
in: body
type: string
description: "User principal name."
call: "aad.get-user"
with:
upn: "{{upn}}"
outputParameters:
- name: display_name
type: string
mapping: "$.displayName"
- name: department
type: string
mapping: "$.department"
consumes:
- type: http
namespace: aad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{upn}}"
inputParameters:
- name: upn
in: path
operations:
- name: get-user
method: GET
Retrieves the latest build status for an Azure DevOps pipeline.
naftiko: "0.5"
info:
label: "Azure DevOps Pipeline Status"
description: "Retrieves the latest build status for an Azure DevOps pipeline."
tags:
- devops
- ci-cd
- azure-devops
capability:
exposes:
- type: mcp
namespace: cicd
port: 8080
tools:
- name: get-build-status
description: "Check the latest Azure DevOps build status."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
call: "azdo.get-latest-build"
with:
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: result
type: string
mapping: "$.value[0].result"
- name: finish_time
type: string
mapping: "$.value[0].finishTime"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/bd/MedTech/_apis/build"
authentication:
type: basic
username: ""
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: get-latest-build
method: GET
Retrieves a secret from Azure Key Vault for use in downstream integrations and automation.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retrieval"
description: "Retrieves a secret from Azure Key Vault for use in downstream integrations and automation."
tags:
- medical-devices
- azure-key-vault
capability:
exposes:
- type: mcp
namespace: azure-kv
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret from Azure Key Vault."
inputParameters:
- name: secret_name
in: body
type: string
description: "Secret name."
call: "azure-kv.get-secret"
with:
secret_name: "{{secret_name}}"
outputParameters:
- name: value
type: string
mapping: "$.value"
consumes:
- type: http
namespace: azure-kv
baseUri: "https://bd-vault.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_kv_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Retrieves a secret from Azure Key Vault for use in automated workflows.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retriever"
description: "Retrieves a secret from Azure Key Vault for use in automated workflows."
tags:
- security
- azure-key-vault
capability:
exposes:
- type: mcp
namespace: secrets
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret from Azure Key Vault."
inputParameters:
- name: secret_name
in: body
type: string
description: "Secret name."
call: "keyvault.get-secret"
with:
secret_name: "{{secret_name}}"
outputParameters:
- name: value
type: string
mapping: "$.value"
consumes:
- type: http
namespace: keyvault
baseUri: "https://bd-vault.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Manages biocompatibility testing by creating test protocols in Jira, logging results in Google Sheets, uploading reports to SharePoint, and notifying the biocompatibility team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Biocompatibility Testing Pipeline"
description: "Manages biocompatibility testing by creating test protocols in Jira, logging results in Google Sheets, uploading reports to SharePoint, and notifying the biocompatibility team via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: biocompat
port: 8080
tools:
- name: process-biocompat-test
description: "Orchestrate biocompatibility testing workflow."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: test_type
in: body
type: string
description: "ISO 10993 test type."
- name: result
in: body
type: string
description: "Pass or fail."
steps:
- name: log-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_biocompat"
data: "{{product_code}},{{test_type}},{{result}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "BIOCOMP"
summary: "Biocompatibility {{test_type}}: {{product_code}} - {{result}}"
issue_type: "Task"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "biocompatibility"
text: "Biocompatibility {{test_type}} for {{product_code}}: {{result}}. Task: {{create-task.issue_key}}."
consumes:
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Retrieves a regulatory or quality document from Box cloud storage by file ID.
naftiko: "0.5"
info:
label: "Box Document Retrieval"
description: "Retrieves a regulatory or quality document from Box cloud storage by file ID."
tags:
- medical-devices
- box
capability:
exposes:
- type: mcp
namespace: box
port: 8080
tools:
- name: get-document
description: "Retrieve a document from Box."
inputParameters:
- name: file_id
in: body
type: string
description: "Box file ID."
call: "box.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: download_url
type: string
mapping: "$.shared_link.download_url"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Processes a Corrective and Preventive Action by creating the CAPA in Jira, logging in Google Sheets, uploading investigation documents to SharePoint, and alerting the quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "CAPA Corrective Action Pipeline"
description: "Processes a Corrective and Preventive Action by creating the CAPA in Jira, logging in Google Sheets, uploading investigation documents to SharePoint, and alerting the quality team via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: capa
port: 8080
tools:
- name: initiate-capa
description: "Orchestrate CAPA initiation and tracking."
inputParameters:
- name: description
in: body
type: string
description: "CAPA description."
- name: source
in: body
type: string
description: "Source of nonconformance."
- name: severity
in: body
type: string
description: "Severity level."
steps:
- name: create-capa
type: call
call: "jira.create-issue"
with:
project: "CAPA"
summary: "CAPA: {{description}}"
issue_type: "Bug"
priority: "{{severity}}"
- name: log-capa
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_capa_log"
data: "{{create-capa.issue_key}},{{source}},{{severity}},open"
- name: notify-quality
type: call
call: "msteams.send-message"
with:
channel_id: "quality"
text: "CAPA {{create-capa.issue_key}} initiated: {{description}}. Source: {{source}}. Severity: {{severity}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the health status of a Cisco network device in the manufacturing facility network.
naftiko: "0.5"
info:
label: "Cisco Network Device Health"
description: "Checks the health status of a Cisco network device in the manufacturing facility network."
tags:
- medical-devices
- cisco
capability:
exposes:
- type: mcp
namespace: cisco
port: 8080
tools:
- name: get-device-health
description: "Check Cisco network device health."
inputParameters:
- name: device_id
in: body
type: string
description: "Device ID."
call: "cisco.get-device"
with:
device_id: "{{device_id}}"
outputParameters:
- name: status
type: string
mapping: "$.response.reachabilityStatus"
- name: uptime
type: string
mapping: "$.response.upTime"
consumes:
- type: http
namespace: cisco
baseUri: "https://cisco-dnac.bd.com/dna/intent/api/v1"
authentication:
type: bearer
token: "$secrets.cisco_token"
resources:
- name: devices
path: "/network-device/{{device_id}}"
inputParameters:
- name: device_id
in: path
operations:
- name: get-device
method: GET
Checks the status of a Cisco network device in BD facilities.
naftiko: "0.5"
info:
label: "Cisco Network Device Status"
description: "Checks the status of a Cisco network device in BD facilities."
tags:
- infrastructure
- networking
- cisco
capability:
exposes:
- type: mcp
namespace: network
port: 8080
tools:
- name: check-device
description: "Check a Cisco device status."
inputParameters:
- name: device_id
in: body
type: string
description: "Device ID."
call: "cisco.get-device"
with:
device_id: "{{device_id}}"
outputParameters:
- name: status
type: string
mapping: "$.device.reachabilityStatus"
- name: hostname
type: string
mapping: "$.device.hostname"
consumes:
- type: http
namespace: cisco
baseUri: "https://dnac.bd.com/dna/intent/api/v1"
authentication:
type: bearer
token: "$secrets.cisco_dnac_token"
resources:
- name: devices
path: "/network-device/{{device_id}}"
inputParameters:
- name: device_id
in: path
operations:
- name: get-device
method: GET
Handles cleanroom environmental excursions by logging the event in ServiceNow, creating a CAPA task in Jira, alerting manufacturing via Microsoft Teams, and recording in Google Sheets.
naftiko: "0.5"
info:
label: "Cleanroom Environmental Excursion Pipeline"
description: "Handles cleanroom environmental excursions by logging the event in ServiceNow, creating a CAPA task in Jira, alerting manufacturing via Microsoft Teams, and recording in Google Sheets."
tags:
- medical-devices
- servicenow
- jira
- microsoft-teams
- google-sheets
capability:
exposes:
- type: mcp
namespace: cleanroom-excursion
port: 8080
tools:
- name: report-excursion
description: "Orchestrate cleanroom environmental excursion response."
inputParameters:
- name: room_id
in: body
type: string
description: "Cleanroom ID."
- name: parameter
in: body
type: string
description: "Parameter out of spec (temp, humidity, particles)."
- name: value
in: body
type: string
description: "Recorded value."
steps:
- name: log-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Cleanroom excursion: {{room_id}} - {{parameter}}"
description: "{{parameter}} reading of {{value}} exceeds limits in {{room_id}}."
urgency: "1"
- name: create-capa
type: call
call: "jira.create-issue"
with:
project: "CAPA"
summary: "Cleanroom excursion: {{room_id}} {{parameter}}={{value}}"
issue_type: "Bug"
- name: alert-mfg
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing"
text: "CLEANROOM EXCURSION: {{room_id}} {{parameter}}={{value}}. Incident: {{log-incident.incident_number}}. CAPA: {{create-capa.issue_key}}."
- name: record
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_env_monitoring"
data: "{{room_id}},{{parameter}},{{value}},{{log-incident.incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
When clinical trial data is collected, syncs results to the Snowflake data warehouse, triggers an Azure Data Factory pipeline for ETL processing, and notifies the clinical team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Clinical Trial Data Sync Pipeline"
description: "When clinical trial data is collected, syncs results to the Snowflake data warehouse, triggers an Azure Data Factory pipeline for ETL processing, and notifies the clinical team in Microsoft Teams."
tags:
- clinical-trials
- data-engineering
- snowflake
- azure-data-factory
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-data
port: 8080
tools:
- name: sync-trial-data
description: "Sync clinical trial data to the analytics platform and notify the clinical team."
inputParameters:
- name: trial_id
in: body
type: string
description: "Clinical trial identifier."
- name: data_batch_id
in: body
type: string
description: "Data batch identifier."
- name: record_count
in: body
type: number
description: "Number of records in the batch."
steps:
- name: load-to-snowflake
type: call
call: "snowflake.load-data"
with:
database: "clinical_trials"
schema: "trial_{{trial_id}}"
batch_id: "{{data_batch_id}}"
- name: trigger-etl
type: call
call: "adf.trigger-pipeline"
with:
pipeline_name: "clinical_trial_etl"
parameters:
trial_id: "{{trial_id}}"
batch_id: "{{data_batch_id}}"
- name: notify-clinical
type: call
call: "msteams.send-message"
with:
channel_id: "clinical_trials"
text: "Trial {{trial_id}} data batch {{data_batch_id}} loaded: {{record_count}} records. ETL pipeline triggered."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: data-loading
path: "/statements"
operations:
- name: load-data
method: POST
- type: http
namespace: adf
baseUri: "https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/bd-data/providers/Microsoft.DataFactory/factories/bd-adf"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: trigger-pipeline
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors cold chain shipments by checking IoT sensor data via Datadog, alerting logistics if temperatures exceed limits via Microsoft Teams, creating incidents in ServiceNow, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "Cold Chain Monitoring Pipeline"
description: "Monitors cold chain shipments by checking IoT sensor data via Datadog, alerting logistics if temperatures exceed limits via Microsoft Teams, creating incidents in ServiceNow, and logging in Google Sheets."
tags:
- medical-devices
- datadog
- microsoft-teams
- servicenow
- google-sheets
capability:
exposes:
- type: mcp
namespace: cold-chain
port: 8080
tools:
- name: check-cold-chain
description: "Orchestrate cold chain monitoring check."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment ID."
steps:
- name: get-temp-data
type: call
call: "datadog.get-metrics"
with:
query: "shipment.temperature{shipment_id:{{shipment_id}}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Cold chain excursion: Shipment {{shipment_id}}"
description: "Temperature: {{get-temp-data.current_temp}}. Limit exceeded."
urgency: "1"
- name: alert-logistics
type: call
call: "msteams.send-message"
with:
channel_id: "logistics"
text: "COLD CHAIN ALERT: Shipment {{shipment_id}}. Temp: {{get-temp-data.current_temp}}. Incident: {{create-incident.incident_number}}."
- name: log-excursion
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_cold_chain"
data: "{{shipment_id}},{{get-temp-data.current_temp}},{{create-incident.incident_number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
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: send-message
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Searches Confluence for medical device procedures and standards.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Search"
description: "Searches Confluence for medical device procedures and standards."
tags:
- collaboration
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-procedures
description: "Search Confluence for procedures and standards."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
call: "confluence.search"
with:
cql: "text ~ \"{{query}}\" and space in (SOP, QMS)"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: total
type: number
mapping: "$.totalSize"
consumes:
- type: http
namespace: confluence
baseUri: "https://bd.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
Manages contract manufacturer quality by pulling quality metrics from Snowflake, comparing against specs in SAP, logging in Google Sheets, and alerting supply chain via Microsoft Teams.
naftiko: "0.5"
info:
label: "Contract Manufacturing Quality Pipeline"
description: "Manages contract manufacturer quality by pulling quality metrics from Snowflake, comparing against specs in SAP, logging in Google Sheets, and alerting supply chain via Microsoft Teams."
tags:
- medical-devices
- snowflake
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cmo-quality
port: 8080
tools:
- name: review-cmo-quality
description: "Orchestrate contract manufacturer quality review."
inputParameters:
- name: cmo_id
in: body
type: string
description: "Contract manufacturer ID."
- name: period
in: body
type: string
description: "Review period."
steps:
- name: get-quality-data
type: call
call: "snowflake.get-cmo-metrics"
with:
cmo_id: "{{cmo_id}}"
period: "{{period}}"
- name: log-review
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_cmo_quality"
data: "{{cmo_id}},{{period}},{{get-quality-data.defect_rate}},{{get-quality-data.on_time_pct}}"
- name: notify-supply-chain
type: call
call: "msteams.send-message"
with:
channel_id: "supply_chain"
text: "CMO quality review: {{cmo_id}} ({{period}}). Defect rate: {{get-quality-data.defect_rate}}%. On-time: {{get-quality-data.on_time_pct}}%."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-cmo-metrics
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triages customer complaints by creating a Salesforce case, routing to the appropriate team in Jira, logging in Google Sheets, and notifying customer service leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Complaint Triage Pipeline"
description: "Triages customer complaints by creating a Salesforce case, routing to the appropriate team in Jira, logging in Google Sheets, and notifying customer service leadership via Microsoft Teams."
tags:
- medical-devices
- salesforce
- jira
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-triage
port: 8080
tools:
- name: triage-complaint
description: "Orchestrate customer complaint triage."
inputParameters:
- name: customer_name
in: body
type: string
description: "Customer name."
- name: product_code
in: body
type: string
description: "Product code."
- name: complaint_text
in: body
type: string
description: "Complaint description."
steps:
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Complaint: {{product_code}} - {{customer_name}}"
description: "{{complaint_text}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "QC"
summary: "Customer complaint: {{product_code}}"
description: "{{complaint_text}}"
issue_type: "Bug"
- name: log-complaint
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_complaints"
data: "{{customer_name}},{{product_code}},{{create-case.case_number}},{{create-task.issue_key}}"
- name: notify-leadership
type: call
call: "msteams.send-message"
with:
channel_id: "customer_service"
text: "Complaint: {{product_code}} from {{customer_name}}. Case: {{create-case.case_number}}. QC: {{create-task.issue_key}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Datadog for health status of BD IT services.
naftiko: "0.5"
info:
label: "Datadog Service Health Monitor"
description: "Queries Datadog for health status of BD IT services."
tags:
- monitoring
- devops
- datadog
capability:
exposes:
- type: mcp
namespace: service-health
port: 8080
tools:
- name: get-service-health
description: "Check service health in Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "Service name."
call: "datadog.get-service-status"
with:
service_name: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
- name: uptime_pct
type: number
mapping: "$.uptime_percentage"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: monitors
path: "/monitor/search?query=service:{{service_name}}"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-status
method: GET
Manages design control document reviews by uploading documents to SharePoint, creating review tasks in Jira, and notifying the design team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Design Control Document Review Pipeline"
description: "Manages design control document reviews by uploading documents to SharePoint, creating review tasks in Jira, and notifying the design team via Microsoft Teams."
tags:
- medical-devices
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: design-review
port: 8080
tools:
- name: submit-design-document
description: "Orchestrate design control document review."
inputParameters:
- name: document_title
in: body
type: string
description: "Document title."
- name: document_type
in: body
type: string
description: "DHF, DMR, or DHR."
- name: product_code
in: body
type: string
description: "Product code."
steps:
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project: "DESIGN"
summary: "Review {{document_type}}: {{document_title}}"
issue_type: "Task"
- name: notify-design-team
type: call
call: "msteams.send-message"
with:
channel_id: "design_engineering"
text: "Design document review: {{document_title}} ({{document_type}}) for {{product_code}}. Review task: {{create-review-task.issue_key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Processes manufacturing deviations by creating investigation records in Jira, logging in Google Sheets, uploading investigation reports to SharePoint, and notifying QA via Microsoft Teams.
naftiko: "0.5"
info:
label: "Deviation Investigation Pipeline"
description: "Processes manufacturing deviations by creating investigation records in Jira, logging in Google Sheets, uploading investigation reports to SharePoint, and notifying QA via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: deviation
port: 8080
tools:
- name: report-deviation
description: "Orchestrate manufacturing deviation investigation."
inputParameters:
- name: deviation_type
in: body
type: string
description: "Deviation type."
- name: description
in: body
type: string
description: "Deviation description."
- name: line_id
in: body
type: string
description: "Production line ID."
steps:
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project: "DEV"
summary: "Deviation: {{deviation_type}} on {{line_id}}"
description: "{{description}}"
issue_type: "Bug"
- name: log-deviation
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_deviations"
data: "{{create-investigation.issue_key}},{{deviation_type}},{{line_id}}"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel_id: "quality_assurance"
text: "Deviation: {{deviation_type}} on line {{line_id}}. Investigation: {{create-investigation.issue_key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a BD medical device is installed at a hospital, records the installation in Salesforce, creates a ServiceNow configuration item, and notifies the field service team.
naftiko: "0.5"
info:
label: "Device Installation Tracker"
description: "When a BD medical device is installed at a hospital, records the installation in Salesforce, creates a ServiceNow configuration item, and notifies the field service team."
tags:
- medical-devices
- field-service
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: device-install
port: 8080
tools:
- name: record-installation
description: "Record a device installation across CRM, CMDB, and field service systems."
inputParameters:
- name: device_serial
in: body
type: string
description: "Device serial number."
- name: hospital_account_id
in: body
type: string
description: "Salesforce hospital account ID."
- name: install_date
in: body
type: string
description: "Installation date."
steps:
- name: create-asset
type: call
call: "salesforce.create-asset"
with:
serial_number: "{{device_serial}}"
account_id: "{{hospital_account_id}}"
install_date: "{{install_date}}"
- name: create-ci
type: call
call: "servicenow.create-ci"
with:
name: "{{device_serial}}"
serial_number: "{{device_serial}}"
install_date: "{{install_date}}"
- name: notify-field
type: call
call: "msteams.send-message"
with:
channel_id: "field_service"
text: "Device {{device_serial}} installed at account {{hospital_account_id}} on {{install_date}}. Asset: {{create-asset.id}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: assets
path: "/sobjects/Asset"
operations:
- name: create-asset
method: POST
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a sterilization cycle is completed, records the results in the MES, triggers a validation check in the QMS, and notifies the sterilization team.
naftiko: "0.5"
info:
label: "Device Sterilization Validation Pipeline"
description: "When a sterilization cycle is completed, records the results in the MES, triggers a validation check in the QMS, and notifies the sterilization team."
tags:
- manufacturing
- quality
- sterilization
- medical-devices
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sterilization
port: 8080
tools:
- name: validate-sterilization
description: "Record and validate a sterilization cycle."
inputParameters:
- name: cycle_id
in: body
type: string
description: "Sterilization cycle ID."
- name: batch_id
in: body
type: string
description: "Product batch ID."
- name: method
in: body
type: string
description: "Sterilization method such as EtO, gamma, or steam."
steps:
- name: record-cycle
type: call
call: "mes.record-sterilization"
with:
cycle_id: "{{cycle_id}}"
batch_id: "{{batch_id}}"
method: "{{method}}"
- name: validate
type: call
call: "qms.validate-sterilization"
with:
cycle_id: "{{cycle_id}}"
parameters: "{{record-cycle.cycle_parameters}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "sterilization_ops"
text: "Sterilization cycle {{cycle_id}} ({{method}}) for batch {{batch_id}}: Validation {{validate.result}}."
consumes:
- type: http
namespace: mes
baseUri: "https://mes.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.mes_token"
resources:
- name: sterilization
path: "/sterilization/cycles/{{cycle_id}}"
inputParameters:
- name: cycle_id
in: path
operations:
- name: record-sterilization
method: POST
- type: http
namespace: qms
baseUri: "https://qms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qms_token"
resources:
- name: validations
path: "/sterilization-validations"
operations:
- name: validate-sterilization
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Dynatrace for application performance metrics of BD manufacturing systems.
naftiko: "0.5"
info:
label: "Dynatrace Application Performance Monitor"
description: "Queries Dynatrace for application performance metrics of BD manufacturing systems."
tags:
- monitoring
- dynatrace
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-metrics
description: "Retrieve application metrics from Dynatrace."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace entity ID."
call: "dynatrace.get-metrics"
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: response_time
type: number
mapping: "$.dataPoints[0].values[0]"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://bd.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query?entitySelector=entityId({{entity_id}})"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-metrics
method: GET
When a new scientist or engineer is hired in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint folder, configures lab access, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new scientist or engineer is hired in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint folder, configures lab access, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Run the full onboarding workflow for a new BD employee."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
- name: start_date
in: body
type: string
description: "Start date."
- name: department
in: body
type: string
description: "Department."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
description: "New hire {{get-employee.full_name}} starting {{start_date}} in {{department}}. Lab access and badge required."
- name: create-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding"
folder_path: "Employees/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
channel_id: "{{department}}_team"
text: "Welcome {{get-employee.first_name}} to BD {{department}}! Starting {{start_date}}. Onboarding ticket: {{create-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages employee safety training by assigning courses in Workday, creating tracking tasks in Jira, and notifying EHS via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Safety Training Pipeline"
description: "Manages employee safety training by assigning courses in Workday, creating tracking tasks in Jira, and notifying EHS via Microsoft Teams."
tags:
- medical-devices
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety-training
port: 8080
tools:
- name: assign-safety-training
description: "Orchestrate safety training assignment."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
- name: course_name
in: body
type: string
description: "Safety course name."
steps:
- name: assign-course
type: call
call: "workday.assign-training"
with:
employee_id: "{{employee_id}}"
course: "{{course_name}}"
- name: create-tracking
type: call
call: "jira.create-issue"
with:
project: "EHS"
summary: "Safety training: {{employee_id}} - {{course_name}}"
issue_type: "Task"
- name: notify-ehs
type: call
call: "msteams.send-message"
with:
channel_id: "ehs"
text: "Safety training assigned: {{employee_id}} - {{course_name}}. Tracking: {{create-tracking.issue_key}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/bd"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/workers/{{employee_id}}/training"
inputParameters:
- name: employee_id
in: path
operations:
- name: assign-training
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Processes engineering change orders by creating the ECO in Jira, updating the BOM in SAP, uploading revised drawings to SharePoint, and notifying the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Engineering Change Order Pipeline"
description: "Processes engineering change orders by creating the ECO in Jira, updating the BOM in SAP, uploading revised drawings to SharePoint, and notifying the engineering team via Microsoft Teams."
tags:
- medical-devices
- jira
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: eco
port: 8080
tools:
- name: process-eco
description: "Orchestrate engineering change order processing."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: change_description
in: body
type: string
description: "Change description."
- name: impact_level
in: body
type: string
description: "Impact level."
steps:
- name: create-eco
type: call
call: "jira.create-issue"
with:
project: "ECO"
summary: "ECO: {{product_code}} - {{change_description}}"
issue_type: "Task"
priority: "{{impact_level}}"
- name: update-bom
type: call
call: "sap.update-bom"
with:
product_code: "{{product_code}}"
eco_ref: "{{create-eco.issue_key}}"
- name: notify-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "engineering"
text: "ECO {{create-eco.issue_key}}: {{product_code}} - {{change_description}}. Impact: {{impact_level}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: bom
path: "/API_BOM_SRV/BillOfMaterial"
operations:
- name: update-bom
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: send-message
method: POST
Retrieves cleanroom environmental monitoring data from facility sensors including temperature, humidity, and particle counts.
naftiko: "0.5"
info:
label: "Environmental Monitoring Data Collector"
description: "Retrieves cleanroom environmental monitoring data from facility sensors including temperature, humidity, and particle counts."
tags:
- manufacturing
- quality
- environmental-monitoring
capability:
exposes:
- type: mcp
namespace: env-monitoring
port: 8080
tools:
- name: get-cleanroom-data
description: "Retrieve cleanroom environmental conditions."
inputParameters:
- name: room_id
in: body
type: string
description: "Cleanroom identifier."
- name: date
in: body
type: string
description: "Date for data retrieval."
call: "env-sensors.get-readings"
with:
room_id: "{{room_id}}"
date: "{{date}}"
outputParameters:
- name: temperature
type: number
mapping: "$.readings.temperature_avg"
- name: humidity
type: number
mapping: "$.readings.humidity_avg"
- name: particle_count
type: number
mapping: "$.readings.particle_count_avg"
- name: compliance_status
type: string
mapping: "$.readings.compliance"
consumes:
- type: http
namespace: env-sensors
baseUri: "https://envmon.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.envmon_token"
resources:
- name: readings
path: "/rooms/{{room_id}}/readings/{{date}}"
inputParameters:
- name: room_id
in: path
- name: date
in: path
operations:
- name: get-readings
method: GET
Manages equipment validation by creating a protocol in Jira, scheduling calibration in SAP, uploading validation documents to SharePoint, and notifying the validation team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Equipment Validation Protocol Pipeline"
description: "Manages equipment validation by creating a protocol in Jira, scheduling calibration in SAP, uploading validation documents to SharePoint, and notifying the validation team via Microsoft Teams."
tags:
- medical-devices
- jira
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: equip-validation
port: 8080
tools:
- name: validate-equipment
description: "Orchestrate equipment validation protocol execution."
inputParameters:
- name: equipment_id
in: body
type: string
description: "Equipment ID."
- name: protocol_type
in: body
type: string
description: "Validation protocol type (IQ/OQ/PQ)."
steps:
- name: create-protocol
type: call
call: "jira.create-issue"
with:
project: "VAL"
summary: "{{protocol_type}} Validation: {{equipment_id}}"
issue_type: "Task"
- name: schedule-calibration
type: call
call: "sap.create-maintenance-order"
with:
equipment_id: "{{equipment_id}}"
order_type: "calibration"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "validation"
text: "Equipment validation initiated: {{equipment_id}} ({{protocol_type}}). Protocol: {{create-protocol.issue_key}}. Calibration: {{schedule-calibration.order_number}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: maintenance
path: "/API_MAINTORDER_SRV/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an adverse event is reported, creates a CAPA in the QMS, files an FDA MedWatch report, uploads documentation to SharePoint, and alerts the regulatory team.
naftiko: "0.5"
info:
label: "FDA Adverse Event Reporter"
description: "When an adverse event is reported, creates a CAPA in the QMS, files an FDA MedWatch report, uploads documentation to SharePoint, and alerts the regulatory team."
tags:
- regulatory
- medical-devices
- quality
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: adverse-events
port: 8080
tools:
- name: report-adverse-event
description: "Process an adverse event report through regulatory and quality systems."
inputParameters:
- name: event_id
in: body
type: string
description: "Adverse event ID."
- name: product_id
in: body
type: string
description: "Product ID."
- name: description
in: body
type: string
description: "Event description."
- name: patient_outcome
in: body
type: string
description: "Patient outcome."
steps:
- name: create-capa
type: call
call: "qms.create-capa"
with:
event_id: "{{event_id}}"
product_id: "{{product_id}}"
description: "{{description}}"
severity: "critical"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "regulatory_affairs"
folder_path: "AdverseEvents/{{product_id}}"
file_name: "ae_report_{{event_id}}.pdf"
- name: alert-regulatory
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_urgent"
text: "ADVERSE EVENT: {{event_id}} for product {{product_id}}. Outcome: {{patient_outcome}}. CAPA: {{create-capa.capa_number}}."
consumes:
- type: http
namespace: qms
baseUri: "https://qms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qms_token"
resources:
- name: capas
path: "/capas"
operations:
- name: create-capa
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes a field corrective action by creating a ServiceNow case, alerting regulatory affairs via Microsoft Teams, notifying affected hospitals via Microsoft Outlook, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "Field Corrective Action Pipeline"
description: "Processes a field corrective action by creating a ServiceNow case, alerting regulatory affairs via Microsoft Teams, notifying affected hospitals via Microsoft Outlook, and logging in Google Sheets."
tags:
- medical-devices
- servicenow
- microsoft-teams
- microsoft-outlook
- google-sheets
capability:
exposes:
- type: mcp
namespace: fca
port: 8080
tools:
- name: initiate-field-correction
description: "Orchestrate field corrective action."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: lot_numbers
in: body
type: string
description: "Affected lot numbers."
- name: issue_description
in: body
type: string
description: "Issue description."
steps:
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Field Corrective Action: {{product_code}}"
description: "{{issue_description}}. Affected lots: {{lot_numbers}}."
urgency: "1"
- name: alert-regulatory
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "FIELD CORRECTIVE ACTION: {{product_code}}. Lots: {{lot_numbers}}. Case: {{create-case.incident_number}}. FDA notification may be required."
- name: notify-hospitals
type: call
call: "outlook.send-email"
with:
to: "customer-notifications@bd.com"
subject: "Urgent Field Corrective Action: {{product_code}}"
body: "{{issue_description}}. Affected lots: {{lot_numbers}}. Please quarantine affected inventory."
- name: log-fca
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_fca_log"
data: "{{product_code}},{{lot_numbers}},{{create-case.incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
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: send-message
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Checks the status of a GitHub Actions CI/CD workflow run for medical device software repositories.
naftiko: "0.5"
info:
label: "GitHub Actions Build Status"
description: "Checks the status of a GitHub Actions CI/CD workflow run for medical device software repositories."
tags:
- medical-devices
- github-actions
capability:
exposes:
- type: mcp
namespace: github
port: 8080
tools:
- name: get-build-status
description: "Check GitHub Actions workflow status."
inputParameters:
- name: repo
in: body
type: string
description: "Repository name."
- name: run_id
in: body
type: string
description: "Workflow run ID."
call: "github.get-run"
with:
repo: "{{repo}}"
run_id: "{{run_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: conclusion
type: string
mapping: "$.conclusion"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: runs
path: "/repos/bd/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-run
method: GET
Retrieves a document from Google Drive by file ID for regulatory or clinical documentation.
naftiko: "0.5"
info:
label: "Google Drive Document Retrieval"
description: "Retrieves a document from Google Drive by file ID for regulatory or clinical documentation."
tags:
- medical-devices
- google-drive
capability:
exposes:
- type: mcp
namespace: gdrive
port: 8080
tools:
- name: get-document
description: "Retrieve a Google Drive document."
inputParameters:
- name: file_id
in: body
type: string
description: "Google Drive file ID."
call: "gdrive.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: mime_type
type: string
mapping: "$.mimeType"
consumes:
- type: http
namespace: gdrive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Appends a row to a Google Sheets spreadsheet.
naftiko: "0.5"
info:
label: "Google Sheets Logger"
description: "Appends a row to a Google Sheets spreadsheet."
tags:
- productivity
- google-sheets
capability:
exposes:
- type: mcp
namespace: sheets-logger
port: 8080
tools:
- name: append-row
description: "Append a row to Google Sheets."
inputParameters:
- name: spreadsheet_id
in: body
type: string
description: "Spreadsheet ID."
- name: range
in: body
type: string
description: "Range."
- name: values
in: body
type: array
description: "Values."
call: "gsheets.append-row"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{range}}"
values: "{{values}}"
consumes:
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Retrieves a Grafana dashboard link for real-time manufacturing monitoring.
naftiko: "0.5"
info:
label: "Grafana Manufacturing Dashboard"
description: "Retrieves a Grafana dashboard link for real-time manufacturing monitoring."
tags:
- monitoring
- grafana
- manufacturing
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: get-dashboard
description: "Retrieve a Grafana dashboard by UID."
inputParameters:
- name: dashboard_uid
in: body
type: string
description: "Dashboard UID."
call: "grafana.get-dashboard"
with:
uid: "{{dashboard_uid}}"
outputParameters:
- name: title
type: string
mapping: "$.dashboard.title"
- name: url
type: string
mapping: "$.meta.url"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.bd.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dashboard
method: GET
Logs HIPAA compliance audit events, uploads audit evidence to SharePoint, and creates a Jira tracking issue for the compliance team.
naftiko: "0.5"
info:
label: "HIPAA Compliance Audit Logger"
description: "Logs HIPAA compliance audit events, uploads audit evidence to SharePoint, and creates a Jira tracking issue for the compliance team."
tags:
- compliance
- hipaa
- healthcare
- sharepoint
- jira
capability:
exposes:
- type: mcp
namespace: hipaa-compliance
port: 8080
tools:
- name: log-compliance-event
description: "Record a HIPAA compliance audit event and route for review."
inputParameters:
- name: event_type
in: body
type: string
description: "Audit event type."
- name: department
in: body
type: string
description: "Department."
- name: findings
in: body
type: string
description: "Audit findings summary."
steps:
- name: upload-evidence
type: call
call: "sharepoint.upload-file"
with:
site_id: "compliance"
folder_path: "HIPAA/{{department}}"
file_name: "audit_{{event_type}}.pdf"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project: "COMPLIANCE"
issue_type: "Task"
summary: "HIPAA audit: {{event_type}} - {{department}}"
description: "Findings: {{findings}}. Evidence: {{upload-evidence.url}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: jira
baseUri: "https://bd.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
Conducts hospital account reviews by pulling account data from Salesforce, analyzing usage in Snowflake, and distributing the review via Microsoft Outlook and Microsoft Teams.
naftiko: "0.5"
info:
label: "Hospital Account Review Pipeline"
description: "Conducts hospital account reviews by pulling account data from Salesforce, analyzing usage in Snowflake, and distributing the review via Microsoft Outlook and Microsoft Teams."
tags:
- medical-devices
- salesforce
- snowflake
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: account-review
port: 8080
tools:
- name: review-hospital-account
description: "Orchestrate hospital account review."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: get-usage
type: call
call: "snowflake.get-account-usage"
with:
account_id: "{{account_id}}"
- name: send-review
type: call
call: "outlook.send-email"
with:
to: "{{get-account.owner_email}}"
subject: "Account Review: {{get-account.name}}"
body: "Revenue: ${{get-usage.revenue}}. Volume: {{get-usage.units}}. Growth: {{get-usage.growth_pct}}%."
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "sales"
text: "Account review: {{get-account.name}}. Revenue: ${{get-usage.revenue}}. Growth: {{get-usage.growth_pct}}%."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-account-usage
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new hospital sales opportunity is identified, creates the opportunity in Salesforce, generates a proposal document in SharePoint, and notifies the regional sales manager.
naftiko: "0.5"
info:
label: "Hospital Sales Opportunity Pipeline"
description: "When a new hospital sales opportunity is identified, creates the opportunity in Salesforce, generates a proposal document in SharePoint, and notifies the regional sales manager."
tags:
- sales
- healthcare
- salesforce
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sales-pipeline
port: 8080
tools:
- name: create-hospital-opportunity
description: "Create a sales opportunity for a hospital account and notify the team."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce hospital account ID."
- name: product_line
in: body
type: string
description: "Product line."
- name: estimated_value
in: body
type: number
description: "Estimated deal value."
- name: sales_rep_email
in: body
type: string
description: "Sales representative email."
steps:
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
account_id: "{{account_id}}"
name: "{{product_line}} - Hospital Deal"
amount: "{{estimated_value}}"
stage: "Prospecting"
- name: create-proposal
type: call
call: "sharepoint.upload-file"
with:
site_id: "sales_proposals"
folder_path: "Proposals/{{create-opportunity.id}}"
file_name: "proposal_template.docx"
- name: notify-rep
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{sales_rep_email}}"
text: "New opportunity created: {{product_line}} for ${{estimated_value}}. Salesforce ID: {{create-opportunity.id}}. Proposal template: {{create-proposal.url}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/chat/messages"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves the current location, quantity, and expiration date for a medical device lot in the warehouse management system.
naftiko: "0.5"
info:
label: "Inventory Lot Tracking Lookup"
description: "Retrieves the current location, quantity, and expiration date for a medical device lot in the warehouse management system."
tags:
- inventory
- manufacturing
- medical-devices
- wms
capability:
exposes:
- type: mcp
namespace: lot-tracking
port: 8080
tools:
- name: get-lot-details
description: "Look up lot details including location, quantity, and expiration."
inputParameters:
- name: lot_number
in: body
type: string
description: "Lot number."
call: "wms.get-lot"
with:
lot_number: "{{lot_number}}"
outputParameters:
- name: location
type: string
mapping: "$.lot.warehouse_location"
- name: quantity
type: number
mapping: "$.lot.quantity_on_hand"
- name: expiration_date
type: string
mapping: "$.lot.expiration_date"
- name: status
type: string
mapping: "$.lot.quality_status"
consumes:
- type: http
namespace: wms
baseUri: "https://wms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: lots
path: "/lots/{{lot_number}}"
inputParameters:
- name: lot_number
in: path
operations:
- name: get-lot
method: GET
Manages IT system changes for validated computer systems by creating change requests in ServiceNow, approval tasks in Jira, and notifying the IT validation team via Microsoft Teams.
naftiko: "0.5"
info:
label: "IT System Change Control Pipeline"
description: "Manages IT system changes for validated computer systems by creating change requests in ServiceNow, approval tasks in Jira, and notifying the IT validation team via Microsoft Teams."
tags:
- medical-devices
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-change
port: 8080
tools:
- name: submit-change-request
description: "Orchestrate IT system change control for validated systems."
inputParameters:
- name: system_name
in: body
type: string
description: "System name."
- name: change_description
in: body
type: string
description: "Change description."
- name: risk_level
in: body
type: string
description: "Risk level."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Change: {{system_name}} - {{change_description}}"
risk: "{{risk_level}}"
- name: create-approval
type: call
call: "jira.create-issue"
with:
project: "ITVAL"
summary: "Change approval: {{system_name}}"
issue_type: "Approval"
- name: notify-validation
type: call
call: "msteams.send-message"
with:
channel_id: "it_validation"
text: "System change: {{system_name}}. Change: {{create-change.change_number}}. Approval: {{create-approval.issue_key}}. Risk: {{risk_level}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Creates a Jira issue. Reusable building block for task creation.
naftiko: "0.5"
info:
label: "Jira Issue Creator"
description: "Creates a Jira issue. Reusable building block for task creation."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: task-mgmt
port: 8080
tools:
- name: create-issue
description: "Create a new Jira issue."
inputParameters:
- name: project
in: body
type: string
description: "Project key."
- name: issue_type
in: body
type: string
description: "Issue type."
- name: summary
in: body
type: string
description: "Summary."
call: "jira.create-issue"
with:
project: "{{project}}"
issue_type: "{{issue_type}}"
summary: "{{summary}}"
outputParameters:
- name: issue_key
type: string
mapping: "$.key"
consumes:
- type: http
namespace: jira
baseUri: "https://bd.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
Retrieves the status, assignee, and due date of a Jira issue.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves the status, assignee, and due date of a Jira issue."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-tracking
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: due_date
type: string
mapping: "$.fields.duedate"
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
When lab equipment calibration is due, creates a ServiceNow work order, logs the schedule in the asset management system, and notifies the lab team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Lab Equipment Calibration Scheduler"
description: "When lab equipment calibration is due, creates a ServiceNow work order, logs the schedule in the asset management system, and notifies the lab team via Microsoft Teams."
tags:
- manufacturing
- quality
- calibration
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: calibration
port: 8080
tools:
- name: schedule-calibration
description: "Schedule lab equipment calibration and notify the team."
inputParameters:
- name: equipment_id
in: body
type: string
description: "Equipment ID."
- name: calibration_type
in: body
type: string
description: "Calibration type."
- name: due_date
in: body
type: string
description: "Due date."
- name: lab_id
in: body
type: string
description: "Lab identifier."
steps:
- name: create-work-order
type: call
call: "servicenow.create-work-order"
with:
short_description: "Calibration: {{equipment_id}} - {{calibration_type}}"
category: "calibration"
due_date: "{{due_date}}"
- name: log-asset
type: call
call: "asset-mgmt.log-calibration"
with:
equipment_id: "{{equipment_id}}"
type: "{{calibration_type}}"
work_order: "{{create-work-order.number}}"
- name: notify-lab
type: call
call: "msteams.send-message"
with:
channel_id: "lab_{{lab_id}}"
text: "Calibration due for {{equipment_id}}: {{calibration_type}} by {{due_date}}. Work order: {{create-work-order.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: asset-mgmt
baseUri: "https://assets.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.asset_mgmt_token"
resources:
- name: calibration-log
path: "/equipment/{{equipment_id}}/calibration"
inputParameters:
- name: equipment_id
in: path
operations:
- name: log-calibration
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Posts a scientific or engineering job opening to LinkedIn and logs it in Google Sheets.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Publisher"
description: "Posts a scientific or engineering job opening to LinkedIn and logs it in Google Sheets."
tags:
- hr
- recruiting
- linkedin
- google-sheets
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: post-job
description: "Publish a job on LinkedIn and track it."
inputParameters:
- name: title
in: body
type: string
description: "Job title."
- name: description
in: body
type: string
description: "Description."
- name: location
in: body
type: string
description: "Location."
steps:
- name: create-posting
type: call
call: "linkedin.create-job"
with:
title: "{{title}}"
description: "{{description}}"
location: "{{location}}"
company_id: "becton-dickinson"
- name: log-posting
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bd_recruiting"
range: "Jobs!A:D"
values:
- "{{title}}"
- "{{location}}"
- "{{create-posting.id}}"
- "active"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: jobs
path: "/simpleJobPostings"
operations:
- name: create-job
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Manages lot release testing by verifying test results in Snowflake, updating batch status in SAP, logging the release in Google Sheets, and notifying QA via Microsoft Teams.
naftiko: "0.5"
info:
label: "Lot Release Testing Pipeline"
description: "Manages lot release testing by verifying test results in Snowflake, updating batch status in SAP, logging the release in Google Sheets, and notifying QA via Microsoft Teams."
tags:
- medical-devices
- snowflake
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lot-release
port: 8080
tools:
- name: process-lot-release
description: "Orchestrate lot release testing and approval."
inputParameters:
- name: lot_number
in: body
type: string
description: "Lot number."
- name: product_code
in: body
type: string
description: "Product code."
steps:
- name: verify-tests
type: call
call: "snowflake.get-lot-results"
with:
lot_number: "{{lot_number}}"
- name: update-sap
type: call
call: "sap.release-batch"
with:
lot_number: "{{lot_number}}"
product_code: "{{product_code}}"
status: "{{verify-tests.pass_fail}}"
- name: log-release
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_lot_releases"
data: "{{lot_number}},{{product_code}},{{verify-tests.pass_fail}}"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel_id: "quality_assurance"
text: "Lot {{lot_number}} ({{product_code}}): {{verify-tests.pass_fail}}. Tests: {{verify-tests.test_count}} complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-lot-results
method: POST
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: batches
path: "/API_BATCH_SRV/Batch"
operations:
- name: release-batch
method: PATCH
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a manufacturing batch is completed, records the batch data in the MES, triggers a quality check in the QMS, uploads the batch record to SharePoint, and notifies the manufacturing team.
naftiko: "0.5"
info:
label: "Manufacturing Batch Record Pipeline"
description: "When a manufacturing batch is completed, records the batch data in the MES, triggers a quality check in the QMS, uploads the batch record to SharePoint, and notifies the manufacturing team."
tags:
- manufacturing
- quality
- medical-devices
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: batch-records
port: 8080
tools:
- name: complete-batch
description: "Process a completed manufacturing batch across MES, QMS, and documentation systems."
inputParameters:
- name: batch_id
in: body
type: string
description: "Manufacturing batch ID."
- name: product_id
in: body
type: string
description: "Product ID."
- name: quantity_produced
in: body
type: number
description: "Units produced."
- name: line_id
in: body
type: string
description: "Production line ID."
steps:
- name: record-batch
type: call
call: "mes.complete-batch"
with:
batch_id: "{{batch_id}}"
product_id: "{{product_id}}"
quantity: "{{quantity_produced}}"
line_id: "{{line_id}}"
- name: trigger-qc
type: call
call: "qms.create-qc-check"
with:
batch_id: "{{batch_id}}"
product_id: "{{product_id}}"
sample_size: "{{record-batch.recommended_sample_size}}"
- name: upload-record
type: call
call: "sharepoint.upload-file"
with:
site_id: "manufacturing"
folder_path: "BatchRecords/{{product_id}}/{{batch_id}}"
file_name: "batch_record_{{batch_id}}.pdf"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing_ops"
text: "Batch {{batch_id}} completed: {{quantity_produced}} units of {{product_id}} on line {{line_id}}. QC check initiated."
consumes:
- type: http
namespace: mes
baseUri: "https://mes.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.mes_token"
resources:
- name: batches
path: "/batches/{{batch_id}}/complete"
inputParameters:
- name: batch_id
in: path
operations:
- name: complete-batch
method: POST
- type: http
namespace: qms
baseUri: "https://qms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qms_token"
resources:
- name: qc-checks
path: "/qc-checks"
operations:
- name: create-qc-check
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes Medical Device Report submissions by compiling data from Salesforce complaints, creating the MDR in Jira, alerting regulatory via Microsoft Teams, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "MDR Report Submission Pipeline"
description: "Processes Medical Device Report submissions by compiling data from Salesforce complaints, creating the MDR in Jira, alerting regulatory via Microsoft Teams, and logging in Google Sheets."
tags:
- medical-devices
- salesforce
- jira
- microsoft-teams
- google-sheets
capability:
exposes:
- type: mcp
namespace: mdr
port: 8080
tools:
- name: submit-mdr
description: "Orchestrate MDR report submission."
inputParameters:
- name: complaint_id
in: body
type: string
description: "Salesforce complaint ID."
- name: event_type
in: body
type: string
description: "Death, serious injury, or malfunction."
steps:
- name: get-complaint
type: call
call: "salesforce.get-case"
with:
case_id: "{{complaint_id}}"
- name: create-mdr
type: call
call: "jira.create-issue"
with:
project: "MDR"
summary: "MDR: {{event_type}} - Case {{complaint_id}}"
issue_type: "Bug"
priority: "Critical"
- name: alert-regulatory
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "MDR REQUIRED: {{event_type}}. Complaint: {{complaint_id}}. MDR: {{create-mdr.issue_key}}. 30-day deadline."
- name: log-mdr
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_mdr_log"
data: "{{complaint_id}},{{event_type}},{{create-mdr.issue_key}},pending"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
When a new medical device is ready for market, creates the regulatory submission in the compliance system, uploads documentation to SharePoint, notifies the regulatory affairs team in Microsoft Teams, and creates a Jira tracking issue for the submission lifecycle.
naftiko: "0.5"
info:
label: "Medical Device Product Registration Orchestrator"
description: "When a new medical device is ready for market, creates the regulatory submission in the compliance system, uploads documentation to SharePoint, notifies the regulatory affairs team in Microsoft Teams, and creates a Jira tracking issue for the submission lifecycle."
tags:
- regulatory
- medical-devices
- compliance
- sharepoint
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: regulatory-submissions
port: 8080
tools:
- name: initiate-device-registration
description: "Orchestrate a medical device regulatory submission across compliance, documentation, and tracking systems."
inputParameters:
- name: device_id
in: body
type: string
description: "Internal device product ID."
- name: device_name
in: body
type: string
description: "Device commercial name."
- name: submission_type
in: body
type: string
description: "Type such as 510k, PMA, or CE_Mark."
- name: target_market
in: body
type: string
description: "Target market region such as US, EU, or APAC."
steps:
- name: create-submission
type: call
call: "regulatory.create-submission"
with:
device_id: "{{device_id}}"
submission_type: "{{submission_type}}"
market: "{{target_market}}"
- name: upload-docs
type: call
call: "sharepoint.upload-file"
with:
site_id: "regulatory_affairs"
folder_path: "Submissions/{{device_id}}/{{submission_type}}"
file_name: "submission_package_{{device_id}}.pdf"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project: "REG"
issue_type: "Epic"
summary: "{{submission_type}} submission: {{device_name}} for {{target_market}}"
description: "Submission ID: {{create-submission.submission_id}}. Documentation: {{upload-docs.url}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "New {{submission_type}} submission initiated for {{device_name}} ({{target_market}}). Tracking: {{create-tracker.key}}. Submission ID: {{create-submission.submission_id}}."
consumes:
- type: http
namespace: regulatory
baseUri: "https://regulatory.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.regulatory_token"
resources:
- name: submissions
path: "/submissions"
operations:
- name: create-submission
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: jira
baseUri: "https://bd.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: send-message
method: POST
When a device recall is issued, creates an urgent ServiceNow incident, sends a Salesforce notification to affected hospital accounts, alerts the regulatory team in Microsoft Teams, and uploads the recall notice to SharePoint.
naftiko: "0.5"
info:
label: "Medical Device Recall Notification Pipeline"
description: "When a device recall is issued, creates an urgent ServiceNow incident, sends a Salesforce notification to affected hospital accounts, alerts the regulatory team in Microsoft Teams, and uploads the recall notice to SharePoint."
tags:
- regulatory
- medical-devices
- recall
- servicenow
- salesforce
- microsoft-teams
- sharepoint
capability:
exposes:
- type: mcp
namespace: device-recall
port: 8080
tools:
- name: initiate-recall
description: "Execute a medical device recall notification across all systems."
inputParameters:
- name: product_id
in: body
type: string
description: "Product ID being recalled."
- name: recall_class
in: body
type: string
description: "FDA recall class such as I, II, or III."
- name: reason
in: body
type: string
description: "Recall reason."
- name: lot_numbers
in: body
type: array
description: "Affected lot numbers."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "RECALL: Product {{product_id}} - Class {{recall_class}}"
category: "recall"
urgency: "1"
description: "{{reason}} | Lots: {{lot_numbers}}"
- name: notify-accounts
type: call
call: "salesforce.create-mass-notification"
with:
product_id: "{{product_id}}"
notification_type: "recall"
message: "Recall notice for product {{product_id}}: {{reason}}. Affected lots: {{lot_numbers}}."
- name: upload-notice
type: call
call: "sharepoint.upload-file"
with:
site_id: "regulatory_affairs"
folder_path: "Recalls/{{product_id}}"
file_name: "recall_notice_{{product_id}}.pdf"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_urgent"
text: "URGENT RECALL: Product {{product_id}}, Class {{recall_class}}. Reason: {{reason}}. {{notify-accounts.accounts_notified}} accounts notified. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.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: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: notifications
path: "/sobjects/Recall_Notification__c"
operations:
- name: create-mass-notification
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Registers unique device identifiers with the FDA GUDID database, updates SAP material master, logs in Google Sheets, and notifies regulatory via Microsoft Teams.
naftiko: "0.5"
info:
label: "Medical Device UDI Registration Pipeline"
description: "Registers unique device identifiers with the FDA GUDID database, updates SAP material master, logs in Google Sheets, and notifies regulatory via Microsoft Teams."
tags:
- medical-devices
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: udi-reg
port: 8080
tools:
- name: register-udi
description: "Orchestrate UDI registration with FDA."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: di_number
in: body
type: string
description: "Device identifier."
steps:
- name: update-sap
type: call
call: "sap.update-material-udi"
with:
product_code: "{{product_code}}"
udi: "{{di_number}}"
- name: log-registration
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_udi_registry"
data: "{{product_code}},{{di_number}},registered"
- name: notify-regulatory
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "UDI registered: {{product_code}} - DI: {{di_number}}. SAP updated."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: materials
path: "/API_MATERIAL_SRV/Material('{{product_code}}')"
inputParameters:
- name: product_code
in: path
operations:
- name: update-material-udi
method: PATCH
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves calendar events from Microsoft Outlook for scheduling quality reviews and regulatory meetings.
naftiko: "0.5"
info:
label: "Microsoft Outlook Calendar Events"
description: "Retrieves calendar events from Microsoft Outlook for scheduling quality reviews and regulatory meetings."
tags:
- medical-devices
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: outlook
port: 8080
tools:
- name: get-calendar-events
description: "Retrieve Outlook calendar events."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
call: "outlook.list-events"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: events
type: array
mapping: "$.value"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: calendar
path: "/me/calendarView"
operations:
- name: list-events
method: GET
Sends an email via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Microsoft Outlook Email Sender"
description: "Sends an email via Microsoft Outlook."
tags:
- collaboration
- microsoft-outlook
- email
capability:
exposes:
- type: mcp
namespace: email
port: 8080
tools:
- name: send-email
description: "Send an email via Outlook."
inputParameters:
- name: to
in: body
type: string
description: "Recipient."
- name: subject
in: body
type: string
description: "Subject."
- name: body
in: body
type: string
description: "Body."
call: "outlook.send-email"
with:
to: "{{to}}"
subject: "{{subject}}"
body: "{{body}}"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a Power Automate flow for automated medical device business processes.
naftiko: "0.5"
info:
label: "Microsoft Power Automate Flow Trigger"
description: "Triggers a Power Automate flow for automated medical device business processes."
tags:
- automation
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: workflow-automation
port: 8080
tools:
- name: trigger-flow
description: "Trigger a Power Automate flow."
inputParameters:
- name: flow_id
in: body
type: string
description: "Flow ID."
- name: payload
in: body
type: object
description: "Input payload."
call: "power-automate.trigger-flow"
with:
flow_id: "{{flow_id}}"
body: "{{payload}}"
outputParameters:
- name: run_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: power-automate
baseUri: "https://api.flow.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.power_automate_token"
resources:
- name: flows
path: "/flows/{{flow_id}}/triggers/manual/run"
inputParameters:
- name: flow_id
in: path
operations:
- name: trigger-flow
method: POST
Sends a message to a Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Notifier"
description: "Sends a message to a Microsoft Teams channel."
tags:
- collaboration
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: teams-messaging
port: 8080
tools:
- name: send-channel-message
description: "Post a message to a Teams channel."
inputParameters:
- name: channel_id
in: body
type: string
description: "Channel ID."
- name: text
in: body
type: string
description: "Message."
call: "msteams.send-message"
with:
channel_id: "{{channel_id}}"
text: "{{text}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates monthly management review data by querying Snowflake for quality KPIs, refreshing Power BI dashboards, compiling reports in SharePoint, and distributing via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Monthly Management Review Pipeline"
description: "Generates monthly management review data by querying Snowflake for quality KPIs, refreshing Power BI dashboards, compiling reports in SharePoint, and distributing via Microsoft Outlook."
tags:
- medical-devices
- snowflake
- power-bi
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: mgmt-review
port: 8080
tools:
- name: generate-review-package
description: "Orchestrate monthly management review preparation."
inputParameters:
- name: month
in: body
type: string
description: "Review month."
steps:
- name: get-kpis
type: call
call: "snowflake.get-quality-kpis"
with:
month: "{{month}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bd_quality_review"
- name: distribute-report
type: call
call: "outlook.send-email"
with:
to: "leadership@bd.com"
subject: "Monthly Management Review Data - {{month}}"
body: "CAPA count: {{get-kpis.capa_count}}. Complaints: {{get-kpis.complaint_count}}. OEE: {{get-kpis.oee}}%. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-quality-kpis
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Orchestrates a new medical device product launch by creating the product in SAP, registering with the FDA reporting system, training sales via Salesforce, and notifying stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Product Launch Orchestrator"
description: "Orchestrates a new medical device product launch by creating the product in SAP, registering with the FDA reporting system, training sales via Salesforce, and notifying stakeholders via Microsoft Teams."
tags:
- medical-devices
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: launch-product
description: "Orchestrate new medical device product launch."
inputParameters:
- name: product_name
in: body
type: string
description: "Product name."
- name: product_code
in: body
type: string
description: "Product code."
- name: fda_class
in: body
type: string
description: "FDA device class."
steps:
- name: create-sap-product
type: call
call: "sap.create-material"
with:
material_name: "{{product_name}}"
material_code: "{{product_code}}"
- name: update-salesforce
type: call
call: "salesforce.create-product"
with:
name: "{{product_name}}"
product_code: "{{product_code}}"
family: "Medical Devices"
- name: create-training
type: call
call: "salesforce.create-campaign"
with:
name: "Launch Training: {{product_name}}"
type: "Product Launch"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
channel_id: "product_launches"
text: "New product launched: {{product_name}} ({{product_code}}). FDA Class: {{fda_class}}. SAP material created. Sales training campaign initiated."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: materials
path: "/API_MATERIAL_SRV/Material"
operations:
- name: create-material
method: POST
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: products
path: "/sobjects/Product2"
operations:
- name: create-product
method: POST
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When New Relic fires an alert, creates a ServiceNow incident and notifies the SRE team.
naftiko: "0.5"
info:
label: "New Relic Alert Handler"
description: "When New Relic fires an alert, creates a ServiceNow incident and notifies the SRE team."
tags:
- monitoring
- new-relic
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: alerting
port: 8080
tools:
- name: handle-alert
description: "Process a New Relic alert through incident management."
inputParameters:
- name: condition_name
in: body
type: string
description: "Alert condition."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Alert: {{condition_name}}"
urgency: "{{severity}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel_id: "sre_alerts"
text: "Alert: {{condition_name}} ({{severity}}). Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.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: send-message
method: POST
Manages packaging validation by recording test results in Google Sheets, creating validation tasks in Jira, refreshing the Power BI quality dashboard, and notifying packaging engineering via Microsoft Teams.
naftiko: "0.5"
info:
label: "Packaging Validation Pipeline"
description: "Manages packaging validation by recording test results in Google Sheets, creating validation tasks in Jira, refreshing the Power BI quality dashboard, and notifying packaging engineering via Microsoft Teams."
tags:
- medical-devices
- google-sheets
- jira
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pkg-validation
port: 8080
tools:
- name: validate-packaging
description: "Orchestrate packaging validation testing."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: test_type
in: body
type: string
description: "Seal strength, burst, or transit."
- name: result
in: body
type: string
description: "Pass or fail."
steps:
- name: record-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_packaging_validation"
data: "{{product_code}},{{test_type}},{{result}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PKG"
summary: "Packaging {{test_type}}: {{product_code}} - {{result}}"
issue_type: "Task"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bd_quality_metrics"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "packaging_engineering"
text: "Packaging validation {{test_type}} for {{product_code}}: {{result}}. Task: {{create-task.issue_key}}."
consumes:
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves details of a Palo Alto firewall rule.
naftiko: "0.5"
info:
label: "Palo Alto Networks Firewall Rule Lookup"
description: "Retrieves details of a Palo Alto firewall rule."
tags:
- security
- networking
- palo-alto-networks
capability:
exposes:
- type: mcp
namespace: firewall
port: 8080
tools:
- name: get-firewall-rule
description: "Look up a Palo Alto firewall rule."
inputParameters:
- name: rule_name
in: body
type: string
description: "Rule name."
call: "paloalto.get-rule"
with:
rule_name: "{{rule_name}}"
outputParameters:
- name: action
type: string
mapping: "$.result.entry.action"
- name: source_zone
type: string
mapping: "$.result.entry.from.member"
consumes:
- type: http
namespace: paloalto
baseUri: "https://panorama.bd.com/restapi/v10.2"
authentication:
type: apikey
key: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules?name={{rule_name}}"
inputParameters:
- name: rule_name
in: path
operations:
- name: get-rule
method: GET
Tracks patent filings by creating records in Jira, logging in Google Sheets, notifying legal via Microsoft Outlook, and alerting R&D via Microsoft Teams.
naftiko: "0.5"
info:
label: "Patent Filing Tracking Pipeline"
description: "Tracks patent filings by creating records in Jira, logging in Google Sheets, notifying legal via Microsoft Outlook, and alerting R&D via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: patent
port: 8080
tools:
- name: track-patent-filing
description: "Orchestrate patent filing tracking."
inputParameters:
- name: invention_title
in: body
type: string
description: "Invention title."
- name: inventors
in: body
type: string
description: "Inventor names."
- name: filing_type
in: body
type: string
description: "Provisional or non-provisional."
steps:
- name: create-record
type: call
call: "jira.create-issue"
with:
project: "IP"
summary: "Patent: {{invention_title}} ({{filing_type}})"
issue_type: "Task"
- name: log-filing
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_patents"
data: "{{invention_title}},{{inventors}},{{filing_type}},{{create-record.issue_key}}"
- name: notify-legal
type: call
call: "outlook.send-email"
with:
to: "ip-legal@bd.com"
subject: "Patent Filing: {{invention_title}}"
body: "Inventors: {{inventors}}. Type: {{filing_type}}. Tracking: {{create-record.issue_key}}."
- name: notify-rd
type: call
call: "msteams.send-message"
with:
channel_id: "research_development"
text: "Patent filing: {{invention_title}} by {{inventors}}. Type: {{filing_type}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers a Power BI dataset refresh for the BD manufacturing operations dashboard and notifies the operations team.
naftiko: "0.5"
info:
label: "Power BI Manufacturing Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the BD manufacturing operations dashboard and notifies the operations team."
tags:
- analytics
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-refresh
port: 8080
tools:
- name: refresh-mfg-dashboard
description: "Trigger a Power BI refresh and notify the operations team."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
steps:
- name: refresh
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing_analytics"
text: "Manufacturing Power BI dashboard refreshed for dataset {{dataset_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages manufacturing process validation by creating protocols in Jira, recording results in Google Sheets, refreshing the Power BI validation dashboard, and notifying the validation team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Process Validation Protocol Pipeline"
description: "Manages manufacturing process validation by creating protocols in Jira, recording results in Google Sheets, refreshing the Power BI validation dashboard, and notifying the validation team via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: process-val
port: 8080
tools:
- name: execute-process-validation
description: "Orchestrate process validation protocol."
inputParameters:
- name: process_name
in: body
type: string
description: "Manufacturing process name."
- name: protocol_type
in: body
type: string
description: "IQ, OQ, or PQ."
- name: result
in: body
type: string
description: "Pass or fail."
steps:
- name: update-protocol
type: call
call: "jira.create-issue"
with:
project: "VAL"
summary: "Process {{protocol_type}}: {{process_name}} - {{result}}"
issue_type: "Task"
- name: record-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_process_validation"
data: "{{process_name}},{{protocol_type}},{{result}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bd_validation_tracker"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "validation"
text: "Process validation {{protocol_type}} for {{process_name}}: {{result}}. Task: {{update-protocol.issue_key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages product labeling reviews by creating review tasks in Jira, uploading proofs to SharePoint, and notifying regulatory and marketing teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Product Labeling Review Pipeline"
description: "Manages product labeling reviews by creating review tasks in Jira, uploading proofs to SharePoint, and notifying regulatory and marketing teams via Microsoft Teams."
tags:
- medical-devices
- jira
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: labeling-review
port: 8080
tools:
- name: submit-labeling-review
description: "Orchestrate product labeling review."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: label_type
in: body
type: string
description: "Label type (primary, secondary, IFU)."
steps:
- name: create-review
type: call
call: "jira.create-issue"
with:
project: "LABEL"
summary: "Label review: {{product_code}} - {{label_type}}"
issue_type: "Task"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "labeling"
text: "Label review initiated: {{product_code}} ({{label_type}}). Review: {{create-review.issue_key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
When new product training content is finalized, uploads it to SharePoint, creates a Pluralsight channel entry reference, and notifies the training team.
naftiko: "0.5"
info:
label: "Product Training Content Publisher"
description: "When new product training content is finalized, uploads it to SharePoint, creates a Pluralsight channel entry reference, and notifies the training team."
tags:
- training
- medical-devices
- sharepoint
- pluralsight
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: training-content
port: 8080
tools:
- name: publish-training
description: "Distribute new product training content across learning platforms."
inputParameters:
- name: product_id
in: body
type: string
description: "Product ID."
- name: course_title
in: body
type: string
description: "Training course title."
- name: content_type
in: body
type: string
description: "Content type such as video, document, or lab_exercise."
steps:
- name: upload-content
type: call
call: "sharepoint.upload-file"
with:
site_id: "training"
folder_path: "Products/{{product_id}}"
file_name: "{{course_title}}.pdf"
- name: notify-training
type: call
call: "msteams.send-message"
with:
channel_id: "training_team"
text: "New training content published: {{course_title}} for product {{product_id}} ({{content_type}}). Available at: {{upload-content.url}}."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Responds to production line downtime by creating a ServiceNow incident, alerting manufacturing ops via Microsoft Teams, scheduling maintenance in SAP, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "Production Line Downtime Response Pipeline"
description: "Responds to production line downtime by creating a ServiceNow incident, alerting manufacturing ops via Microsoft Teams, scheduling maintenance in SAP, and logging in Google Sheets."
tags:
- medical-devices
- servicenow
- microsoft-teams
- sap
- google-sheets
capability:
exposes:
- type: mcp
namespace: downtime
port: 8080
tools:
- name: handle-downtime
description: "Orchestrate production line downtime response."
inputParameters:
- name: line_id
in: body
type: string
description: "Production line ID."
- name: reason
in: body
type: string
description: "Downtime reason."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Production line {{line_id}} down"
description: "{{reason}}"
urgency: "1"
- name: alert-ops
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing"
text: "LINE DOWN: {{line_id}}. Reason: {{reason}}. Incident: {{create-incident.incident_number}}."
- name: schedule-maintenance
type: call
call: "sap.create-maintenance-order"
with:
equipment_id: "{{line_id}}"
description: "{{reason}}"
priority: "emergency"
- name: log-downtime
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_downtime_log"
data: "{{line_id}},{{reason}},{{create-incident.incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
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: send-message
method: POST
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: maintenance
path: "/API_MAINTORDER_SRV/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Retrieves production line data from the MES, calculates OEE metrics, and posts a daily summary to the manufacturing team.
naftiko: "0.5"
info:
label: "Production Line OEE Calculator"
description: "Retrieves production line data from the MES, calculates OEE metrics, and posts a daily summary to the manufacturing team."
tags:
- manufacturing
- analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: oee
port: 8080
tools:
- name: calculate-oee
description: "Compute OEE for a production line and report to the team."
inputParameters:
- name: line_id
in: body
type: string
description: "Production line ID."
- name: date
in: body
type: string
description: "Date."
steps:
- name: get-production-data
type: call
call: "mes.get-line-metrics"
with:
line_id: "{{line_id}}"
date: "{{date}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing_ops"
text: "Line {{line_id}} OEE for {{date}}: {{get-production-data.oee_pct}}% (Availability: {{get-production-data.availability_pct}}%, Performance: {{get-production-data.performance_pct}}%, Quality: {{get-production-data.quality_pct}}%)."
consumes:
- type: http
namespace: mes
baseUri: "https://mes.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.mes_token"
resources:
- name: line-metrics
path: "/lines/{{line_id}}/metrics/{{date}}"
inputParameters:
- name: line_id
in: path
- name: date
in: path
operations:
- name: get-line-metrics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates production schedules by pulling demand from Salesforce, checking material availability in SAP, publishing the schedule in Google Sheets, and notifying manufacturing via Microsoft Teams.
naftiko: "0.5"
info:
label: "Production Scheduling Pipeline"
description: "Generates production schedules by pulling demand from Salesforce, checking material availability in SAP, publishing the schedule in Google Sheets, and notifying manufacturing via Microsoft Teams."
tags:
- medical-devices
- salesforce
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: prod-schedule
port: 8080
tools:
- name: generate-schedule
description: "Orchestrate production scheduling."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: week
in: body
type: string
description: "Production week."
steps:
- name: get-demand
type: call
call: "salesforce.get-forecast"
with:
product_code: "{{product_code}}"
- name: check-materials
type: call
call: "sap.check-availability"
with:
product_code: "{{product_code}}"
- name: publish-schedule
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_production_schedule"
data: "{{product_code}},{{week}},{{get-demand.quantity}},{{check-materials.status}}"
- name: notify-mfg
type: call
call: "msteams.send-message"
with:
channel_id: "manufacturing"
text: "Production schedule: {{product_code}} week {{week}}. Demand: {{get-demand.quantity}}. Materials: {{check-materials.status}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: forecasts
path: "/sobjects/ForecastingItem"
operations:
- name: get-forecast
method: GET
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: availability
path: "/API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod"
operations:
- name: check-availability
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates a Qlik Sense report for manufacturing KPIs and emails it to the operations director.
naftiko: "0.5"
info:
label: "Qlik Sense Dashboard Report Generator"
description: "Generates a Qlik Sense report for manufacturing KPIs and emails it to the operations director."
tags:
- analytics
- manufacturing
- qlik-sense
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: mfg-reporting
port: 8080
tools:
- name: generate-mfg-report
description: "Generate and email a manufacturing KPI report from Qlik Sense."
inputParameters:
- name: app_id
in: body
type: string
description: "Qlik Sense app ID."
- name: report_period
in: body
type: string
description: "Report period."
- name: director_email
in: body
type: string
description: "Operations director email."
steps:
- name: generate-report
type: call
call: "qliksense.generate-report"
with:
app_id: "{{app_id}}"
period: "{{report_period}}"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "{{director_email}}"
subject: "Manufacturing KPI Report - {{report_period}}"
body: "OEE: {{generate-report.oee_pct}}%. Yield: {{generate-report.yield_pct}}%. Scrap rate: {{generate-report.scrap_rate_pct}}%. Report: {{generate-report.download_url}}."
consumes:
- type: http
namespace: qliksense
baseUri: "https://qlik.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qliksense_token"
resources:
- name: reports
path: "/apps/{{app_id}}/reports"
inputParameters:
- name: app_id
in: path
operations:
- name: generate-report
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a reload of a Qlik Sense manufacturing analytics dashboard to refresh with latest production data.
naftiko: "0.5"
info:
label: "Qlik Sense Manufacturing Dashboard Reload"
description: "Triggers a reload of a Qlik Sense manufacturing analytics dashboard to refresh with latest production data."
tags:
- medical-devices
- qlik-sense
capability:
exposes:
- type: mcp
namespace: qlik
port: 8080
tools:
- name: reload-dashboard
description: "Trigger a Qlik Sense dashboard reload."
inputParameters:
- name: app_id
in: body
type: string
description: "Qlik Sense app ID."
call: "qlik.reload-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: reload_id
type: string
mapping: "$.id"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: qlik
baseUri: "https://qlik.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
resources:
- name: reloads
path: "/reloads"
operations:
- name: reload-app
method: POST
When a product quality complaint is received, creates a CAPA record in the quality management system, opens a ServiceNow investigation ticket, notifies the quality team in Microsoft Teams, and creates a Jira tracking issue.
naftiko: "0.5"
info:
label: "Quality Complaint Investigation Pipeline"
description: "When a product quality complaint is received, creates a CAPA record in the quality management system, opens a ServiceNow investigation ticket, notifies the quality team in Microsoft Teams, and creates a Jira tracking issue."
tags:
- quality
- medical-devices
- servicenow
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: quality-complaints
port: 8080
tools:
- name: investigate-complaint
description: "Process a product quality complaint through investigation and tracking systems."
inputParameters:
- name: complaint_id
in: body
type: string
description: "Complaint reference number."
- name: product_id
in: body
type: string
description: "Product ID."
- name: description
in: body
type: string
description: "Complaint description."
- name: severity
in: body
type: string
description: "Severity level such as critical, major, or minor."
steps:
- name: create-capa
type: call
call: "qms.create-capa"
with:
complaint_id: "{{complaint_id}}"
product_id: "{{product_id}}"
description: "{{description}}"
severity: "{{severity}}"
- name: create-investigation
type: call
call: "servicenow.create-incident"
with:
short_description: "Quality complaint: {{complaint_id}} - Product {{product_id}}"
category: "quality"
urgency: "{{severity}}"
description: "{{description}} | CAPA: {{create-capa.capa_number}}"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project: "QUALITY"
issue_type: "Bug"
summary: "Investigate complaint {{complaint_id}} for product {{product_id}}"
description: "CAPA: {{create-capa.capa_number}}. ServiceNow: {{create-investigation.number}}."
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "quality_team"
text: "Quality complaint {{complaint_id}} ({{severity}}): Product {{product_id}}. CAPA: {{create-capa.capa_number}}. Investigation: {{create-investigation.number}}."
consumes:
- type: http
namespace: qms
baseUri: "https://qms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qms_token"
resources:
- name: capas
path: "/capas"
operations:
- name: create-capa
method: POST
- type: http
namespace: servicenow
baseUri: "https://bd.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: jira
baseUri: "https://bd.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: send-message
method: POST
Processes incoming raw material inspections by checking specs in SAP, recording results in Google Sheets, creating disposition tasks in Jira, and notifying QC via Microsoft Teams.
naftiko: "0.5"
info:
label: "Raw Material Incoming Inspection Pipeline"
description: "Processes incoming raw material inspections by checking specs in SAP, recording results in Google Sheets, creating disposition tasks in Jira, and notifying QC via Microsoft Teams."
tags:
- medical-devices
- sap
- google-sheets
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incoming-inspect
port: 8080
tools:
- name: inspect-incoming-material
description: "Orchestrate incoming raw material inspection."
inputParameters:
- name: material_code
in: body
type: string
description: "Material code."
- name: lot_number
in: body
type: string
description: "Supplier lot number."
- name: result
in: body
type: string
description: "Pass or fail."
steps:
- name: check-specs
type: call
call: "sap.get-material-spec"
with:
material_code: "{{material_code}}"
- name: record-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_incoming_inspection"
data: "{{material_code}},{{lot_number}},{{result}}"
- name: create-disposition
type: call
call: "jira.create-issue"
with:
project: "QC"
summary: "Incoming inspection: {{material_code}} Lot {{lot_number}} - {{result}}"
issue_type: "Task"
- name: notify-qc
type: call
call: "msteams.send-message"
with:
channel_id: "quality_control"
text: "Incoming inspection: {{material_code}} Lot {{lot_number}}: {{result}}. Disposition: {{create-disposition.issue_key}}."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: materials
path: "/API_MATERIAL_SRV/Material('{{material_code}}')"
inputParameters:
- name: material_code
in: path
operations:
- name: get-material-spec
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Orchestrates regulatory submissions by compiling documents from SharePoint, creating a submission record in Jira, notifying regulatory affairs via Microsoft Teams, and sending confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Regulatory Submission Orchestrator"
description: "Orchestrates regulatory submissions by compiling documents from SharePoint, creating a submission record in Jira, notifying regulatory affairs via Microsoft Teams, and sending confirmation via Microsoft Outlook."
tags:
- medical-devices
- sharepoint
- jira
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: reg-submit
port: 8080
tools:
- name: submit-regulatory-package
description: "Orchestrate regulatory submission package preparation."
inputParameters:
- name: submission_type
in: body
type: string
description: "510(k), PMA, or De Novo."
- name: product_code
in: body
type: string
description: "Product code."
steps:
- name: create-record
type: call
call: "jira.create-issue"
with:
project: "REG"
summary: "{{submission_type}} Submission: {{product_code}}"
issue_type: "Epic"
- name: notify-regulatory
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "Regulatory submission initiated: {{submission_type}} for {{product_code}}. Tracking: {{create-record.issue_key}}."
- name: confirm-stakeholders
type: call
call: "outlook.send-email"
with:
to: "regulatory-team@bd.com"
subject: "{{submission_type}} Submission Initiated: {{product_code}}"
body: "Submission tracking: {{create-record.issue_key}}. Please ensure all documents are uploaded to SharePoint."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Updates product risk management files by creating Jira tasks for risk assessment reviews, logging updates in Google Sheets, and notifying the risk management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Risk Management Update Pipeline"
description: "Updates product risk management files by creating Jira tasks for risk assessment reviews, logging updates in Google Sheets, and notifying the risk management team via Microsoft Teams."
tags:
- medical-devices
- jira
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-mgmt
port: 8080
tools:
- name: update-risk-file
description: "Orchestrate risk management file update."
inputParameters:
- name: product_code
in: body
type: string
description: "Product code."
- name: risk_type
in: body
type: string
description: "Risk type (FMEA, FTA, hazard analysis)."
- name: trigger
in: body
type: string
description: "Trigger for review."
steps:
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project: "RISK"
summary: "Risk review: {{product_code}} - {{risk_type}}"
description: "Trigger: {{trigger}}"
issue_type: "Task"
- name: log-update
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_risk_management"
data: "{{product_code}},{{risk_type}},{{trigger}},{{create-review-task.issue_key}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "risk_management"
text: "Risk review: {{product_code}} {{risk_type}} triggered by {{trigger}}. Task: {{create-review-task.issue_key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a hospital or healthcare provider account profile from Salesforce including contract status and device install base.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Lookup"
description: "Retrieves a hospital or healthcare provider account profile from Salesforce including contract status and device install base."
tags:
- crm
- salesforce
- healthcare
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-account
description: "Look up a healthcare customer account in Salesforce."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: contract_status
type: string
mapping: "$.Contract_Status__c"
- name: install_base_count
type: number
mapping: "$.Install_Base_Count__c"
- name: annual_revenue
type: number
mapping: "$.AnnualRevenue"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bd.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Creates a procurement requisition in SAP Ariba for medical device components.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Requisition"
description: "Creates a procurement requisition in SAP Ariba for medical device components."
tags:
- procurement
- sap-ariba
- medical-devices
capability:
exposes:
- type: mcp
namespace: procurement-ariba
port: 8080
tools:
- name: create-requisition
description: "Create a procurement requisition in SAP Ariba."
inputParameters:
- name: material_description
in: body
type: string
description: "Material description."
- name: quantity
in: body
type: number
description: "Quantity."
- name: cost_center
in: body
type: string
description: "Cost center."
call: "ariba.create-requisition"
with:
description: "{{material_description}}"
quantity: "{{quantity}}"
cost_center: "{{cost_center}}"
outputParameters:
- name: requisition_id
type: string
mapping: "$.requisition.id"
- name: status
type: string
mapping: "$.requisition.status"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions"
operations:
- name: create-requisition
method: POST
Checks the approval status of an expense report in SAP Concur by report ID.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Status"
description: "Checks the approval status of an expense report in SAP Concur by report ID."
tags:
- medical-devices
- sap-concur
capability:
exposes:
- type: mcp
namespace: concur
port: 8080
tools:
- name: get-expense-status
description: "Check expense report status."
inputParameters:
- name: report_id
in: body
type: string
description: "Expense report ID."
call: "concur.get-report"
with:
report_id: "{{report_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ApprovalStatusName"
- name: total
type: number
mapping: "$.Total"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
When an employee submits a travel expense in SAP Concur, validates against department budget and notifies the manager.
naftiko: "0.5"
info:
label: "SAP Concur Travel Expense Processor"
description: "When an employee submits a travel expense in SAP Concur, validates against department budget and notifies the manager."
tags:
- finance
- travel
- sap-concur
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: travel-expenses
port: 8080
tools:
- name: process-expense
description: "Validate and route a travel expense report."
inputParameters:
- name: report_id
in: body
type: string
description: "Concur report ID."
- name: manager_email
in: body
type: string
description: "Manager email."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{manager_email}}"
text: "Expense report {{report_id}} submitted: ${{get-report.total_amount}} from {{get-report.employee_name}}. Please review."
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/chat/messages"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Looks up goods receipt status in SAP for inbound materials and components.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Lookup"
description: "Looks up goods receipt status in SAP for inbound materials and components."
tags:
- medical-devices
- sap
capability:
exposes:
- type: mcp
namespace: sap
port: 8080
tools:
- name: get-goods-receipt
description: "Look up goods receipt in SAP."
inputParameters:
- name: po_number
in: body
type: string
description: "Purchase order number."
call: "sap.get-gr"
with:
po_number: "{{po_number}}"
outputParameters:
- name: receipt_date
type: string
mapping: "$.d.PostingDate"
- name: quantity
type: number
mapping: "$.d.Quantity"
consumes:
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: goods-receipts
path: "/API_GOODS_RECEIPT_SRV/GoodsReceipt(PurchaseOrder='{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-gr
method: GET
Looks up a SAP S/4HANA purchase order for medical device components and returns status, vendor, and delivery details.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order for medical device components and returns status, vendor, and delivery details."
tags:
- procurement
- erp
- sap
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order by number."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number."
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_value
type: string
mapping: "$.d.TotalAmount"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://bd-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 the current state, priority, and assignment for a ServiceNow incident.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current state, priority, and assignment for a ServiceNow incident."
tags:
- it-support
- servicenow
capability:
exposes:
- type: mcp
namespace: it-support
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Retrieves a document from a SharePoint site.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves a document from a SharePoint site."
tags:
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: get-document
description: "Retrieve a document from SharePoint."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "File path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: download_url
type: string
mapping: "$.@microsoft.graph.downloadUrl"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Qualifies shipping lanes for temperature-sensitive devices by analyzing temperature data from Snowflake, logging results in Google Sheets, creating approval tasks in Jira, and notifying supply chain via Microsoft Teams.
naftiko: "0.5"
info:
label: "Shipping Lane Qualification Pipeline"
description: "Qualifies shipping lanes for temperature-sensitive devices by analyzing temperature data from Snowflake, logging results in Google Sheets, creating approval tasks in Jira, and notifying supply chain via Microsoft Teams."
tags:
- medical-devices
- snowflake
- google-sheets
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lane-qual
port: 8080
tools:
- name: qualify-shipping-lane
description: "Orchestrate shipping lane temperature qualification."
inputParameters:
- name: lane_id
in: body
type: string
description: "Shipping lane ID."
- name: product_code
in: body
type: string
description: "Product code."
steps:
- name: analyze-temp-data
type: call
call: "snowflake.get-lane-temps"
with:
lane_id: "{{lane_id}}"
- name: log-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_lane_qual"
data: "{{lane_id}},{{product_code}},{{analyze-temp-data.min_temp}},{{analyze-temp-data.max_temp}},{{analyze-temp-data.pass_fail}}"
- name: create-approval
type: call
call: "jira.create-issue"
with:
project: "SC"
summary: "Lane qualification: {{lane_id}} for {{product_code}} - {{analyze-temp-data.pass_fail}}"
issue_type: "Task"
- name: notify-supply-chain
type: call
call: "msteams.send-message"
with:
channel_id: "supply_chain"
text: "Lane {{lane_id}} for {{product_code}}: {{analyze-temp-data.pass_fail}}. Temp range: {{analyze-temp-data.min_temp}}-{{analyze-temp-data.max_temp}}C."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-lane-temps
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
Executes a predefined query against Snowflake for clinical trial analytics and device performance data.
naftiko: "0.5"
info:
label: "Snowflake Clinical Data Query"
description: "Executes a predefined query against Snowflake for clinical trial analytics and device performance data."
tags:
- medical-devices
- snowflake
capability:
exposes:
- type: mcp
namespace: snowflake
port: 8080
tools:
- name: query-clinical-data
description: "Query Snowflake for clinical data."
inputParameters:
- name: study_id
in: body
type: string
description: "Clinical study ID."
call: "snowflake.run-query"
with:
study_id: "{{study_id}}"
outputParameters:
- name: results
type: array
mapping: "$.data"
- name: row_count
type: number
mapping: "$.rowCount"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Executes a SQL query against the BD Snowflake data warehouse and returns results.
naftiko: "0.5"
info:
label: "Snowflake Data Query"
description: "Executes a SQL query against the BD Snowflake data warehouse and returns results."
tags:
- data-engineering
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: data-warehouse
port: 8080
tools:
- name: query-data
description: "Execute a SQL query against Snowflake."
inputParameters:
- name: sql
in: body
type: string
description: "SQL query to execute."
- name: warehouse
in: body
type: string
description: "Snowflake warehouse name."
call: "snowflake.execute-query"
with:
statement: "{{sql}}"
warehouse: "{{warehouse}}"
outputParameters:
- name: rows
type: array
mapping: "$.data"
- name: row_count
type: number
mapping: "$.resultSetMetaData.numRows"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries SolarWinds for network device status and uptime across BD facilities.
naftiko: "0.5"
info:
label: "SolarWinds Network Device Monitor"
description: "Queries SolarWinds for network device status and uptime across BD facilities."
tags:
- monitoring
- networking
- solarwinds
capability:
exposes:
- type: mcp
namespace: network-monitoring
port: 8080
tools:
- name: get-node-status
description: "Retrieve network node status from SolarWinds."
inputParameters:
- name: node_id
in: body
type: string
description: "SolarWinds node ID."
call: "solarwinds.get-node"
with:
node_id: "{{node_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: response_time
type: number
mapping: "$.ResponseTime"
consumes:
- type: http
namespace: solarwinds
baseUri: "https://solarwinds.bd.com:17778/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query?query=SELECT+*+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}"
inputParameters:
- name: node_id
in: path
operations:
- name: get-node
method: GET
Searches Splunk for security events in BD systems.
naftiko: "0.5"
info:
label: "Splunk Security Event Search"
description: "Searches Splunk for security events in BD systems."
tags:
- security
- monitoring
- splunk
capability:
exposes:
- type: mcp
namespace: security-logs
port: 8080
tools:
- name: search-security-events
description: "Search Splunk for security events."
inputParameters:
- name: query
in: body
type: string
description: "Splunk search query."
- name: time_range
in: body
type: string
description: "Time range."
call: "splunk.search"
with:
search: "{{query}}"
earliest_time: "{{time_range}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: count
type: number
mapping: "$.result_count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.bd.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs/export"
operations:
- name: search
method: POST
Manages sterility assurance reviews by pulling test data from Snowflake, creating review tasks in Jira, logging results in Google Sheets, and notifying the QA team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Sterility Assurance Review Pipeline"
description: "Manages sterility assurance reviews by pulling test data from Snowflake, creating review tasks in Jira, logging results in Google Sheets, and notifying the QA team via Microsoft Teams."
tags:
- medical-devices
- snowflake
- jira
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sterility
port: 8080
tools:
- name: review-sterility
description: "Orchestrate sterility assurance review."
inputParameters:
- name: lot_number
in: body
type: string
description: "Lot number."
- name: sterilization_method
in: body
type: string
description: "Sterilization method (EO, gamma, steam)."
steps:
- name: get-test-data
type: call
call: "snowflake.get-sterility-results"
with:
lot_number: "{{lot_number}}"
- name: create-review
type: call
call: "jira.create-issue"
with:
project: "QA"
summary: "Sterility review: Lot {{lot_number}} ({{sterilization_method}})"
issue_type: "Task"
- name: log-results
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_sterility_log"
data: "{{lot_number}},{{sterilization_method}},{{get-test-data.result}}"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel_id: "quality_assurance"
text: "Sterility review: Lot {{lot_number}} ({{sterilization_method}}): {{get-test-data.result}}. Review: {{create-review.issue_key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-sterility-results
method: POST
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Schedules supplier quality audits by looking up the supplier in SAP Ariba, creating an audit task in Jira, scheduling via Zoom, and notifying the supplier quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Audit Scheduling Pipeline"
description: "Schedules supplier quality audits by looking up the supplier in SAP Ariba, creating an audit task in Jira, scheduling via Zoom, and notifying the supplier quality team via Microsoft Teams."
tags:
- medical-devices
- sap-ariba
- jira
- zoom
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-audit
port: 8080
tools:
- name: schedule-audit
description: "Orchestrate supplier audit scheduling."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Supplier name."
- name: audit_type
in: body
type: string
description: "Audit type."
- name: audit_date
in: body
type: string
description: "Planned audit date."
steps:
- name: create-audit-task
type: call
call: "jira.create-issue"
with:
project: "SQA"
summary: "{{audit_type}} Audit: {{supplier_name}}"
issue_type: "Task"
- name: schedule-meeting
type: call
call: "zoom.create-meeting"
with:
topic: "Supplier Audit: {{supplier_name}} - {{audit_type}}"
start_time: "{{audit_date}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "supplier_quality"
text: "Supplier audit scheduled: {{supplier_name}} ({{audit_type}}) on {{audit_date}}. Task: {{create-audit-task.issue_key}}. Zoom: {{schedule-meeting.join_url}}."
consumes:
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Schedules a supplier quality audit, creates the audit record in the QMS, generates an audit plan document in SharePoint, and notifies the supplier quality team.
naftiko: "0.5"
info:
label: "Supplier Quality Audit Pipeline"
description: "Schedules a supplier quality audit, creates the audit record in the QMS, generates an audit plan document in SharePoint, and notifies the supplier quality team."
tags:
- quality
- procurement
- medical-devices
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-audits
port: 8080
tools:
- name: schedule-supplier-audit
description: "Create and distribute a supplier quality audit plan."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: vendor_name
in: body
type: string
description: "Vendor name."
- name: audit_date
in: body
type: string
description: "Planned audit date."
- name: audit_type
in: body
type: string
description: "Audit type such as initial, periodic, or for_cause."
steps:
- name: create-audit
type: call
call: "qms.create-audit"
with:
vendor_id: "{{vendor_id}}"
type: "{{audit_type}}"
scheduled_date: "{{audit_date}}"
- name: upload-plan
type: call
call: "sharepoint.upload-file"
with:
site_id: "supplier_quality"
folder_path: "Audits/{{vendor_name}}"
file_name: "audit_plan_{{audit_date}}.pdf"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "supplier_quality"
text: "Supplier audit scheduled: {{vendor_name}} ({{audit_type}}) on {{audit_date}}. Audit ID: {{create-audit.audit_id}}."
consumes:
- type: http
namespace: qms
baseUri: "https://qms.bd.com/api/v1"
authentication:
type: bearer
token: "$secrets.qms_token"
resources:
- name: audits
path: "/audits"
operations:
- name: create-audit
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a supply chain disruption is detected, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs the event in Google Sheets.
naftiko: "0.5"
info:
label: "Supply Chain Disruption Alert Pipeline"
description: "When a supply chain disruption is detected, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs the event in Google Sheets."
tags:
- supply-chain
- medical-devices
- servicenow
- microsoft-teams
- google-sheets
capability:
exposes:
- type: mcp
namespace: supply-chain-alerts
port: 8080
tools:
- name: handle-disruption
description: "Process a supply chain disruption alert."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Affected supplier."
- name: material
in: body
type: string
description: "Affected material."
- name: impact_level
in: body
type: string
description: "Impact level."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Supply disruption: {{material}} from {{supplier_name}}"
category: "supply_chain"
urgency: "{{impact_level}}"
- name: log-event
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bd_supply_chain"
range: "Disruptions!A:D"
values:
- "{{supplier_name}}"
- "{{material}}"
- "{{impact_level}}"
- "{{create-incident.number}}"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "supply_chain"
text: "Supply disruption: {{material}} from {{supplier_name}} ({{impact_level}}). Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bd.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: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Tableau dashboard URL for manufacturing analytics review.
naftiko: "0.5"
info:
label: "Tableau Manufacturing Analytics Dashboard"
description: "Retrieves a Tableau dashboard URL for manufacturing analytics review."
tags:
- analytics
- tableau
- manufacturing
capability:
exposes:
- type: mcp
namespace: mfg-analytics
port: 8080
tools:
- name: get-dashboard
description: "Retrieve a Tableau dashboard for manufacturing."
inputParameters:
- name: workbook_name
in: body
type: string
description: "Workbook name."
call: "tableau.get-workbook"
with:
workbook_name: "{{workbook_name}}"
outputParameters:
- name: url
type: string
mapping: "$.workbook.contentUrl"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.bd.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}"
inputParameters:
- name: workbook_name
in: path
operations:
- name: get-workbook
method: GET
Triggers a refresh of the Tableau quality metrics dashboard to update with latest manufacturing data.
naftiko: "0.5"
info:
label: "Tableau Quality Dashboard Refresh"
description: "Triggers a refresh of the Tableau quality metrics dashboard to update with latest manufacturing data."
tags:
- medical-devices
- tableau
capability:
exposes:
- type: mcp
namespace: tableau
port: 8080
tools:
- name: refresh-quality-dashboard
description: "Trigger a Tableau quality dashboard refresh."
inputParameters:
- name: workbook_id
in: body
type: string
description: "Tableau workbook ID."
call: "tableau.refresh-workbook"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: job_id
type: string
mapping: "$.job.id"
- name: status
type: string
mapping: "$.job.status"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.bd.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
Retrieves the latest run status for a Terraform Cloud workspace used by BD infrastructure teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Workspace Status"
description: "Retrieves the latest run status for a Terraform Cloud workspace used by BD infrastructure teams."
tags:
- devops
- infrastructure
- terraform
capability:
exposes:
- type: mcp
namespace: iac
port: 8080
tools:
- name: get-workspace-status
description: "Check the latest Terraform run status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Workspace ID."
call: "terraform.get-latest-run"
with:
workspace_id: "{{workspace_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/workspaces/{{workspace_id}}/runs?page[size]=1"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-latest-run
method: GET
Checks employee training compliance by pulling records from Workday, flagging overdue training in Jira, and notifying managers via Microsoft Teams and Microsoft Outlook.
naftiko: "0.5"
info:
label: "Training Compliance Pipeline"
description: "Checks employee training compliance by pulling records from Workday, flagging overdue training in Jira, and notifying managers via Microsoft Teams and Microsoft Outlook."
tags:
- medical-devices
- workday
- jira
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: training-compliance
port: 8080
tools:
- name: check-training-compliance
description: "Orchestrate training compliance check."
inputParameters:
- name: department
in: body
type: string
description: "Department name."
steps:
- name: get-training-status
type: call
call: "workday.get-training-records"
with:
department: "{{department}}"
- name: create-overdue-tasks
type: call
call: "jira.create-issue"
with:
project: "TRAIN"
summary: "Overdue training: {{department}} - {{get-training-status.overdue_count}} employees"
issue_type: "Task"
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "training"
text: "Training compliance: {{department}} - {{get-training-status.overdue_count}} overdue. Task: {{create-overdue-tasks.issue_key}}."
- name: email-managers
type: call
call: "outlook.send-email"
with:
to: "{{department}}-managers@bd.com"
subject: "Training Compliance Alert: {{department}}"
body: "{{get-training-status.overdue_count}} employees have overdue training. Please ensure completion by end of month."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/bd"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/workers/trainingRecords"
operations:
- name: get-training-records
method: GET
- type: http
namespace: jira
baseUri: "https://bd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: send-message
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Generates vendor scorecards by pulling quality data from Snowflake, delivery metrics from SAP, compiling in Google Sheets, and distributing via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Vendor Score Card Pipeline"
description: "Generates vendor scorecards by pulling quality data from Snowflake, delivery metrics from SAP, compiling in Google Sheets, and distributing via Microsoft Outlook."
tags:
- medical-devices
- snowflake
- sap
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: vendor-scorecard
port: 8080
tools:
- name: generate-scorecard
description: "Orchestrate vendor scorecard generation."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: period
in: body
type: string
description: "Review period."
steps:
- name: get-quality-data
type: call
call: "snowflake.get-vendor-quality"
with:
vendor_id: "{{vendor_id}}"
period: "{{period}}"
- name: get-delivery-data
type: call
call: "sap.get-vendor-delivery"
with:
vendor_id: "{{vendor_id}}"
period: "{{period}}"
- name: compile-scorecard
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_vendor_scorecards"
data: "{{vendor_id}},{{period}},{{get-quality-data.score}},{{get-delivery-data.on_time_pct}}"
- name: distribute
type: call
call: "outlook.send-email"
with:
to: "supplier-quality@bd.com"
subject: "Vendor Scorecard: {{vendor_id}} - {{period}}"
body: "Quality score: {{get-quality-data.score}}. On-time delivery: {{get-delivery-data.on_time_pct}}%."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bd.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-vendor-quality
method: POST
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: vendors
path: "/API_PURCHASEORDER_SRV/PurchaseOrder"
operations:
- name: get-vendor-delivery
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Processes warehouse cycle counts by pulling SAP inventory data, comparing physical counts, logging variances in Google Sheets, and notifying warehouse management via Microsoft Teams.
naftiko: "0.5"
info:
label: "Warehouse Inventory Cycle Count Pipeline"
description: "Processes warehouse cycle counts by pulling SAP inventory data, comparing physical counts, logging variances in Google Sheets, and notifying warehouse management via Microsoft Teams."
tags:
- medical-devices
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cycle-count
port: 8080
tools:
- name: process-cycle-count
description: "Orchestrate warehouse cycle count reconciliation."
inputParameters:
- name: warehouse_id
in: body
type: string
description: "Warehouse ID."
- name: zone
in: body
type: string
description: "Warehouse zone."
steps:
- name: get-sap-inventory
type: call
call: "sap.get-inventory"
with:
warehouse_id: "{{warehouse_id}}"
zone: "{{zone}}"
- name: log-variances
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bd_cycle_counts"
data: "{{warehouse_id}},{{zone}},{{get-sap-inventory.item_count}}"
- name: notify-warehouse
type: call
call: "msteams.send-message"
with:
channel_id: "warehouse_ops"
text: "Cycle count complete: Warehouse {{warehouse_id}} Zone {{zone}}. Items counted: {{get-sap-inventory.item_count}}."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.bd.com/sap/opu/odata/sap"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: inventory
path: "/API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod"
operations:
- name: get-inventory
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves employee compensation details from Workday by employee ID.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves employee compensation details from Workday by employee ID."
tags:
- medical-devices
- workday
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: get-compensation
description: "Look up employee compensation in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "workday.get-comp"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: base_salary
type: number
mapping: "$.data.base_pay"
- name: currency
type: string
mapping: "$.data.currency"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/bd"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{employee_id}}/compensation"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-comp
method: GET
Retrieves an employee profile from Workday including name, department, and job title.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday including name, department, and job title."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Look up a BD employee in Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.full_name"
- name: department
type: string
mapping: "$.worker.department"
- name: job_title
type: string
mapping: "$.worker.job_title"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Creates a Zendesk support ticket for field service on installed medical devices at customer sites.
naftiko: "0.5"
info:
label: "Zendesk Field Service Ticket Creator"
description: "Creates a Zendesk support ticket for field service on installed medical devices at customer sites."
tags:
- customer-service
- zendesk
- medical-devices
capability:
exposes:
- type: mcp
namespace: field-service
port: 8080
tools:
- name: create-service-ticket
description: "Create a field service ticket for a medical device issue."
inputParameters:
- name: hospital_name
in: body
type: string
description: "Hospital name."
- name: device_serial
in: body
type: string
description: "Device serial number."
- name: issue_description
in: body
type: string
description: "Issue description."
- name: priority
in: body
type: string
description: "Priority level."
call: "zendesk.create-ticket"
with:
subject: "Field service: {{device_serial}} at {{hospital_name}}"
description: "{{issue_description}}"
priority: "{{priority}}"
tags:
- "field_service"
- "medical_device"
outputParameters:
- name: ticket_id
type: string
mapping: "$.ticket.id"
- name: ticket_url
type: string
mapping: "$.ticket.url"
consumes:
- type: http
namespace: zendesk
baseUri: "https://bd.zendesk.com/api/v2"
authentication:
type: basic
username: "$secrets.zendesk_user"
password: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets"
operations:
- name: create-ticket
method: POST
Creates a scheduled Zoom meeting for cross-functional team meetings and quality review sessions.
naftiko: "0.5"
info:
label: "Zoom Meeting Scheduler"
description: "Creates a scheduled Zoom meeting for cross-functional team meetings and quality review sessions."
tags:
- medical-devices
- zoom
capability:
exposes:
- type: mcp
namespace: zoom
port: 8080
tools:
- name: create-meeting
description: "Schedule a Zoom meeting."
inputParameters:
- name: topic
in: body
type: string
description: "Meeting topic."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601."
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
start_time: "{{start_time}}"
outputParameters:
- name: meeting_id
type: string
mapping: "$.id"
- name: join_url
type: string
mapping: "$.join_url"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST