Becton Dickinson Capabilities

Naftiko 0.5 capability definitions for Becton Dickinson - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

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